- A Linux server (Ubuntu 22.04+ recommended)
- Docker + Docker Compose
- Nginx Proxy Manager (or any reverse proxy)
- A domain name pointing to your server
Create a directory and add a compose.yml:
mkdir livedot && cd livedotservices:
livedot:
image: ghcr.io/mxvsh/livedot:latest
restart: unless-stopped
volumes:
- ./data:/data
- ./geo:/geo
env_file:
- .env
networks:
- proxy
networks:
proxy:
external: trueNo ports are exposed to the host. Nginx Proxy Manager connects to Livedot over the shared
proxyDocker network.
NODE_ENV=production
DATABASE_PATH=/data/livedot.db
BETTER_AUTH_SECRET=your-random-secret-here
BETTER_AUTH_URL=https://livedot.yourdomain.com
DEFAULT_MAX_USER_SIGNUP=1
# Plans (ce/free/pro/max) are defined in code — self-hosted defaults to "ce" (unlimited)Generate a secret:
openssl rand -hex 32
BETTER_AUTH_URLmust match the public URL you expose — auth cookies are scoped to it.
docker compose up -dThis network must exist before starting any containers that use it:
docker network create proxyIf Nginx Proxy Manager is already running on this network, skip this step.
- Open Nginx Proxy Manager (usually at
http://your-server:81) - Go to Proxy Hosts → Add Proxy Host
- Fill in:
- Domain Names:
livedot.yourdomain.com - Scheme:
http - Forward Hostname / IP:
livedot(the container name) - Forward Port:
80 - Enable Websockets Support ← required for live map
- Domain Names:
- Under the SSL tab:
- Request a Let's Encrypt certificate
- Enable Force SSL
- Save
Open https://livedot.yourdomain.com — you'll be redirected to /auth/register to create your admin account.
docker compose pull && docker compose up -dBy default Livedot uses fast-geoip for IP → location resolution. For better accuracy, you can provide a MaxMind GeoLite2-City database:
- Download
GeoLite2-City.mmdbfrom MaxMind - Place it in the
./geodirectory - Restart the container
docker compose restartAll data is stored in ./data/livedot.db (SQLite). Back this up regularly.
cp ./data/livedot.db ./data/livedot.db.bak