Skip to content

Tier 1 — Low-cost / managed

Cost: ~a few $/mo. For a small, always-on instance you don't want to babysit. You've outgrown "it runs on my laptop" but don't yet need a full database or multiple replicas — you want a managed host that stays up, patches itself, and costs about the price of a coffee per month.

Recipe

RecipeTopologyWhere it runsBackend
azure-container-apps (SQLite mode)Self-hostedAzure Container Apps (consumption)SQLite on Azure Files

Azure Container Apps runs the same apps/server container that docker compose up runs locally — no Cloudflare required — on managed serverless compute. In SQLite mode it stores the database on an Azure Files share and pins a single replica.

SQLite on Azure Files is for evaluation / light real use. File locking over SMB is unreliable under restarts. Any instance meant to stay busy should move to Postgres mode — that's Tier 2. The recipe supports both from the same template; the only change is postgres=true plus a managed database.

What you'll pay for

  • Azure Container Apps — consumption pricing; near-free at idle, a few $/mo under light load.
  • A Standard_LRS storage account for the Azure Files share (SQLite mode).
  • Key Vault for the six secrets (managed-identity references, no secrets in env).

Alternatives at this tier

Any small managed container host works the same way — a small VM, Fly, Railway, or a Cloudflare paid plan if your estate outgrew the free Worker limits. They all run the identical container; ACA is the recipe with a maintained bicep + deploy.ps1/deploy.sh.

Next step up

When one instance isn't enough — you need a real database, backups, or more than one replica — switch to a managed PostgreSQL and you're at Tier 2, no recipe change beyond DATABASE_URL.

Apache-2.0 licensed. Read-only by design.