Audience: Operators. You already know what an OAuth Authorization Server is; you want uptime, a clean security posture, working observability, predictable rotation, and a backup story. These recipes are the shortest path from "container image" to "production".
- Recipes, not concepts. Each page has a verifiable [Verify] step and a [What can go wrong] table. Concept context lives in
docs/concepts/. - Verified references. Every env var, YAML key, and CLI flag links to the generated reference under
docs/reference/. If a doc and the source disagree, the source wins — file a bug. - Reproducible artifacts. Compose files live at
deploy/; the Helm chart lives atcharts/authplane/. Recipes point at those files, not inline copies.
- Configuration — operator prose for the knobs that matter in production. Pick storage, signing-key store, and data-encryption driver here, before you copy a recipe.
- Pick a deploy target:
- Docker Compose — single-host, three flavors (SQLite, Postgres+LGTM, Postgres+Vault).
- systemd — single Linux host, single binary, Caddy/nginx in front.
- Kubernetes — overview + decision tree (Helm vs raw vs kind).
- Helm — recommended production path.
- Raw manifests — for GitOps without Helm.
- kind — local end-to-end on your laptop.
- HashiCorp Vault Transit — delegate signing keys (and optionally data-at-rest encryption) to Vault.
- Observability — Prometheus + OpenTelemetry — scrape config, OTLP, suggested alerts.
- Backup & purge —
authserver purgeschedule + DB/keys backup. Day-2 not-optional. - Hardened deployment — production-posture knobs (
oauth.require_scope,session.fail_closed, …): what each defaults to, the trade-off, and the env var to flip.
- Issuer URL (
server.issuer,env-vars.md#AUTHPLANE_SERVER_ISSUER) must equal the public URL clients reach. No trailing slash. Validation flips when this is not localhost — see configuration.md. - Admin port (
:9001) hosts the Admin API, the Admin UI at/admin/ui/, and/metrics. Never expose it on the public internet. Keep it on loopback, an internal subnet, or behind a separate ingress with an IP allowlist. authserver purgeis not automatic. Schedule it (systemd timer, CronJob, sidecar). See backup-and-purge.md. Skip this and your DB grows unbounded.- Health is
GET /healthon the public port; metrics areGET /metricson the admin port. Both are documented inhttp-api.md.