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_EMAIL and ADMIN_PASSWORD and 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:

  1. Applies database migrations.
  2. Seeds the organization and a default status page (and the admin user too, if ADMIN_EMAIL/ADMIN_PASSWORD are set).
  3. 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.