Deployment

Deployment

Choose plain docker compose, Docker Swarm, or Kubernetes — then follow that path's complete page for PgDog, probes, graceful shutdown, and TLS.

OKE apps are process-stateless when shared drivers back Store, Clock, Journal, and Gate. Pick an orchestrator (or none) first; each path page below is self-contained after you choose.

The one rule

Decide the deploy shape here, then open one path page and follow it end to end. Do not mix recipes across pages — Docker proxy compose ≠ Kubernetes Ingress.

Which path?

PathBest forTrade-off
Docker (compose)Simplest — single or few instancesYou run scale / restart / TLS yourself (or opt in)
Docker SwarmBuilt-in orchestration, lower learning curveSmaller ecosystem than Kubernetes; mesh ≠ certs
KubernetesFull orchestration, largest ecosystemHighest operational surface (Ingress, probes, RBAC…)

Consequence: start with plain compose until you need Swarm's service mesh / rolling updates or Kubernetes' cluster ecosystem. Same multi-instance contract on every path — shared Postgres/Redis/S3, not sticky pod identity.

Capabilities (every path)

These already ship. Each path page explains them in full in that page's words:

CapabilityWhat it guaranteesDeep dive
PgDog poolingdocker/prod SQL goes through transaction pooler (DATABASE_URL:6432) when pinnedPath pages · Store
Graceful SIGTERMinstallGracefulShutdown releases Clock + Journal leases, then drainsPath pages
Readiness vs livenessGET /_/ready (kernel) vs app GET /healthPath pages
Horizontal proofTwo-process integration test against live Postgres + RedisChangelog / CI (OKE_TEST_POSTGRES_URL + Redis)
Reverse proxy (compose/Swarm)Opt-in Caddy or Traefik (images.proxy)Reverse proxy
Ingress (Kubernetes)Cluster-native Ingress / Gateway APIKubernetes

Honesty notes (Signal consume / Channel suppression still process-local) live on each path page — not papered over here.

Pick a path

Learn more

Next

On this page