[{"data":1,"prerenderedAt":593},["ShallowReactive",2],{"site":3,"blog-\u002Fblog\u002Fself-hosting-30-docker-containers-on-a-single-vps":16,"blog-surr-\u002Fblog\u002Fself-hosting-30-docker-containers-on-a-single-vps":588},{"id":4,"calendlyUrl":5,"copyright":6,"email":7,"extension":8,"meta":9,"socials":10,"stem":14,"__hash__":15},"site\u002Fdata\u002Fsite.yml","https:\u002F\u002Fcalendly.com\u002Fherdeybayor\u002Fdiscovery-call","All rights reserved, ©2026","hello@0xsherif.dev","yml",{},{"linkedin":11,"twitter":12,"github":13},"https:\u002F\u002Flinkedin.com\u002Fin\u002F0xsherifdev\u002F","https:\u002F\u002Fx.com\u002F0xsherifdev","https:\u002F\u002Fgithub.com\u002F0xsherifdev","data\u002Fsite","-S03CjOfpfnvoKqIM6EvytqEogbFk4013kamLvbviCQ",{"id":17,"title":18,"body":19,"canonical":570,"category":570,"cover":571,"coverAlt":570,"date":572,"description":573,"extension":574,"meta":575,"navigation":576,"path":577,"published":578,"readingTime":570,"seo":579,"stem":581,"tags":582,"updated":572,"__hash__":587},"blog\u002Fblog\u002Fself-hosting-30-docker-containers-on-a-single-vps.md","Self-Hosting 30+ Docker Containers on a Single VPS",{"type":20,"value":21,"toc":556},"minimark",[22,26,31,34,37,40,44,52,71,74,78,81,221,224,228,236,239,260,263,267,274,277,289,292,296,299,428,431,434,438,444,450,456,466,472,475,479,484,501,506,520,524,544,547,550,553],[23,24,25],"p",{},"Let me explain how I got here, because trust me, this wasn't the plan.",[27,28,30],"h2",{"id":29},"how-it-started","How It Started",[23,32,33],{},"It started innocently. I needed n8n for some workflow automation. The cloud plan? $20\u002Fmonth for limited executions. \"I'll just self-host it,\" I said. Famous last words 😅",[23,35,36],{},"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.",[23,38,39],{},"Before I knew it, I was running a mini data center from a $15\u002Fmonth VPS. My friends think I have a problem. They might be right.",[27,41,43],{"id":42},"the-server","The Server",[23,45,46,47,51],{},"I'm running a ",[48,49,50],"strong",{},"Contabo Cloud VPS 30",":",[53,54,55,59,62,65,68],"ul",{},[56,57,58],"li",{},"12 CPU cores (AMD EPYC)",[56,60,61],{},"24 GB RAM",[56,63,64],{},"200 GB NVMe disk",[56,66,67],{},"Unlimited traffic",[56,69,70],{},"~$15\u002Fmonth",[23,72,73],{},"Is Contabo the fastest? No. Is the support great? Also no. But for $15\u002Fmonth 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 🚗",[27,75,77],{"id":76},"the-stack-aka-what-are-you-running","The Stack (aka \"What Are You Running?!\")",[23,79,80],{},"Here's what's actually running on this thing:",[82,83,84,100],"table",{},[85,86,87],"thead",{},[88,89,90,94,97],"tr",{},[91,92,93],"th",{},"Service",[91,95,96],{},"What It Does",[91,98,99],{},"Why Not SaaS?",[101,102,103,117,130,143,156,169,182,195,208],"tbody",{},[88,104,105,111,114],{},[106,107,108],"td",{},[48,109,110],{},"Coolify",[106,112,113],{},"Self-hosted PaaS",[106,115,116],{},"Replaces Vercel\u002FRailway. Free.",[88,118,119,124,127],{},[106,120,121],{},[48,122,123],{},"n8n",[106,125,126],{},"Workflow automation",[106,128,129],{},"Unlimited executions. No per-run billing.",[88,131,132,137,140],{},[106,133,134],{},[48,135,136],{},"SearXNG",[106,138,139],{},"Meta search engine",[106,141,142],{},"Private, no tracking. Try doing that with Google 👀",[88,144,145,150,153],{},[106,146,147],{},[48,148,149],{},"NocoDB",[106,151,152],{},"Spreadsheet database",[106,154,155],{},"Airtable but free and unlimited",[88,157,158,163,166],{},[106,159,160],{},[48,161,162],{},"Nextcloud",[106,164,165],{},"File storage & sync",[106,167,168],{},"Google Drive but I own my data",[88,170,171,176,179],{},[106,172,173],{},[48,174,175],{},"Docling",[106,177,178],{},"Document processing API",[106,180,181],{},"PDF\u002Fimage parsing for AI pipelines",[88,183,184,189,192],{},[106,185,186],{},[48,187,188],{},"Uptime Kuma",[106,190,191],{},"Monitoring",[106,193,194],{},"Knows when things break before my clients do",[88,196,197,202,205],{},[106,198,199],{},[48,200,201],{},"PostgreSQL",[106,203,204],{},"Database",[106,206,207],{},"Shared across multiple services",[88,209,210,215,218],{},[106,211,212],{},[48,213,214],{},"Redis",[106,216,217],{},"Caching",[106,219,220],{},"Makes Nextcloud not feel like it's running on a toaster",[23,222,223],{},"Plus Tailscale for private networking, Let's Encrypt for HTTPS, and about 15 other app deployments. It adds up.",[27,225,227],{"id":226},"coolify-the-thing-that-makes-it-all-possible","Coolify: The Thing That Makes It All Possible",[23,229,230,231,235],{},"Before Coolify, I was SSH-ing into the server and running ",[232,233,234],"code",{},"docker compose up -d"," like some kind of caveman 🦕",[23,237,238],{},"Now I have a nice web UI where I can:",[53,240,241,244,251,254,257],{},[56,242,243],{},"Deploy from GitHub with one click",[56,245,246,247,250],{},"Manage environment variables without touching ",[232,248,249],{},".env"," files",[56,252,253],{},"Get automatic HTTPS on every service",[56,255,256],{},"Monitor which container is eating all my RAM (it's always Nextcloud, by the way)",[56,258,259],{},"Roll back when I inevitably break something",[23,261,262],{},"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.",[27,264,266],{"id":265},"tailscale-because-not-everything-needs-to-be-public","Tailscale: Because Not Everything Needs to Be Public",[23,268,269,270,273],{},"Some of my services are... let's say \"for my eyes only.\" My search engine, database tools, internal dashboards. These are only accessible through ",[48,271,272],{},"Tailscale",", a mesh VPN.",[23,275,276],{},"The setup is embarrassingly simple:",[278,279,280,283,286],"ol",{},[56,281,282],{},"Install Tailscale on server",[56,284,285],{},"Install on your devices",[56,287,288],{},"Private services bind to Tailscale IP only",[23,290,291],{},"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.",[27,293,295],{"id":294},"lets-talk-money","Let's Talk Money 💰",[23,297,298],{},"This is the part that makes me smile every time:",[82,300,301,313],{},[85,302,303],{},[88,304,305,307,310],{},[91,306,93],{},[91,308,309],{},"SaaS Cost (monthly)",[91,311,312],{},"My Cost",[101,314,315,326,336,345,355,364,374,383,397,411],{},[88,316,317,320,323],{},[106,318,319],{},"n8n Cloud",[106,321,322],{},"$20+",[106,324,325],{},"$0",[88,327,328,331,334],{},[106,329,330],{},"Nextcloud \u002F Google One",[106,332,333],{},"$10+",[106,335,325],{},[88,337,338,341,343],{},[106,339,340],{},"NocoDB \u002F Airtable",[106,342,322],{},[106,344,325],{},[88,346,347,350,353],{},[106,348,349],{},"Search API",[106,351,352],{},"$50+",[106,354,325],{},[88,356,357,359,362],{},[106,358,191],{},[106,360,361],{},"$7+",[106,363,325],{},[88,365,366,369,372],{},[106,367,368],{},"Vercel\u002FRailway (multiple apps)",[106,370,371],{},"$40+",[106,373,325],{},[88,375,376,378,381],{},[106,377,178],{},[106,379,380],{},"$30+",[106,382,325],{},[88,384,385,390,392],{},[106,386,387],{},[48,388,389],{},"My VPS",[106,391],{},[106,393,394],{},[48,395,396],{},"$15",[88,398,399,404,406],{},[106,400,401],{},[48,402,403],{},"Domain",[106,405],{},[106,407,408],{},[48,409,410],{},"~$1",[88,412,413,418,423],{},[106,414,415],{},[48,416,417],{},"Total",[106,419,420],{},[48,421,422],{},"$187+",[106,424,425],{},[48,426,427],{},"~$16",[23,429,430],{},"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.",[23,432,433],{},"But before you go canceling all your subscriptions, let me be honest about the other side...",[27,435,437],{"id":436},"the-stuff-nobody-tells-you","The Stuff Nobody Tells You 😬",[23,439,440,443],{},[48,441,442],{},"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).",[23,445,446,449],{},[48,447,448],{},"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.",[23,451,452,455],{},[48,453,454],{},"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.",[23,457,458,461,462,465],{},[48,459,460],{},"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 ",[232,463,464],{},"docker stats"," and very good at setting memory limits.",[23,467,468,471],{},[48,469,470],{},"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 📚",[23,473,474],{},"The biggest lesson? Self-hosting is a skill. The first service takes a weekend. The tenth takes 20 minutes.",[27,476,478],{"id":477},"should-you-do-this","Should You Do This?",[23,480,481],{},[48,482,483],{},"Yes, if you:",[53,485,486,489,492,495,498],{},[56,487,488],{},"Run multiple side projects",[56,490,491],{},"Know basic Linux and Docker",[56,493,494],{},"Like owning your stuff",[56,496,497],{},"Want to learn DevOps by actually doing it",[56,499,500],{},"Are tired of surprise SaaS invoices",[23,502,503],{},[48,504,505],{},"No, if you:",[53,507,508,511,514,517],{},[56,509,510],{},"Need five-nines uptime for production",[56,512,513],{},"Don't want to think about servers ever",[56,515,516],{},"Haven't used Docker before (learn that first, then come back)",[56,518,519],{},"Value your weekends too much 😂",[27,521,523],{"id":522},"getting-started-the-quick-version","Getting Started (The Quick Version)",[278,525,526,529,532,535,538,541],{},[56,527,528],{},"Get a VPS (Contabo or Hetzner)",[56,530,531],{},"Install Coolify (literally one command)",[56,533,534],{},"Deploy the service that costs you the most",[56,536,537],{},"Add Tailscale for private access",[56,539,540],{},"Add more services as you go",[56,542,543],{},"Try not to become addicted",[23,545,546],{},"You don't need to replace everything overnight. Start with one service and build from there.",[548,549],"hr",{},[23,551,552],{},"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 😂",[23,554,555],{},"What would be the first service you'd move off SaaS? Drop it in the comments, I'm curious!",{"title":557,"searchDepth":558,"depth":558,"links":559},"",3,[560,562,563,564,565,566,567,568,569],{"id":29,"depth":561,"text":30},2,{"id":42,"depth":561,"text":43},{"id":76,"depth":561,"text":77},{"id":226,"depth":561,"text":227},{"id":265,"depth":561,"text":266},{"id":294,"depth":561,"text":295},{"id":436,"depth":561,"text":437},{"id":477,"depth":561,"text":478},{"id":522,"depth":561,"text":523},null,"\u002Fimages\u002Fblog\u002Fselfhosted-stack.webp","2026-05-14","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).","md",{},{"icon":557,"title":557},"\u002Fblog\u002Fself-hosting-30-docker-containers-on-a-single-vps",true,{"title":580,"description":573},"Self-Hosting 30+ Docker Containers on a Single VPS file","blog\u002Fself-hosting-30-docker-containers-on-a-single-vps",[583,584,585,586],"self-hosting","docker","coolify","devops","lpYVBaFM_MGeJoUWxJ2465eHB0M_xl0dHit-5jVSf-E",[589,570],{"title":590,"path":591,"stem":592,"children":-1},"Hello World","\u002Fblog\u002Fhello-world","blog\u002Fhello-world",1778737092162]