Running production on a tight budget without skimping on reliability
You don't need a $50k/month AWS bill to run a serious product. Here is the stack we deploy for bootstrapped teams.
When a founder tells us "we just need a server," what they actually need is: hosting, a database, backups, monitoring, a CI/CD pipeline, log aggregation, and someone to wake up if it falls over. Most of them are quoted $5k–10k a month for this. It does not need to cost that much.
Here is the stack we set up for bootstrapped clients, which scales comfortably to a few million requests a month.
The stack
| Layer | What we use | Why |
|---|---|---|
| Compute | Hetzner Cloud or DigitalOcean Droplets | 5–10x cheaper than equivalent AWS EC2 |
| Container runtime | Docker + docker-compose, or k3s for the brave | Boring, well-understood, portable |
| Reverse proxy | Caddy | Auto-HTTPS, tiny config, no surprises |
| Database | Managed Postgres (Neon, Supabase, or DO Managed DB) | Backups handled, point-in-time recovery |
| Object storage | Cloudflare R2 or Backblaze B2 | Zero egress fees vs S3 |
| CDN | Cloudflare (free tier!) | DDoS protection + caching + image resizing |
| Monitoring | Uptime Kuma + Better Stack + Grafana Cloud free tier | Alerts to Slack within seconds |
| Logs | Better Stack Logtail or Grafana Loki | Centralised, searchable, cheap |
| CI/CD | GitHub Actions + a deploy script | Pushed on merge to main |
Total monthly cost
A typical client at this stage spends:
- Compute: $20–60
- Database: $25–50
- Object storage: $5–15
- Monitoring + logs: $0–25
- CDN: $0
That is under $200/month for a setup that handles real traffic with real reliability.
What we skip (and why)
- Kubernetes unless the team needs it. k3s for hobby, plain docker-compose for prod, until you have a reason to upgrade.
- Multi-region unless you actually serve users in multiple regions with latency-sensitive workloads.
- Microservices until the monolith genuinely hurts. It almost never does at this scale.
- Heavy observability stacks like Datadog. The free tiers of Grafana, Better Stack, and Sentry do 95% of what you need.
What we do not skip
- Daily database backups with weekly restore tests. A backup you have not restored is a wish, not a backup.
- Alerts on the things that wake real users up: 5xx rates, p95 latency, database connection pool exhaustion, certificate expiry.
- Runbooks for the five most common incidents. When it is 3 a.m., you do not want to be improvising.
- A canary deploy step so a bad release does not take everyone down at once.
When to upgrade
Move to managed Kubernetes (EKS, GKE) when:
- You are running more than 20 services
- You have a real platform team (not just one ops person)
- You need autoscaling that docker-compose can't provide
Move to multi-region when:
- You have paying customers complaining about latency in a specific geography
- You need disaster recovery beyond what your database provider offers
Move to fancy observability when:
- You are spending more than 4 hours a week chasing bugs that better tools would surface
The takeaway
You can run a serious product on $200/month of infrastructure for longer than you think. Spend the savings on a designer, a marketer, or sleep.
Need help setting any of this up? We run this exact stack for a dozen clients. Get in touch and we'll have you live in a week.