Single VPS
One box, SSH access, and a deploy script. Often enough.
The most underrated setup in 2026. A single $5–50/mo VPS will run a real SaaS comfortably — sometimes for years.
Components
- A VPS: Hetzner (€4/mo + tax for solid hardware), DigitalOcean ($6+), Vultr, Linode, Scaleway, Contabo (cheap, big disks).
- OS: Debian 12 / Ubuntu 24.04 LTS — boring, supported.
- Web server / proxy: Caddy — single binary, automatic HTTPS, glorious DX.
- App runtime: Node / Bun / Python / Go / whatever; run it under systemd or PM2.
- DB: Postgres on the same box, or a managed Postgres (Neon / Supabase / Crunchy).
- Backup: restic → Cloudflare R2 / Backblaze B2 daily.
- Monitoring: Netdata (free agent, beautiful UI), or Prometheus + Grafana if you like.
- Network: Tailscale + UFW. SSH only over Tailscale; public ports limited to 80/443.
- Deploy: Kamal 2, or just
rsync+systemd, or Coolify if you want a UI.
What it's good at
- Cost. $20/mo runs more than you'd think.
- Mental model. One IP, one filesystem, one log file. Easy to reason about.
- Speed of changes. SSH and edit. No CI/CD pipeline required (though add one).
- Privacy / data sovereignty. You own the disk.
Where it strains
- Single point of failure. Box crashes → outage. Mitigate with snapshots, fast restore, and DNS-level health checks.
- Capacity planning. No autoscale. Buy bigger VPS when you outgrow it.
- Updates. OS patching becomes a chore — set up unattended-upgrades.
- Multi-region. Hard. If you need it, move on.
What's the actual setup look like
A typical "single VPS, Docker-flavored" setup:
- Provision the VPS, set hostname, lock down SSH (key-only, change port, fail2ban).
- Install Docker + Docker Compose.
- Install Coolify or set up Caddy + Docker Compose by hand.
- Install Tailscale for admin access.
- Set up restic → R2 nightly.
- Configure Netdata for monitoring.
- Point DNS, deploy, sleep at night.
When to upgrade
- You can't reboot without a customer noticing → fleet of two.
- DB and app are competing for resources → split DB to managed Postgres.
- You're tired of running ansible-like scripts → move to PaaS or k8s.
Pick this if…
- Solo founder, prototype, or v1. This is the right answer.
- Internal tool for a small team. Boring. Bulletproof.
- Side project / hobby. Don't overthink it.
Skip if you have multiple devs deploying simultaneously, or if your customers will riot over a 5-minute restart.