Skip to content

Tier 2 — Team / scaled

Cost: low $$/mo. For a team instance with a real database, backups, and room to scale past one machine. The jump from Tier 1 is one thing: a managed PostgreSQL instead of a single-file SQLite. That unlocks multiple API replicas, proper backups, and a database that survives a lost container.

Recipes

RecipeTopologyWhere it runsBackend
azure-container-apps (Postgres mode)Self-hostedAzure Container Apps + Postgres Flexible Servermanaged PostgreSQL
kubernetesSelf-hostedAny cluster (AKS/EKS/GKE/k3s) + managed or in-cluster PostgresPostgreSQL (or PVC SQLite)

Both run the same apps/server container. The move to Tier 2 is set purely by DATABASE_URL pointing at PostgreSQL (ADR-015) — no code or recipe fork.

What Postgres unlocks

  • Multiple API replicas behind a load balancer (SQLite is single-writer, so it pins one replica; Postgres removes that limit). Run the scheduler on exactly one replica with ENABLE_SCHEDULER=false on the rest, or drive it externally (ADR-018).
  • Backups and point-in-time restore from your managed database.
  • A database that outlives any single container — no volume to lose.

What you'll pay for

  • Compute — ACA consumption, or your Kubernetes cluster.
  • A managed PostgreSQL — e.g. an Azure Postgres Flexible Server (Burstable tier is inexpensive), RDS, or Cloud SQL.
  • Secrets — Key Vault, a Kubernetes Secret, or an external-secrets operator.

Next step up

Full HA — separated controller/worker processes, private networking, an HA database topology, SSO/RBAC hardening, and observability — is Tier 3. Tier 2 already gives you the multi-replica database foundation those build on.

Apache-2.0 licensed. Read-only by design.