Back to Blog
self-hostingdockercoolifydevops

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).

Self-Hosting 30+ Docker Containers on a Single VPS
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:

ServiceWhat It DoesWhy Not SaaS?
CoolifySelf-hosted PaaSReplaces Vercel/Railway. Free.
n8nWorkflow automationUnlimited executions. No per-run billing.
SearXNGMeta search enginePrivate, no tracking. Try doing that with Google 👀
NocoDBSpreadsheet databaseAirtable but free and unlimited
NextcloudFile storage & syncGoogle Drive but I own my data
DoclingDocument processing APIPDF/image parsing for AI pipelines
Uptime KumaMonitoringKnows when things break before my clients do
PostgreSQLDatabaseShared across multiple services
RedisCachingMakes 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 .env files
  • 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:

  1. Install Tailscale on server
  2. Install on your devices
  3. 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:

ServiceSaaS 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)

  1. Get a VPS (Contabo or Hetzner)
  2. Install Coolify (literally one command)
  3. Deploy the service that costs you the most
  4. Add Tailscale for private access
  5. Add more services as you go
  6. 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!