Deployment Guide¶
This page covers production deployment considerations. For the quickstart, see Deployment Quickstart.
Deployment options¶
| Mode | Requirements | When to use |
|---|---|---|
| Local CLI | Python 3.11+, no Docker | Development, CI pipelines |
| Docker Compose | Docker 24+, 2 GB RAM | Single-machine deployments, staging |
| Air-gap | Docker Compose + no internet | Regulated environments, on-prem |
Environment variables¶
All runtime configuration is in infra/compose/.env. See Configuration for the full reference.
Minimum required:
Production checklist¶
-
POSTGRES_PASSWORDis a strong random value, not the default. -
.envis not committed to version control. -
EGRESS_ALLOWED_DESTINATIONSis set to only the destinations you need. - Signing key is backed up securely (or use a managed KMS).
- Prometheus and Grafana ports (
9090,3000) are not exposed to the public internet. - Docker Compose is pinned to specific image tags (replace
:latestwith version tags for stability). -
docker compose healthshows all services healthy before routing traffic.
Health checking¶
All services expose a /health endpoint for load balancer or monitoring integration.
Air-gap deployment¶
See Air-gap Deployment for the full guide, including image pre-pull and tarball transfer procedure.
Observability¶
Prometheus scrapes metrics from all services; Grafana dashboards are pre-configured. Access:
- Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3000(orGRAFANA_HOST_PORTfrom.env)
Metrics are counters and histograms only — no payload sampling, no PII in metric labels.