Cost of running a single web app on each provider
Same Rails/Django/Node web app: 2 web instances + Postgres + Redis + 500 GB egress. Real 2026 list prices across 7 providers.
Most "cloud hosting cost" articles compare a single bare VM, which is misleading. A real production web app is a small system: app instances, a database, a cache, a CDN, monitoring, backups. Let's price one such system across all seven providers in the cloudprice catalogue.
The workload spec
- Stateless web app (Rails / Django / Node / etc) — 2 × small instances (2 vCPU, 4 GB RAM) behind a load balancer
- Postgres 16 — small managed or self-hosted (2 vCPU, 4 GB RAM, 100 GB SSD)
- Redis cache — 1 GB
- 500 GB / month outbound traffic
- 50 GB object storage (uploaded user assets)
- Daily backups
- Monitoring / logs (basic)
This profile fits ~95% of small SaaS, internal tools, and side projects.
AWS — managed everywhere
- 2 × t4g.small (2 vCPU ARM, 2 GB): $0.0168 × 2 × 730 = $24.53
- 1 × t4g.medium for headroom: $0.0336 × 730 = $24.53 (skip, use the two smalls)
- ALB: ~$22/month
- RDS db.t4g.small Postgres: ~$50/month
- RDS storage 100 GB gp3: $11
- RDS backups (free up to storage size)
- ElastiCache cache.t4g.micro Redis: $13/month
- 500 GB egress @ $0.09 (after 100 GB free) = $36
- S3 storage 50 GB: $1.15
- CloudWatch + logs: ~$20/month
- NAT gateway: ~$35/month (one AZ)
AWS total: ~$213/month.
With 3-year Compute Savings Plan + RIs: ~$160/month.
GCP — managed equivalent
- 2 × e2-small (2 vCPU shared, 2 GB): $0.024/hour × 2 = $35/month
- Cloud Load Balancing: ~$25/month
- Cloud SQL db-custom-2-4096 Postgres: ~$80/month
- Memorystore Basic 1 GB Redis: $40/month
- 500 GB egress @ $0.12 (after 200 GB free) = $36
- Cloud Storage 50 GB: $1.30
- Cloud Logging: ~$5/month (free up to 50 GB)
GCP total: ~$220/month.
Azure — managed equivalent
- 2 × Standard_B2s (2 vCPU, 4 GB): ~$60/month
- Standard Load Balancer: ~$18/month
- Azure Database for PostgreSQL Flexible Server Standard_B2s: ~$120/month with HA
- Azure Cache for Redis Basic C1: $40/month
- 500 GB egress @ $0.087 = $35
- Blob Storage 50 GB Hot: $1/month
- Log Analytics: ~$5/month
Azure total: ~$280/month. Most expensive of the hyperscalers.
Hetzner — self-host everything
- 2 × CPX21 (3 vCPU AMD, 4 GB, 80 GB NVMe): 2 × €5.83 = €11.66 (~$12.50)
- Hetzner Load Balancer (LB11): €5.39 (~$5.80)
- 1 × CPX21 for Postgres + Redis (could combine into one box at this scale): €5.83 (~$6.30)
- Backups (20% of VM cost): ~€3.50
- Object Storage (1 TB included with the bucket fee): €5.39
- Egress: free under 20 TB
Hetzner total: ~$36/month (~€33).
Operationally: you run Postgres + Redis yourself. For a workload this size, that's 2-4 hours/month.
DigitalOcean — managed where it counts
- 2 × s-2vcpu-4gb-amd: 2 × $24 = $48/month
- Load Balancer: $12/month
- Managed Postgres Basic (1 vCPU, 1 GB shared CPU — needs upgrade to dedicated 2 vCPU): $60/month
- Managed Redis 1 GB: $15/month
- 500 GB egress: $0 (well under 5 TB included with droplets)
- Spaces (object storage) 50 GB: $5/month base
- Snapshot backups: $1.20
DO total: ~$141/month.
Vultr — managed-but-cheap
- 2 × vc2-2c-4gb (2 vCPU, 4 GB): 2 × $24 = $48/month
- Vultr Load Balancer: $10/month
- Managed Postgres (Vultr Cloud Compute + manual): $24 for a 2nd VM
- Self-hosted Redis on the same box
- 500 GB egress: $0 (included)
- Object Storage 50 GB: $1.50/month
- Backups: $4.80 (20% of VM cost)
Vultr total: ~$90/month.
Linode — managed Postgres, self-hosted Redis
- 2 × Linode 4 GB (1 vCPU, 4 GB): 2 × $24 = $48/month — note Linode 4 GB only has 1 vCPU, need to step up to dedicated
- 2 × Dedicated CPU 4 GB: 2 × $36 = $72/month
- NodeBalancer: $10/month
- Managed Postgres Cluster (smallest): $60/month
- Self-hosted Redis on one of the dedicated boxes
- 500 GB egress: free (well within 4 TB allocation per dedicated VM)
- Object Storage 50 GB: $1/month
- Backups: $5/month for the worker VMs
Linode total: ~$148/month.
Summary table
| Provider | List $/month | 1-year discount | Setup style |
|---|---|---|---|
| AWS | $213 | $170 | Managed everything |
| GCP | $220 | $170 | Managed everything |
| Azure | $280 | $220 | Managed everything |
| Hetzner | $36 | $36 | Fully self-hosted |
| DigitalOcean | $141 | $141 | Managed PG + Redis |
| Vultr | $90 | $90 | VMs + manual PG |
| Linode | $148 | $148 | Managed PG + DIY Redis |
The "developer experience" weighting
This pure-cost view ignores the time tax. AWS's managed services (RDS auto-backups, ALB health checks, CloudWatch dashboards) save engineer-hours. DigitalOcean's developer experience is famously clean and saves time during setup.
If you value engineering time at $100/hour and the time delta between Hetzner and DigitalOcean is 5 hours/month, the effective cost gap shrinks from ~$100/month to ~$50/month. Still in DO's favour for many teams.
For a side project or boot-strapped product where the founder is also the operator: Hetzner wins outright. For a small team with one senior infra engineer: DigitalOcean or Vultr. For a growing SaaS with a dedicated devops/SRE: any of them, but the hyperscalers are paying for compliance and ecosystem rather than raw capability.
The "what about Cloudflare" answer
For a minimal modern web app, the cheapest viable architecture in 2026 is genuinely:
- Vercel / Cloudflare Pages for static + edge functions: $0-20/month
- Neon or Supabase for Postgres: $0-25/month
- Upstash for Redis: $0-10/month
- Cloudflare R2 for assets: $0-5/month
Total: $0-60/month with zero operations. For early-stage apps, this is hard to beat.
The catch: the moment you outgrow free tiers and hit serious traffic, the per-request pricing models can spike unpredictably. The "cloud serverless lock-in tax" is real at scale.
For instance-level pricing comparison across these seven providers see the cloudprice main table. To run your own workload through a TCO calculation, the TCO calculator handles compute + storage + egress.