June 30, 2026

Building a Sub-$5/Month Self-Hosted Server

What I learned setting up nginx, Docker, and WireGuard on the cheapest VPS I could find that still works.

I ran my side projects on a $34/mo DigitalOcean droplet for two years. Then I realized I was paying for compute I did not need. The last straw was a Hetzner CX22 I spun up for a weekend test that cost me about three cents over 48 hours.

I migrated everything to sub-$5 VPS instances over the course of a month. Here is what I learned about which hosts are actually worth your money and which ones will waste your time.

What You Need to Know First

Sub-$5 VPS instances share a few characteristics regardless of provider:

  • 1 vCPU that will burst to full speed for a few minutes then throttle when your neighbor spins up a load test
  • 1-2GB of RAM, enough for a lean Linux install plus one or two services at a time
  • 20-30GB of storage, usually NVMe on the better hosts and SATA SSD on the rest
  • 1TB of transfer, sometimes less at the very bottom of the price range

Hosts That Actually Work

I tested four providers. Two were usable. Two were not.

Hetzner at about 3.29 EUR/month for the CX22 is the best value I have found. The network is fast, the CPU does not throttle under sustained load the way cheaper providers do, and the control panel is bare minimum without being broken. You get a dedicated IPv4 address, which some budget hosts now charge extra for.

RackNerd runs frequent sales that put their 1GB plan at $1.50/month. The hardware is older than Hetzner’s but it holds up for light workloads. I run a WireGuard tunnel and an nginx reverse proxy on one without issues. Do not expect consistent performance during peak hours; the shared CPU pool gets noisy.

IONOS at $2/month caught my eye from the Reddit threads. The actual performance was underwhelming. Disk IO was a quarter of what Hetzner delivers, and the admin panel is slower to navigate than doing everything over SSH.

Contabo I do not recommend. The prices look too good (4 vCPUs for $3.99), and the performance matches the suspicion. CPU steal time regularly hits 15-20% on their VPS S line. My nginx benchmark showed 60% slower TLS handshake times compared to Hetzner.

The Setup That Works

I landed on a two-instance split:

[hetzner-cx22]  nginx (reverse proxy) + tailscale + monitoring
[racknerd-1gb]  docker (web services) + postgres + redis

The Hetzner box handles ingress. TLS terminates there. Traffic routes to the RackNerd box over a Tailscale tunnel, which avoids exposing any ports directly on the cheaper host. If RackNerd goes down, I lose the app layer but keep the reverse proxy running in maintenance mode.

Docker runs with --restart=unless-stopped and nothing fancy. No Swarm, no Kubernetes, nothing that needs more than one node. Each service has a docker-compose.yml pinned to a specific image tag.

What I Would Do Differently

I underestimated how much time I would spend on network config. Setting up WireGuard between two VPS instances is a 15-minute job. Debugging DNS resolution through a tunnel is not. I should have used Tailscale from day one instead of spending an afternoon fighting systemd-resolved behavior.

I also overestimated what 1GB of RAM can run. A single Node.js process with a database connection and a web framework eats 250MB at idle. Adding a second service pushes you past 500MB. Three services and you are looking at swap usage or OOM kills. The solution was to run fewer services per box and accept that I now have two VPS bills instead of one.

The Bottom Line

Sub-$5 VPS hosting works if you pick the right provider and manage expectations. Hetzner and RackNerd are both worth your time for different reasons. IONOS and Contabo are not, at least not for anything where consistent performance matters. The total cost for my two-box setup is about $5.50/month and it handles everything I need.