Self-Hosting 30+ Docker Containers on a Single VPS
I run 30+ Docker containers on a single VPS. Yes, thirty. On one box. And no, my server hasn't caught fire yet 🔥 (I check every morning though, just in case).

On this page
Let me explain how I got here, because trust me, this wasn't the plan.
How It Started
It started innocently. I needed n8n for some workflow automation. The cloud plan? $20/month for limited executions. "I'll just self-host it," I said. Famous last words 😅
Then I needed a search engine. Then file storage. Then a database tool. Then monitoring. Then a document processing API. Then... you get the idea.
Before I knew it, I was running a mini data center from a $15/month VPS. My friends think I have a problem. They might be right.
The Server
I'm running a Contabo Cloud VPS 30:
- 12 CPU cores (AMD EPYC)
- 24 GB RAM
- 200 GB NVMe disk
- Unlimited traffic
- ~$15/month
Is Contabo the fastest? No. Is the support great? Also no. But for $15/month with those specs? Nothing comes close. It's the Honda Civic of VPS providers. Reliable, affordable, gets the job done. Nobody's taking Instagram photos of it, but it works 🚗
The Stack (aka "What Are You Running?!")
Here's what's actually running on this thing:
| Service | What It Does | Why Not SaaS? |
|---|---|---|
| Coolify | Self-hosted PaaS | Replaces Vercel/Railway. Free. |
| n8n | Workflow automation | Unlimited executions. No per-run billing. |
| SearXNG | Meta search engine | Private, no tracking. Try doing that with Google 👀 |
| NocoDB | Spreadsheet database | Airtable but free and unlimited |
| Nextcloud | File storage & sync | Google Drive but I own my data |
| Docling | Document processing API | PDF/image parsing for AI pipelines |
| Uptime Kuma | Monitoring | Knows when things break before my clients do |
| PostgreSQL | Database | Shared across multiple services |
| Redis | Caching | Makes Nextcloud not feel like it's running on a toaster |
Plus Tailscale for private networking, Let's Encrypt for HTTPS, and about 15 other app deployments. It adds up.
Coolify: The Thing That Makes It All Possible
Before Coolify, I was SSH-ing into the server and running docker compose up -d like some kind of caveman 🦕
Now I have a nice web UI where I can:
- Deploy from GitHub with one click
- Manage environment variables without touching
.envfiles - Get automatic HTTPS on every service
- Monitor which container is eating all my RAM (it's always Nextcloud, by the way)
- Roll back when I inevitably break something
The learning curve? About a weekend. If you've used Vercel or Railway before, you'll feel right at home. Except this time, you're not paying per seat, per build, or per breath.
Tailscale: Because Not Everything Needs to Be Public
Some of my services are... let's say "for my eyes only." My search engine, database tools, internal dashboards. These are only accessible through Tailscale, a mesh VPN.
The setup is embarrassingly simple:
- Install Tailscale on server
- Install on your devices
- Private services bind to Tailscale IP only
That's it. No VPN configs. No firewall rules. No "why can't I connect" debugging at 2am. Tailscale just works. And the free tier covers 100 devices, which is about 97 more than I need.
Let's Talk Money 💰
This is the part that makes me smile every time:
| Service | SaaS Cost (monthly) | My Cost |
|---|---|---|
| n8n Cloud | $20+ | $0 |
| Nextcloud / Google One | $10+ | $0 |
| NocoDB / Airtable | $20+ | $0 |
| Search API | $50+ | $0 |
| Monitoring | $7+ | $0 |
| Vercel/Railway (multiple apps) | $40+ | $0 |
| Document processing API | $30+ | $0 |
| My VPS | $15 | |
| Domain | ~$1 | |
| Total | $187+ | ~$16 |
That's a conservative estimate. Some of these SaaS tools charge per seat, per execution, or per GB stored. The real gap is probably wider.
But before you go canceling all your subscriptions, let me be honest about the other side...
The Stuff Nobody Tells You 😬
It's not set-and-forget. Things break. Docker runs out of disk space at 3am. A container decides to eat all 24GB of RAM for breakfast. PostgreSQL needs vacuuming (yes, databases need housekeeping too).
Backups are YOUR problem. When you use Vercel, they handle backups. When you self-host, if your disk dies and you didn't set up backups... that's on you. I learned this the scary way. Set up automated backups early. Do it now. I'll wait.
Updates never stop. Security patches, version upgrades, dependency conflicts. It's not hard, but it's constant. Think of it like having a garden. Rewarding, but you can't just plant things and walk away.
RAM is never enough. 24 GB sounds like a lot until PostgreSQL, Redis, Nextcloud, and 10 other services are all fighting over it. I've become very familiar with docker stats and very good at setting memory limits.
Start small. I didn't deploy 30 containers on day one. I started with Coolify and one app. Then added services as I needed them. Each new service taught me something about Docker networking, reverse proxies, or why you should always read the docs before running random commands from Stack Overflow 📚
The biggest lesson? Self-hosting is a skill. The first service takes a weekend. The tenth takes 20 minutes.
Should You Do This?
Yes, if you:
- Run multiple side projects
- Know basic Linux and Docker
- Like owning your stuff
- Want to learn DevOps by actually doing it
- Are tired of surprise SaaS invoices
No, if you:
- Need five-nines uptime for production
- Don't want to think about servers ever
- Haven't used Docker before (learn that first, then come back)
- Value your weekends too much 😂
Getting Started (The Quick Version)
- Get a VPS (Contabo or Hetzner)
- Install Coolify (literally one command)
- Deploy the service that costs you the most
- Add Tailscale for private access
- Add more services as you go
- Try not to become addicted
You don't need to replace everything overnight. Start with one service and build from there.
I've been running this setup for months now and I keep finding new things to self-host. At this point, I think I might have an actual problem 😂
What would be the first service you'd move off SaaS? Drop it in the comments, I'm curious!