Production deployment
Production uses compose.prod.yml, .env.prod, immutable GHCR image tags, and optional files under deploy/production/. It does not build application images on production hosts and never migrates a database during container startup.
Recommended starting point
Use the Production quick start for the complete three-host sequence: bootstrap DNS, private PKI, explicit migrations, cluster qualification, edge enrollment, acceptance checks, and diagnosis.
The minimum documented layout is one control/telemetry host plus two combined DNS/edge hosts. The base file also supports colocated development-like qualification, while overlays expose split roles with restricted TLS gateways.
Before deploying, read:
- Production quick start for an end-to-end first installation.
- Topology for networks, profiles, and public ports.
- Certificates for the edge-control and DNS API PKI.
- Configuration for every
.env.prodkey. - Upgrade for schema, worker, DNS, and edge sequencing.
The Production quick start is the authoritative first-install procedure. The remaining deployment pages explain individual decisions and are linked from that runbook where they become relevant.
Deployment rules
- Pin
CDNF_RELEASEto an exact commit SHA or exact semantic release tag. - Keep
.env.prodmode0600and outside version control. - Run
make prod-migrateandmake prod-pdns-migrateexplicitly. - Start only the profiles assigned to the host.
- Keep the control database, Valkey, PowerDNS, PowerDNS PostgreSQL, ClickHouse, and internal metrics off public networks.
- Preserve the control PostgreSQL volume and all named volumes during upgrades.
See Production quick start for the verified command sequence and Topology for the role and overlay model.