Skip to content

Install & deploy

How to run Deployment Dashboard for a real team. For a zero-config local trial, see the Quickstart.

Contents

docker-compose.md

kubernetes.md

azure-terraform.md


Concepts in one minute

  • Push-first ingestion


    Your CI/CD pipeline POSTs a deployment event to POST /api/deployments โ€” one extra step. Integrate your CI/CD.

  • Pull mode is optional


    The Fetcher can poll a CI/CD API (GitHub Actions today) and post through the same endpoint โ€” see the -pull profiles.

  • One published port


    The gateway (:8080) is the only exposed surface. API, frontend, and PostgreSQL stay internal.

  • Stateless backend


    Scale API instances behind the gateway; SSE fan-out works across them via PostgreSQL LISTEN/NOTIFY.

Deployment shapes

Two independent axes pick your profile:

  • Database


    full bundles PostgreSQL in a Docker volume; standalone connects to an external managed PostgreSQL (e.g. Azure Database for PostgreSQL) and scales the app tier behind the gateway.

  • Ingestion


    The base profile is push-only; the -pull variant adds the Fetcher for pull-mode ingestion.

Choose a deployment method

Method When to use
Docker Compose Self-hosted โ€” any Linux/Windows host with Docker installed. Full control of infra.
Kubernetes (Helm) Existing cluster you own โ€” versioned Helm chart, published to GHCR; Artifact Hub listing pending registration.
Azure (Terraform) Managed cloud โ€” zero-ops Azure Container Apps stack, provisioned end-to-end by Terraform.

Shared prerequisites

All methods pull images (and, for Kubernetes, the Helm chart) from GHCR. No registry credentials are needed for public images.

Production checklist

  • Set a strong API_KEY. Writes are rejected 401 without it.
  • Set CONTROL_API_KEY (distinct from API_KEY) only if you need the reset surface; leave it unset to hide POST /api/control/reset.
  • Front the stack with TLS and keep it on your internal network โ€” reads are unauthenticated by design (Architecture).
  • Set HISTORY_RETENTION_DAYS (minimum 90; 365 recommended).
  • Scale the API horizontally behind the gateway as needed โ€” it's stateless.

See Configuration for every environment variable.

Pinning a release version

By default the stack pulls latest (tracks main). For a reproducible deploy, pin to a release tag โ€” see the method-specific guides for how:

  • Docker Compose: set DASHBOARD_VERSION in .env โ€” see Pinning a release version.
  • Kubernetes (Helm): pass --version <ver> to helm install/helm upgrade โ€” see Install.
  • Azure Terraform: set dashboard_version in terraform.tfvars โ€” see Deploy.

Hosting notes

Azure Container Apps

The gateway deploys to ACA unchanged โ€” the same image used in Docker Compose. Each proxy location sets the Host header to the upstream FQDN so ACA's internal Envoy routes correctly; no ACA-specific config is needed.

Demo gateway image

The production profiles above use deployment-dashboard-gateway. The demo profile uses a separate deployment-dashboard-gateway-demo image that layers /demo/* routing on top of the production image. Production deployments carry no demo routes or demo-driver configuration.