Environment variables
The settings of a deployment. Docker Compose takes them from .env, and Coolify sets the required ones for you.
Core
| Variable | Required | Default | Description |
|---|---|---|---|
POSTGRES_PASSWORD |
Yes | — | Database password. Use hex (openssl rand -hex 24): it goes into a connection URL |
BETTER_AUTH_SECRET |
Yes | — | Auth signing secret, min 32 chars (openssl rand -base64 32) |
BASE_URL |
In production | http://localhost:3000 |
Public URL users open in the browser. Auth rejects sign-ins from any other origin |
EXCALISELF_VERSION |
No | latest |
Image tag to run: latest, a release like 1.2.3 or 1.2, or main |
EXCALISELF_PORT |
No | 3000 |
Host port for the app. 127.0.0.1:3000 keeps it local to a reverse proxy |
POSTGRES_USER |
No | excaliself |
Database user |
POSTGRES_DB |
No | excaliself |
Database name |
docker-compose.yaml builds DATABASE_URL for the app from the Postgres values.
To use your own Postgres, change DATABASE_URL in the compose file.
GET /api/health returns 200 when the app is up and can reach Postgres.
Previews
For throwaway pull request instances. See PR previews.
| Variable | Description |
|---|---|
PREVIEW_MODE |
true runs an in-memory PGlite instead of Postgres, seeded with an admin and example drawings. It ignores DATABASE_URL and BASE_URL and makes BETTER_AUTH_SECRET optional. Data is lost on restart |
PREVIEW_HOSTS |
Comma-separated hosts a preview answers on, e.g. *.draw.example.com. Auth refuses other hosts; localhost always works |