Docker and Compose
Two images make up a deployment:
| Image | Contents | Port |
|---|---|---|
mjn81/cove-server |
The Go server | 4000 and the UDP ports |
mjn81/cove-webclient |
nginx serving the web client | 80 (mapped to 3000) |
Production compose file
Section titled “Production compose file”services: backend: image: mjn81/cove-server:latest ports: - "4000:4000" - "3478:3478/udp" - "50000-50100:50000-50100/udp" - "9090:9090/udp" volumes: - ./data:/app/data - ./config.toml:/app/config.toml restart: unless-stopped
frontend: image: mjn81/cove-webclient:latest ports: - "3000:80" environment: - VITE_API_URL=https://chat.example.com depends_on: - backend restart: unless-stopped./dataholds the database and uploads. Back it up../config.tomlis your configuration. Start fromconfig.toml.example.VITE_API_URLis substituted into the web client at container start, so one image works for any domain.
Pin versions
Section titled “Pin versions”latest is convenient for a trial. In production pin a release tag and upgrade deliberately. See Upgrading.
Environment variables
Section titled “Environment variables”You can keep secrets out of config.toml:
environment: - COVE_MASTER_PASSWORD=${COVE_MASTER_PASSWORD}See Environment variables for the full list.
Building the images yourself
Section titled “Building the images yourself”From a clone of the repository, the root docker-compose.yml builds both images from source:
docker compose up -d --build