Testing hosting since 2009. 60+ accounts across major providers. Former web dev turned full-time reviewer.
The self-hosting wave is real. I've been running various setups on budget VPS plans for the past year. Here's what actually works on $5-20/month servers and what doesn't.
Quick Answer
For self-hosted AI workloads on a budget, RackNerd ($10.18/yr for 1GB KVM) handles lightweight inference and API endpoints. For GPU-accelerated AI, RunPod and Vast.ai offer on-demand GPUs from $0.20/hr — far cheaper than reserved cloud instances.
New to VPS? Start with DigitalOcean — their tutorials alone are worth it.
Before picking a provider, know what you actually need:
| App | Min RAM | Storage | CPU Matters? |
|---|---|---|---|
| Nextcloud | 1 GB | 20 GB+ | Not really |
| Immich (photos) | 4 GB | 50 GB+ | Yes (ML) |
| Ollama (7B) | 4 GB | 20 GB | Very much |
| Ollama (13B+) | 8-16 GB | 40 GB+ | Very much |
| Vaultwarden | 256 MB | 1 GB | No |
| Plausible Analytics | 2 GB | 10 GB | Moderate |
| Home Assistant | 2 GB | 20 GB | Moderate |
| Gitea | 512 MB | 10 GB | No |
| n8n (automation) | 1 GB | 5 GB | Moderate |
| Uptime Kuma | 256 MB | 1 GB | No |
| Stable Diffusion | 16 GB + GPU | 50 GB+ | GPU required |
Stable Diffusion requires a dedicated GPU — not possible on standard VPS. See the GPU cloud section below for options.
A 2GB RAM / 30GB SSD plan for $15-20/year handles Nextcloud, Vaultwarden, a few Docker containers, and light web hosting. Don't try to run Ollama on these — shared CPU and 2GB RAM won't load any useful model. But for everything lightweight, best dollar-for-dollar option.
Visit RackNerdThe sweet spot is their CX32 (4 vCPU / 8GB) at ~$12/month. 8GB is enough to run a 7B model through Ollama at usable speeds. Not fast, but functional for personal use. AMD EPYC CPUs handle inference better than the mystery CPUs on budget providers. Downside: data centers in Germany and Finland — latency matters if you're serving Asia or US.
Visit Hetzner8GB RAM / 200GB SSD for ~$7/month. The specs are real. The catch: disk I/O is slow on cheaper plans, network is mediocre, support is nonexistent. For RAM-heavy but not I/O-heavy workloads (like running a local LLM), Contabo works. For databases or photo libraries, look elsewhere.
Visit ContaboUp to 4 OCPU / 24GB RAM ARM instances for free. Enough to run 13B models. The problem: getting an instance is a lottery. Free tier capacity is limited and "out of capacity" errors are constant. If you get one, incredible. If you can't, don't waste your day on it.
$4-6/month for 1GB RAM. Reliable, good network, clean dashboards. But you're paying 3-5x what RackNerd or Contabo charge for similar specs. Use these if reliability and uptime guarantees matter more than cost.
BandwagonHost's CN2 GIA network is the gold standard for Asia-to-US connectivity. If you need a VPS that serves users in China, Japan, or Southeast Asia with low latency back to US data centers, nothing else comes close at this price point.
Plans start at $49.99/year for 1GB KVM with CN2 GIA routing. The catch: they're frequently out of stock. Popular plans sell out within hours of restocking and can stay unavailable for weeks. You need to monitor restock announcements or use a notification script.
For self-hosting, BandwagonHost works well for lightweight services (Vaultwarden, small websites, API endpoints) that need to be fast from Asia. Don't expect to run AI workloads here — the plans are modest on CPU and RAM. Think of it as a specialized tool for the Asia-US corridor, not a general-purpose budget VPS.
Let's be honest: a $7/mo Contabo VPS isn't training models or running Stable Diffusion. For anything beyond small model inference (7B parameters), you need GPU compute. Here are the best options that won't require a $10K/month AWS commitment.
RunPod is the go-to for most self-hosters who occasionally need GPU power. Spin up an A100 or H100 instance on demand, run your training job or batch generation, shut it down. No commitment, pay by the hour.
Best for: Stable Diffusion batch generation, fine-tuning models, running 30B+ models for a few hours.
Vast.ai is a marketplace where individual GPU owners rent out their hardware. Prices are lower than RunPod — you can find RTX 3090s for $0.10-0.15/hr — but reliability varies. Some hosts have flaky connections, unexpected downtime, or slow disk I/O.
Best for: Budget-conscious experimentation where you can tolerate occasional interruptions. Not recommended for production inference.
Lambda Labs targets ML engineers and researchers. Their cloud offering is straightforward: pick a GPU, get a VM with all the ML frameworks pre-installed (PyTorch, TensorFlow, CUDA). A10G instances start at $0.75/hr. More polished than Vast.ai, less community-focused than RunPod.
Best for: Developers who want a clean ML environment without configuring CUDA drivers. Overkill for casual self-hosters.
When to Use GPU Cloud vs. CPU VPS
The sweet spot for most self-hosters: run your 7B model on a Hetzner CX32 for daily use, and spin up a RunPod A100 for the occasional heavy job. You get 24/7 availability for small tasks without paying GPU prices around the clock.
| Provider | Best Plan | Price | RAM | Good For |
|---|---|---|---|---|
| RackNerd | Promo VPS | ~$15-20/yr | 2 GB | Light apps, web hosting |
| Hetzner | CX32 | ~$12/mo | 8 GB | AI/ML, Ollama |
| Contabo | Cloud VPS M | ~$7/mo | 8 GB | RAM-heavy apps |
| Oracle | Free ARM | Free | 24 GB | Everything (if available) |
| DigitalOcean | Basic Droplet | $6/mo | 1 GB | Reliability-first |
| BandwagonHost | CN2 GIA KVM | $49.99/yr | 1 GB | Asia-US routes |
Not sure what you can actually run on your budget? Here are tested combinations with realistic RAM estimates. All use Docker Compose.
The bare essentials. You'd be surprised how much fits in 2GB RAM with proper swap configured.
| Service | RAM Usage | Purpose |
|---|---|---|
| Vaultwarden | ~40 MB | Password manager (Bitwarden compatible) |
| Uptime Kuma | ~80 MB | Monitoring dashboard |
| Caddy (reverse proxy) | ~30 MB | HTTPS + routing |
| Ghost or WordPress | ~300 MB | Personal blog / site |
| Watchtower | ~20 MB | Auto-update containers |
Total: ~470 MB. Leaves headroom for OS + swap. Add 1GB swap file as insurance.
The sweet spot for most self-hosters. Enough RAM for a real productivity stack plus light AI.
| Service | RAM Usage | Purpose |
|---|---|---|
| Nextcloud | ~500 MB | File sync & office suite |
| Immich | ~1.5 GB | Photo backup (Google Photos replacement) |
| Plausible Analytics | ~400 MB | Privacy-friendly website analytics |
| Ollama (7B model) | ~4 GB | Local AI chatbot |
| Caddy + Vaultwarden | ~70 MB | Reverse proxy + passwords |
Total: ~6.5 GB. Fits on Contabo 8GB. On Hetzner CX22 (4GB), drop Ollama and Immich — run Nextcloud + Plausible + utilities instead.
Full home-lab replacement. Reliable providers with proper SLA, suitable for services you depend on daily.
| Service | RAM Usage | Purpose |
|---|---|---|
| Gitea | ~200 MB | Self-hosted Git (GitHub alternative) |
| n8n | ~300 MB | Workflow automation (Zapier alternative) |
| Authentik | ~500 MB | SSO / identity provider |
| Grafana + Prometheus | ~600 MB | Monitoring & alerting stack |
| Nextcloud | ~500 MB | File sync & collaboration |
| Uptime Kuma | ~80 MB | Service monitoring |
| Caddy | ~30 MB | Reverse proxy + auto SSL |
Total: ~2.2 GB base. With headroom for spikes, a 4GB droplet handles this. Go 8GB if adding databases or media services.
An unmanaged VPS is YOUR responsibility. A fresh VPS gets SSH brute-force attempts within minutes of going live. Run through this checklist before deploying anything.
Change SSH Port + Disable Password Auth
Move SSH from port 22 to something random (e.g., 2222 or 49152). Set PasswordAuthentication no in /etc/ssh/sshd_config and use key-based auth only. This alone stops 99% of automated attacks.
Set Up UFW Firewall
Default deny incoming, allow only the ports you need: your SSH port, 80 (HTTP), 443 (HTTPS). That's it for most setups. Don't open database ports to the public — access them through SSH tunnel or internal Docker network.
Enable Automatic Security Updates
Install unattended-upgrades (Debian/Ubuntu) and enable automatic security patches. You don't want to manually SSH in every week to run apt upgrade. Reboot automatically on kernel updates with a scheduled cron job.
Install fail2ban
fail2ban monitors log files and bans IPs with repeated failed login attempts. Default config is fine for SSH. If you're running web apps, add jails for Nginx/Caddy auth failures too.
Set Up Automated Backups
Two options: (1) Provider snapshots ($1-2/mo) for full disk recovery. (2) rsync critical data (Docker volumes, databases, configs) to a second location — Backblaze B2 at $5/TB/mo or a second cheap VPS. Schedule daily with cron. Test restores quarterly.
Do this first, not later. I've seen too many self-hosters skip security "because it's just a personal server" and end up with a crypto miner running on their VPS. It takes 15 minutes to harden a fresh server. Do it on day one.
You've got a VPS running services. Now you need to make them accessible with proper domains, SSL, and protection. Here's the minimal networking setup.
Create an A record in your DNS settings pointing your domain (or subdomain) to your VPS IP address. Example: nextcloud.yourdomain.com → 123.45.67.89. TTL of 300 seconds is fine. Changes propagate within 5-30 minutes.
Don't expose each service on a different port. Use a reverse proxy that handles SSL certificates automatically:
Put Cloudflare in front of your VPS (free plan). You get: CDN caching for static assets, basic DDoS protection, DNS management with fast propagation, and your real VPS IP is hidden. For self-hosted services, use Cloudflare's "DNS only" mode (gray cloud) to avoid proxy issues with WebSocket apps like Nextcloud.
Set up monitoring from day one. Two approaches:
Testing hosting since 2009. 60+ accounts across major providers. Former web dev turned full-time reviewer.