You configure the few things that cannot live in the app with environment variables in the .env file next to docker-compose.yml. After a change, recreate the app container:
docker compose up -d --force-recreate auto-tournament
Everything else, such as sign-in providers, admins, match rules, the webhook URL and the hostname format, is in the app under Settings. Some variables below are only imported once into Settings on the first start (marked "imported once"): after that the value saved in Settings wins, and the variable can be removed.
Secret for login sessions. Without it, everyone is logged out on each restart. Also the key for secrets saved in Settings when SECRETS_KEY is not set. Create one with openssl rand -base64 32.
SERVER_TOKEN
Shared secret for server-side tools that are not enrolled servers, such as CS2 Server Manager's update hold and older demo uploads. They send it as X-Auto-Tournament-Token. Ready Up servers use their own token from enrollment. Create one with openssl rand -base64 24 | tr -d '=+/'.
FRONTEND_BASE_URL
The address people open in the browser, for example https://tournament.example.com. Used for login redirects, cookies (https:// makes them HTTPS-only), callback URLs and the fleet link address.
The port on your machine. Only used by docker-compose.yml.
DB_USER
postgres
Database user.
DB_PASSWORD
postgres
Database password.
DB_NAME
auto_tournament
Database name. 2.x used matchzy_tournament; 3.0 renames it on the first start (see Upgrading to 3.0).
DATABASE_URL
Built from DB_*
Full PostgreSQL address. docker-compose.yml sets it for you.
DB_HOST, DB_PORT
postgres in Docker, port 5432
Only used when DATABASE_URL is not set.
DATA_DIR
/app/data
Where demos, logs, map images, installed modules and round backups are kept. Mount a volume here.
PORT
3000
Internal API port. docker-compose.yml sets it. Do not change it.
NODE_ENV
production in Docker
docker-compose.yml sets it.
Set DB_USER, DB_PASSWORD and DB_NAME before the first start. The database is created with these values, and changing them later does not change the existing database.
Key for the secrets saved in Settings (sign-in client secrets, the Steam key), stored encrypted with AES-256-GCM. Changing it, or SESSION_SECRET when this is unset, makes the saved secrets unreadable: enter them again in Settings.
Accept the license terms without the browser, for scripted installs: noncommercial or commercial. Setting it means you have read and accept them, including later versions.
LICENSE_KEY
Your license key (starts with ATL1.). Saved on start when it differs from the saved one, so it wins over a key pasted in Settings → License. A missing or invalid key never blocks anything. See License key.
Starting value for the webhook URL your servers use to reach the site, if they must use another address than the browser. After the first start, change it in Settings → Counter-Strike 2. Also used as the server address in /api-docs.
ALLOW_UNAUTHENTICATED_EVENTS
false
Accept server events without a token. Only for servers set up by a very old version. While it is on, anyone who can reach the API can send fake results. Leave it off.
FLEET_BACKUP_RETENTION_DAYS
14
Days to keep the round backups Ready Up servers send, after a match ends. 0 keeps them forever.
FLEET_AUTOSCALE_INTERVAL_MS
15000
How often automatic scaling checks the servers on csm machines. 0 turns its timer off. Turn scaling itself on or off on the Servers page.