Configuration
Every setting is read from .env at runtime, so changing a value and
restarting the affected containers applies it — no rebuild is needed. This page
covers the settings you must set by hand after running ./docker/gen-secrets.sh
(which handles the required secrets).
For the full list of variables, see the Environment variables reference. For on/off feature switches, see Feature toggles.
Application
Section titled “Application”| Variable | What it does |
|---|---|
APP_URL |
The public URL of your instance (e.g. https://chat.example.com). |
APP_NAME |
The app name shown in the UI and emails (default The Desk). |
APP_PORT |
Host port the web app is published on (default 80). |
APP_NAME and the browser-facing Reverb settings are served to the frontend at
runtime, which is why one published image works for any host.
Mail (SMTP)
Section titled “Mail (SMTP)”The Desk sends workspace invitations (and email verification, if you
enable it), so SMTP must work.
Set the MAIL_* variables to your provider’s credentials:
MAIL_MAILER=smtpMAIL_HOST=smtp.example.comMAIL_PORT=587MAIL_USERNAME=postmaster@example.comMAIL_PASSWORD=your-smtp-passwordMAIL_FROM_ADDRESS="chat@example.com"MAIL_FROM_NAME="${APP_NAME}"Reverb (WebSockets) — mind the browser vs. server split
Section titled “Reverb (WebSockets) — mind the browser vs. server split”Reverb powers real-time updates. The setting that trips people up is that the container and the browser reach Reverb differently:
- The container speaks plain
httpon8080—REVERB_PORT/REVERB_SCHEME. - The browser reaches Reverb through your TLS proxy on
wss/443.
So set the browser-facing (*_PUBLIC) values accordingly:
REVERB_PORT_PUBLIC=443REVERB_SCHEME_PUBLIC=https# The browser-facing host defaults to your APP_URL host. Override only if you# serve Reverb from a dedicated WebSocket subdomain:# REVERB_HOST_PUBLIC=ws.example.comThese are read at runtime, so a restart applies changes — no rebuild.
Search (Meilisearch)
Section titled “Search (Meilisearch)”MEILISEARCH_KEY is a required secret (generated for you). MEILISEARCH_VERSION
pins both the image tag and the version-scoped data volume — see
Upgrading for why that matters.
Applying changes
Section titled “Applying changes”After editing .env, restart the stack to pick up the new values:
docker compose -f docker-compose.prod.yml up -d