Installation
Run the status page with Docker in a couple of minutes.
Requirements
- A host with Docker (24+), or a Coolify instance.
- A domain pointed at the host (for TLS and correct cookies).
Quick start with Docker Compose
Log in so Docker can pull the image (a GitHub token with the read:packages
scope — image access only, never source), then start it with the provided
docker-compose.prod.yml:
echo "$GHCR_TOKEN" | docker login ghcr.io -u <github-username> --password-stdin
# Provide configuration via the environment (or a .env file next to the compose):
export AUTH_SECRET="$(openssl rand -base64 48)" # 32+ random characters
export APP_URL="https://status.yourdomain.com"
docker compose -f docker-compose.prod.yml up -d
The app listens on port 3000. Open APP_URL — on a fresh instance you'll be
taken to a first-run setup page to create the admin account, then signed in.
Prefer a non-interactive setup for automated deploys? Set
ADMIN_EMAILandADMIN_PASSWORDand the admin is created on first boot instead (setup is skipped). See Configuration.
On most hosts (and Coolify) you'll deploy via the image rather than the CLI — see Deploying on Coolify.
Data persistence
The SQLite database lives on the named volume statuspage-data, mounted at
/app/data inside the container. Keep that volume and your data survives
restarts, rebuilds and upgrades. Back it up by copying /app/data.
First boot
On first start the container:
- Applies database migrations.
- Seeds the organization and a default status page (and the admin user too, if
ADMIN_EMAIL/ADMIN_PASSWORDare set). - Starts the monitor worker and the web server.
If no admin exists yet, the first web request routes to /setup to create one.
Next: Configuration.