Community server required
| Variable | Required | Description | Example |
|---|---|---|---|
SERVER_TOKEN | Cloud only | Server token used for registration and heartbeat. Leave empty when OFFGRID_MODE=true; it is ignored there. | abc123... |
COMMUNITY_PUBLIC_URL | Yes | Public base URL for this community API (registered with Core as api_url). Required in .env — Docker Compose does not substitute a default. Required in Offgrid too: it drives voice and attachment URLs. | https://community.example.com |
CORE_SERVER_URL | Cloud only | Core URL used by the community-server for token validation and registration. Forced empty when OFFGRID_MODE=true, which is what stops every call to tusile.com. | https://api.tusile.com |
LIVEKIT_API_KEY | Yes | LiveKit key used to mint room tokens. Generated by the setup script; run docker run --rm livekit/livekit-server generate-keys to make one by hand. There is no default, and the server will not start without it. | APIabcd1234wxyz |
LIVEKIT_API_SECRET | Yes | LiveKit secret paired with the API key. Anyone holding it can mint a token for any voice room on your server, so treat it like a password and never reuse an example value. | a 32+ character random string |
Community server optional
| Variable | Default | Purpose |
|---|---|---|
OFFGRID_MODE | false | Run standalone: the server mints its own signing key, issues its own accounts, and never contacts Core. Requires an empty SERVER_TOKEN / CORE_SERVER_URL (both are forced empty anyway) and cannot be combined with multi-tenant mode. See the install guide. |
DATA_DIR | /app/data | Holds the install ID and, in Offgrid, community_key — the signing key the server’s identity is derived from. Must stay on a persisted volume and be included in backups; losing it in Offgrid invalidates every session and changes the server ID. |
CORS_ALLOWED_HOSTS | — | Extra browser origins allowed to call this API, comma-separated. The host of COMMUNITY_PUBLIC_URL is added automatically. |
STORAGE_BACKEND | local | File storage backend: `local` or `s3`. |
STORAGE_LOCAL_PATH | /app/uploads | Upload location for local storage. |
UPLOAD_MAX_SIZE | 52428800 | Max upload bytes. |
UPLOADS_COMPRESS_ENABLED | true | Toggle ffmpeg image/video re-encoding on upload. Poster (thumbnail) generation is unaffected. Set false on small instances (e.g. t3.micro) where libx264 pegs CPU. |
UPLOADS_COMPRESS_CONCURRENCY | 1 | Max parallel image/video compress jobs. |
S3_BUCKET, S3_REGION, S3_ACCESS_KEY, S3_SECRET_KEY | - | Required together when `STORAGE_BACKEND=s3`. |
S3_ENDPOINT, S3_PUBLIC_URL | - | Optional custom S3 endpoint/public URL. |
LIVEKIT_URL | - | Optional explicit LiveKit WebSocket URL override. |
LIVEKIT_PORT | 7880 | Used when LIVEKIT_URL is not set; combines with COMMUNITY_PUBLIC_URL. |
LIVEKIT_CONFIG | livekit.prod.yaml | Path to LiveKit config file. |
TURN_DOMAIN | - | Optional override for the LiveKit TURN/TLS (5349) cert domain synced by the livekit-cert-sync container. Defaults to the host of COMMUNITY_PUBLIC_URL. |
For local storage, include the community-uploads Docker volume (or bind-mounted directory) in your backup plan. For S3, back up the bucket using your provider’s tools. See Backup & restore.
This page is the operator-facing summary for quick setup and audits.