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
| Recipe | Topology | Where it runs | Backend |
|---|---|---|---|
azure-container-apps (Postgres mode) | Self-hosted | Azure Container Apps + Postgres Flexible Server | managed PostgreSQL |
kubernetes | Self-hosted | Any cluster (AKS/EKS/GKE/k3s) + managed or in-cluster Postgres | PostgreSQL (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.
Inputs required before an Azure Container Apps deployment
Decide these before starting the ACA recipe: Azure subscription, region, resource group, existing ACR, Key Vault, public HTTPS URL, allowed GitHub login(s), authentication providers, and any names controlled by your standard (app, environment, logs, identity, database, and certificate). The vault must already contain database-url, github-app-id, github-app-private-key, github-webhook-secret, github-client-id, github-client-secret, session-secret, and secret-encryption-key.
The ACA recipe contains the complete input table, constraints, examples, and script parameter names. Settle those values before creating resources so no required input is discovered halfway through deployment.
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=falseon 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.