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
For a new installation, use the starter Fleet quick start. It copies a JSON topology, validates it, and generates complete per-node bundles without editing deployment scripts.
Advanced operators who intentionally do not want Fleet can use the manual Docker Compose deployment. It documents the same three-host outcome with hand-managed environments, secrets, PKI, migrations, enrollment, qualification, upgrades, and recovery, and invokes no repository scripts or Make targets.
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 Compose profiles and generated bundles expose split roles with restricted TLS gateways.
Before deploying, read:
- Production reference architectures to choose failure domains and role placement.
- Production best practices for the readiness and change contract.
- Production quick start for an end-to-end first installation.
- Manual Docker Compose deployment when deliberately operating without Fleet, scripts, or Make.
- 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.
For separated roles across several failure domains, continue with the multi-region Fleet quick start. The Fleet operator guide, configuration reference, and architecture reference cover lifecycle operations, the JSON schema, and role boundaries.
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, internal metrics, and Grafana port 3000 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 profile and generated-bundle model.