Docker Deployment
This guide covers deploying Confo using Docker Compose.
Quick Start
Create a docker-compose.yml file:
services:
mariadb:
image: mariadb:latest
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: changeme-root
MARIADB_DATABASE: confo
MARIADB_USER: confo
MARIADB_PASSWORD: changeme-db
volumes:
- mariadb_data:/var/lib/mysql
confo:
image: ghcr.io/vasimi/confo:latest
restart: unless-stopped
ports:
- "80:80"
environment:
NODE_ENV: production
JWT_SECRET: changeme-jwt-secret
DATABASE_TYPE: mariadb
DATABASE_HOST: mariadb
DATABASE_PORT: 3306
DATABASE_USERNAME: confo
DATABASE_PASSWORD: changeme-db
DATABASE_NAME: confo
CORS_ORIGIN: https://your-domain.com
SUPERADMIN_USERNAME: admin
SUPERADMIN_PASSWORD: changeme-admin
# YouTube integration (optional)
# YOUTUBE_CLIENT_ID: your-google-client-id
# YOUTUBE_CLIENT_SECRET: your-google-client-secret
depends_on:
- mariadb
volumes:
mariadb_data:
Then start the services:
docker compose up -d
The application will be available at http://localhost (port 80).
Replace all changeme-* values with strong, unique passwords before deploying.
Initial Setup
On first startup, Confo automatically seeds the database and creates a superadmin account using the SUPERADMIN_USERNAME and SUPERADMIN_PASSWORD environment variables. Use these credentials to log in and start configuring events.
Adding the OBS Bridge
If you want to control OBS Studio instances remotely, add the OBS Bridge service. You need one OBS Bridge container per OBS instance (per room):
services:
# ... mariadb and confo services from above ...
obs-bridge:
image: ghcr.io/vasimi/confo/obs-bridge:latest
restart: unless-stopped
environment:
OBS_HOST: 192.168.1.100 # IP of the machine running OBS
OBS_PORT: 4455
OBS_PASSWORD: your-obs-password
BACKEND_URL: http://confo:3000
ROOM_ID: "1" # Room ID from Confo
depends_on:
- confo
Make sure OBS Studio has the WebSocket server enabled (Tools > WebSocket Server Settings) and that the OBS Bridge can reach both the OBS machine and the Confo backend.
Reverse Proxy (HTTPS)
The Confo container exposes port 80 with HTTP. For production, place it behind a reverse proxy like Caddy, Traefik, or Nginx with TLS termination:
Client → Reverse Proxy (HTTPS :443) → Confo (:80)
Update CORS_ORIGIN to match your public domain.
Updating
To update to the latest version:
docker compose pull
docker compose up -d
All Environment Variables
See the Environment Variables reference for a complete list of configuration options.