Skip to main content

Use a single beefy VPS instead of cloud providers

I’ve been self-hosting for over a decade. At some point, everyone tells you to “just use AWS” or “scale with the cloud.” I did that too. Then I looked at my bills.

For most indie hackers and small teams, a single beefy VPS is all you need. Not a cluster. Not Kubernetes. Not auto-scaling. Just one server with enough horsepower to run everything.

The math nobody talks about

Let’s compare real numbers. A Hetzner CAX41 (ARM64) gives you:

  • 16 vCPU
  • 32 GB RAM
  • 320 GB NVMe SSD
  • 20 TB traffic

Cost: ~$38/month (€35).

The AWS equivalent? You’re looking at:

c7g.xlarge (4 vCPU, 8 GB)     ~$100/month
+ EBS storage (320 GB gp3)    ~$30/month
+ Data transfer (1 TB out)    ~$90/month
= $220+/month minimum

And that’s a smaller instance. Match the Hetzner specs and you’re at $300-400/month easily. Google Cloud and Azure are in the same ballpark.

The cloud providers charge you for:

  • CPU time
  • Memory
  • Storage
  • Network egress (the killer)
  • Load balancers
  • Managed databases
  • Every little thing

A VPS? Flat rate. Use what you need.

What you can run on one server

Here’s what I run on a single Hetzner box:

File storage - Nextcloud or OwnCloud. Your own Dropbox with 300+ GB. No monthly per-user fees.

docker run -d \
  --name nextcloud \
  -p 8080:80 \
  -v nextcloud:/var/www/html \
  nextcloud

AI development - Claude Code for agentic coding tasks, API-based AI workflows. Run your development environment without being tied to a specific machine.

Task automation - n8n or Temporal for workflows. Connect your apps, automate the boring stuff.

# docker-compose.yml for n8n
services:
  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    volumes:
      - n8n_data:/home/node/.n8n
    environment:
      - N8N_SECURE_COOKIE=false

Personal VPN - WireGuard takes 5 minutes to set up. Secure browsing anywhere, access your home network remotely.

# Install WireGuard
apt install wireguard

# Generate keys
wg genkey | tee privatekey | wg pubkey > publickey

Analytics - Plausible or Umami. Privacy-friendly, no cookie banners needed.

Web apps - Multiple sites and APIs. Caddy or Traefik handles SSL automatically.

Databases - PostgreSQL, Redis, whatever you need. Direct access, no connection pooling nonsense.

All of this. Under $40/month.

When NOT to do this

I’m not saying VPS is always the answer. Skip it if you have:

  • Compliance requirements - SOC2, HIPAA, PCI that mandate specific providers
  • Global distribution needs - Users in 50 countries need edge nodes
  • Massive scale - You’re handling millions of requests per second
  • A team over 10 engineers - Coordination overhead outweighs cost savings

For everyone else? A VPS is probably enough.

How to set it up

The easiest path is Coolify or Caprover. They give you a Heroku-like experience on your own hardware.

# Install Coolify (one command)
curl -fsSL https://get.coolify.io | bash

Or go the Docker Compose route for more control:

# Basic setup
apt update && apt install docker.io docker-compose-v2
mkdir -p /opt/apps && cd /opt/apps

# Your apps go in separate directories
# Each with its own docker-compose.yml

Put Cloudflare in front for DDoS protection and caching. Set up automated backups to a second location. Monitor with Uptime Kuma or similar.

That’s it. You now have infrastructure that costs less than a nice dinner and handles more than most startups need.

Summary

The cloud is great for specific use cases. Massive scale, global distribution, enterprise compliance. For everything else, it’s overpriced complexity.

A single beefy VPS gives you sovereignty, simplicity, and savings. You own your data. You control your costs. You understand your infrastructure.

Start with a Hetzner, DigitalOcean, or Vultr box. Install Docker. Deploy your apps. Scale vertically first. You’ll be surprised how far one server can take you.

More in tech

View all →

Stay in the loop

New writings, tools, and updates—no spam

You're in!