How to Deploy a Micro-SaaS for Under $50/Month (Stack Breakdown for 10K Users)
Your side project hit 1,000 users. Vercel sends you a $487 bill. AWS wants $312 for “data transfer.” Your database provider upgraded you to $99/month without asking. You are profitable on paper, but cloud bills are eating 60% of revenue.
Here is the truth: you do not need expensive managed services to run a profitable micro-SaaS. A $47/month stack can handle 10,000 active users if you pick the right tools and avoid the traps.
What Real Infrastructure Costs Look Like
Most tutorials skip the monthly cost breakdown. They show you how to deploy, not how to stay profitable. Here is what a 10K-user micro-SaaS actually costs when you optimize for efficiency:
- Compute: $7-20/month (VPS or container hosting)
- Database: $0-10/month (Postgres with connection pooling)
- Storage: $2-5/month (object storage for user uploads)
- CDN: $0-5/month (static asset delivery)
- Monitoring: $0-8/month (uptime checks, error tracking, analytics)
- Email: $0-3/month (transactional email delivery)
Total: $9-51/month depending on your traffic patterns and redundancy requirements.
The same stack on AWS, Vercel, or managed Postgres providers costs $300-800/month. The difference is not features. It is margin compression.
Core Component #1: Compute (VPS Wins for Predictable Costs)
Serverless sounds great until you hit the billing threshold. Lambda is cheap at 100 requests/month. At 100,000 requests/month, you are paying for convenience you do not need.
Hetzner CPX11 ($4.50/month): 2 vCPU, 2GB RAM, 40GB SSD, 20TB traffic. Handles 5,000-8,000 concurrent users for Node.js or Go apps. Deploy with Docker Compose, manage with Caddy as reverse proxy. EU data centers only (Germany, Finland).
DigitalOcean Basic Droplet ($6/month): 1 vCPU, 1GB RAM, 25GB SSD, 1TB traffic. Good for 3,000-5,000 users. Global data centers. Better DX than Hetzner (more tutorials, DigitalOcean App Platform for auto-deploy).
Vultr Cloud Compute ($6/month): 1 vCPU, 1GB RAM, 25GB SSD, 2TB traffic. More generous bandwidth than DigitalOcean. Snapshots cost extra. Good for traffic-heavy apps.
What to avoid: AWS EC2 without Reserved Instances (unpredictable bills), Google Cloud Run (egress fees), Vercel/Netlify for backend APIs (function execution costs scale badly).
Pick Hetzner if you want cheapest pricing and EU-only works. Pick DigitalOcean if you want better documentation and global reach. Pick Vultr if bandwidth is your bottleneck.
Core Component #2: Database (Postgres Connection Pooling Saves $$)
Managed Postgres providers charge $25-99/month for what you can run on a $10/month VPS. The trick is connection pooling via PgBouncer or Supavisor.
Supabase Free Tier ($0/month): 500MB database, 1GB file storage, 2GB bandwidth. Connection pooling included. Auto-pauses after 7 days inactivity (dealbreaker for production). Perfect for MVP testing.
Neon Free Tier ($0/month): 512MB storage, autoscaling compute, serverless Postgres. Does NOT pause. 300 compute hours/month (10 hours/day). Best free Postgres option for micro-SaaS with <5K users.
Self-hosted Postgres on VPS ($0 extra): Run Postgres in Docker on your Hetzner/DO droplet. Use PgBouncer for connection pooling (Node.js apps leak connections without it). Backups via pg_dump to Backblaze B2 ($6/TB/month). Total cost: $0 if you are already paying for VPS.
PlanetScale Scaler Plan ($29/month): If you need MySQL instead of Postgres. 10GB storage, 100GB reads, 10M row reads/month. Branching workflows for schema changes. Overkill for most micro-SaaS but worth it if you need zero-downtime migrations.
Start with Neon free tier. Migrate to self-hosted Postgres when you hit 5K users or need more control. Avoid managed Postgres until revenue justifies the cost ($5K+ MRR).
Core Component #3: Object Storage (S3 Alternatives That Don’t Punish Egress)
AWS S3 is cheap for storage ($0.023/GB/month). Egress costs $0.09/GB. At 1TB egress/month, you pay $90 for bandwidth. That is where they get you.
Cloudflare R2 ($0.015/GB storage, $0/GB egress): Zero egress fees. 10GB storage free, then $0.015/GB. Perfect for user uploads, static assets, backup storage. Integrates with Cloudflare CDN. Terraform support.
Backblaze B2 ($6/TB storage, $0.01/GB egress): Cheapest storage option. 10GB free, then $6/TB/month. Egress is $0.01/GB (10x cheaper than S3). Good for backups, file storage, archival. Bandwidth alliance with Cloudflare = free egress if you use Cloudflare CDN.
BunnyCDN Storage ($0.01/GB, $0.01/GB egress): Integrated CDN + storage. Europe/Asia zones available. 14-day free trial. Good for video hosting, large file distribution.
Use Cloudflare R2 for user-facing uploads (profile pics, documents). Use Backblaze B2 for backups and archival. Avoid S3 unless you need specific AWS integrations.
Core Component #4: CDN (Cloudflare Free Tier Is Good Enough)
Most micro-SaaS apps do not need a premium CDN. Cloudflare’s free tier handles 10K users easily.
Cloudflare Free ($0/month): Unlimited bandwidth, global CDN, DDoS protection, free SSL, DNS management, page rules for caching. Handles 99% of micro-SaaS use cases. Paid plans ($20/month+) add image optimization, Argo smart routing, and faster purge times.
BunnyCDN ($1/month + $0.01/GB): Pay-as-you-go pricing. Cheaper than Cloudflare Pro if you serve 500GB+/month. Perma-cache option (never purge unless you tell it to). Good for video, large downloads, or high-bandwidth apps.
Start with Cloudflare free. Upgrade to BunnyCDN if you consistently serve 500GB+/month and need granular cache control.
Core Component #5: Monitoring (Free Tiers Cover Most Needs)
Datadog costs $15/host/month. New Relic starts at $99/month. You do not need enterprise monitoring for 10K users.
Uptime Robot (free tier): 50 monitors, 5-minute checks, email/SMS alerts. Monitors HTTP, keyword, ping, port. Enough for MVP. Paid plan ($7/month) adds 1-minute checks and status pages.
Better Uptime ($10/month): Unlimited monitors, 30-second checks, incident management, status pages, on-call scheduling. Best value for professional monitoring. Includes phone call alerts (Uptime Robot charges extra).
Sentry (free tier): 5K errors/month, 1 project, 1 user. Tracks exceptions, performance, releases. Developer plan ($29/month) adds 50K errors, unlimited projects, and session replay. Essential for debugging production issues.
Plausible Analytics ($9/month): Privacy-friendly Google Analytics alternative. 10K pageviews/month. No cookie banner needed (GDPR compliant). Lightweight script (under 1KB). Self-hosted option available (free).
Umami (free, self-hosted): Open-source analytics. Deploy on your VPS via Docker. Same privacy benefits as Plausible without the monthly cost. Good for technical founders who want full control.
Use Uptime Robot (free) + Sentry (free tier) + Umami (self-hosted). Total cost: $0/month for 5K errors and unlimited pageviews.
Core Component #6: Email Delivery (Transactional Email That Does Not Break the Bank)
SendGrid free tier is 100 emails/day. You hit that on day one if you send welcome emails. Paid plans start at $20/month for 40K emails.
Resend ($0/month for 3K emails, then $20/month): Developer-first email API. React Email template support. Generous free tier. Domain reputation management included. Best DX in the category.
Postmark ($15/month for 10K emails): Transactional-only (no marketing emails). 45-day message retention. DMARC monitoring. Great deliverability. More expensive than Resend but better for apps where email delivery is critical (password resets, payment receipts).
Amazon SES ($0.10 per 1K emails): Cheapest per-email cost. Requires AWS account and domain verification. No built-in template engine. Good for high-volume senders (100K+ emails/month) who can handle AWS complexity.
Use Resend for most micro-SaaS apps (free tier covers launch, $20/month is reasonable at scale). Use Postmark if email deliverability is mission-critical. Avoid SES unless you are already on AWS.
The Full $47/Month Stack (Real Numbers)
Here is what a production-ready micro-SaaS deployment looks like for 10K active users:
- Hetzner CPX11 VPS: $4.50/month (app server + self-hosted Postgres)
- Neon Postgres: $0/month (free tier, 5K users max)
- Cloudflare R2: $1.50/month (100GB storage for user uploads)
- Cloudflare CDN: $0/month (free tier, unlimited bandwidth)
- Backblaze B2: $0.60/month (100GB backups at $6/TB)
- Better Uptime: $10/month (professional monitoring + status page)
- Sentry: $0/month (free tier, 5K errors/month)
- Umami Analytics: $0/month (self-hosted on VPS)
- Resend: $0/month (3K emails/month free tier)
Total: $16.60/month for a fully monitored, backed-up, production-grade stack.
If you need more capacity or redundancy, upgrade to:
- Hetzner CPX21: $9.50/month (4 vCPU, 4GB RAM, handles 15K users)
- Neon Pro: $19/month (autoscaling, 10GB storage, no compute limits)
- Resend Pro: $20/month (50K emails/month)
- Plausible Analytics: $9/month (if you prefer hosted over self-hosted)
Upgraded total: $57.50/month for 15K-20K users with premium monitoring and email delivery.
Architecture Overview (What Runs Where)
Here is how the components connect:
1. DNS: Cloudflare manages your domain (free tier). Point A/CNAME records to your VPS IP.
2. VPS (Hetzner CPX11): Docker Compose runs your app container + Postgres container + Umami analytics container. Caddy handles reverse proxy, auto-SSL via Let’s Encrypt, and HTTP/2.
3. Database: Postgres runs in Docker with PgBouncer for connection pooling. Daily backups via pg_dump to Backblaze B2. Alternatively, use Neon free tier and skip self-hosting.
4. Object Storage: User uploads go to Cloudflare R2 via S3-compatible API. Serve via Cloudflare CDN with signed URLs for private files.
5. Email: Resend API sends transactional emails (password resets, welcome emails, payment receipts). Configure DKIM/SPF/DMARC via Resend dashboard.
6. Monitoring: Better Uptime pings your app every 30 seconds. Sentry captures exceptions and performance data. Umami tracks pageviews and user flows.
7. Deployment: SSH into VPS, git pull, docker compose up -d. Or use GitHub Actions to auto-deploy on push to main branch.
Total setup time: 2-4 hours if you follow existing guides. Maintenance: 30 minutes/month (update Docker images, review logs, rotate backups).
What to Avoid (Expensive Traps That Burn Runway)
1. Serverless for predictable workloads: Lambda/Vercel Functions are great for spiky traffic. Terrible for steady 10K daily users. You pay per invocation instead of fixed monthly cost.
2. Managed Postgres before $5K MRR: Render, Railway, and Supabase Pro charge $25-99/month for what runs on a $10 VPS. Use free tiers (Neon, Supabase) or self-host until revenue justifies the cost.
3. AWS without cost alerts: S3 egress, RDS snapshots, and ELB idle time add up fast. Set billing alarms at $50/month thresholds or avoid AWS entirely.
4. Premium CDNs for static assets: Cloudflare free tier handles 10K users. Fastly ($50/month) and Akamai ($500+/month) are overkill until you serve 1M+ requests/day.
5. Paid analytics before product-market fit: Google Analytics is free. Plausible is $9/month. Mixpanel costs $25-89/month. Use free tools until you have revenue, then upgrade for better UX/privacy.
Scaling Beyond 10K Users (When to Upgrade)
This stack handles 10K active users comfortably. When you hit limits, upgrade in this order:
1. VPS → larger instance: Hetzner CPX21 ($9.50/month) or CPX31 ($15/month). Vertical scaling is cheaper than horizontal until you hit 4-8 vCPU limits.
2. Database → dedicated server: Move Postgres to its own VPS ($4.50-9.50/month). Separate app and DB for better resource isolation. Add read replicas if you hit query bottlenecks.
3. CDN → paid tier: Cloudflare Pro ($20/month) or BunnyCDN ($1/month + usage). Adds image optimization, Argo routing, and faster cache purges.
4. Monitoring → Better Uptime Pro ($20/month): Adds multi-region checks, SMS alerts, and incident management workflows.
5. Email → Postmark ($15/month): Better deliverability for transactional emails. Worth it when email is revenue-critical (SaaS onboarding, payment receipts).
You will hit 20K-30K users before needing horizontal scaling (load balancers, multiple app servers). At that point, you are profitable enough to afford managed services if you want them.
My Actual Recommendation (Start Here)
If you are launching your first micro-SaaS, start with this minimal stack:
- DigitalOcean $6/month droplet (better DX than Hetzner for beginners)
- Neon free tier (Postgres without setup complexity)
- Cloudflare free tier (DNS + CDN + SSL)
- Uptime Robot free tier (basic monitoring)
- Sentry free tier (error tracking)
- Resend free tier (transactional email)
Total cost: $6/month.
This covers 3K-5K users with room to grow. Upgrade to Hetzner when you want to save $1.50/month. Upgrade to Better Uptime ($10/month) when you need professional monitoring. Upgrade to self-hosted Postgres when Neon free tier runs out.
Avoid the temptation to over-engineer. Most micro-SaaS apps fail from lack of users, not infrastructure limits. Spend your time on marketing and product, not optimizing for 100K users you do not have yet.
Final Thought
The best infrastructure is the one you forget exists. If you are spending more than 2 hours/month on DevOps, you picked the wrong stack.
Cloud providers want you to believe that managed services are necessary. They are not. A $50/month VPS stack runs the same workloads as a $500/month AWS bill. The difference is profit margin.
Pick tools that charge predictable monthly fees, not usage-based pricing that scales with your success. Deploy boring technology that works (Postgres, Docker, Caddy). Avoid bleeding-edge platforms that promise scale you do not need.
Your goal is profitability, not technical complexity. Start with the $6/month stack. Upgrade when revenue justifies it. Save your cash for marketing, not infrastructure you do not need yet.



