Get started
Run your own deployment
Pull the image and run SlashObserve against your own Postgres, identity provider and datasources.
-
Create a Postgres database and a user that owns it. The server keeps a connection pool of at least 16 connections unless the database URL sets
pool_max_conns, somax_connectionsmust allow that for each server process. The project tests against Postgres 18.6; other versions are unverified. -
Pull the image:
docker pull ghcr.io/slashobserve/slashobserve:0.1.0Each release is tagged with its full version, such as
0.1.0, with its minor version, such as0.1, andlatest. Pin the full version. A new server applies database migrations when it starts, so the version you run should change only when you decide to upgrade (see Upgrades and backups). To run your own build instead, rundocker build -t slashobserve-server:local .from the repository root and use that name in step 4. -
Write the settings to an env file, for example
slashobserve.env. Docker’s--env-filetakesNAME=valuelines with no quoting.SLASHOBSERVE_DATABASE_URL=postgres://slashobserve:<password>@<postgres-host>:5432/slashobserve?sslmode=require SLASHOBSERVE_PUBLIC_URL=https://observe.example.com SLASHOBSERVE_OIDC_ISSUER_URL=https://idp.example.com SLASHOBSERVE_OIDC_CLIENT_ID=slashobserve SLASHOBSERVE_OIDC_CLIENT_SECRET=<client secret> SLASHOBSERVE_AUTH_ALLOWED_EMAIL_DOMAINS=example.com SLASHOBSERVE_DATASOURCES_FILE=/etc/slashobserve/datasources.yaml SLASHOBSERVE_LLM_PROVIDER=anthropic SLASHOBSERVE_LLM_API_KEY=<Anthropic API key> -
Write a datasources file, then start the container:
docker run -d --name slashobserve --restart unless-stopped \ -p 127.0.0.1:8080:8080 \ --env-file slashobserve.env \ -v "$PWD/datasources.yaml:/etc/slashobserve/datasources.yaml:ro" \ ghcr.io/slashobserve/slashobserve:0.1.0 -
Check that it is ready:
curl -fsS http://localhost:8080/readyz
The server applies database migrations when it starts, so an empty database is enough.
If it cannot connect to Postgres within 30 seconds, or any setting is invalid, it logs the problem and exits; --restart unless-stopped retries.
Every problem found in the settings is reported in one message.
The image runs as a non-root user and listens on :8080.
Files you mount, such as the datasources file or a secret file, must be readable by that user.
The image has a Docker health check that calls slashobserve-server healthcheck, which requests /readyz on the configured SLASHOBSERVE_HTTP_ADDR.