Skip to content

Get started

Run your own deployment

Pull the image and run SlashObserve against your own Postgres, identity provider and datasources.

  1. 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, so max_connections must allow that for each server process. The project tests against Postgres 18.6; other versions are unverified.

  2. Pull the image:

    docker pull ghcr.io/slashobserve/slashobserve:0.1.0

    Each release is tagged with its full version, such as 0.1.0, with its minor version, such as 0.1, and latest. 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, run docker build -t slashobserve-server:local . from the repository root and use that name in step 4.

  3. Write the settings to an env file, for example slashobserve.env. Docker’s --env-file takes NAME=value lines 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>
  4. 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
  5. 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.

/observeOpen source under Apache-2.0.Grafana is a trademark of Grafana Labs. SlashObserve is not affiliated with or endorsed by Grafana Labs.

Search pages and headings.