← back

Infra

One small box hosts the entire fleet — containers and static sites side by side.

A single Vultr box runs everything. Caddy is the only thing on ports 80/443, terminating TLS automatically and routing each domain to either a container or a static site.

One Postgres container holds a database per app. DNS is Cloudflare (grey-cloud, DNS-only) so Caddy can issue certificates. Everything sits on one Docker network.

How a deploy works

rsync the repo to the box → docker build on the box (no registry, no CI) → ensure the database and run drizzle-kit migrate → start the container → write the Caddy route → create the DNS record → health-check.

Co-location is the whole point: 10+ apps on one box keeps the fleet under $100/mo until a product earns its own VM.