Tools: How to Self-Host Your Entire Dev Stack for Under $20/Month in 2026
How to Self-Host Your Entire Dev Stack for Under $20/Month in 2026
Why Self-Host in 2026?
Cost Control That Actually Compounds
Data Sovereignty Without the Enterprise Price Tag
Learning That Pays Dividends
The Hardware: Where to Run It
Option 1: Hetzner Cloud ARM Servers (Recommended)
Option 2: Oracle Cloud Free Tier
Option 3: Repurposed Hardware
The Stack: Every Tool You Need
Git Hosting: Gitea
CI/CD: Woodpecker CI
Deployment Platform: Coolify
Database: PostgreSQL
Monitoring: Uptime Kuma
The Real Monthly Cost Breakdown
What the SaaS Equivalent Would Cost
What NOT to Self-Host
Email (Transactional and Personal)
Authentication (For Customer-Facing Apps)
Large-Scale Object Storage
Our Setup at Effloow
Getting Started: The 30-Minute Setup
Step 1: Provision Your Server (5 minutes)
Step 2: Install Coolify (5 minutes)
Step 3: Deploy Gitea (5 minutes)
Step 4: Deploy Woodpecker CI (5 minutes)
Step 5: Deploy PostgreSQL and Uptime Kuma (5 minutes)
Step 6: Configure Backups (5 minutes)
When to Upgrade
Final Thoughts Every month, developers hand over $50, $100, or $200+ to a patchwork of SaaS tools. GitHub Teams for private repos. A CI/CD provider that charges per build minute. A database host that bills per connection. A monitoring service that costs more than the infrastructure it watches. Here is an alternative: self-host the entire stack on a single ARM server for under $20 a month. Not a toy setup. A real, production-capable developer environment with Git hosting, continuous integration, a deployment platform, a database, and uptime monitoring. This guide walks through exactly how to do it — with real tools, real pricing as of April 2026, and honest advice about what you should and should not self-host. Three reasons keep pushing developers toward self-hosting, and they have only gotten stronger. SaaS pricing scales with your usage. Self-hosting pricing scales with your hardware. When you are a solo developer or a small team, a single €7.99/month server handles workloads that would cost $80+ across multiple SaaS subscriptions. The math gets better over time. Your server costs stay flat while SaaS bills creep up with every new project, every extra user, every additional build minute. GDPR compliance, client contracts that require EU data residency, or simply not wanting your proprietary code on someone else's servers — these used to require expensive infrastructure. A Hetzner server in Falkenstein or Helsinki gives you full EU data residency for the price of a lunch. Understanding how your tools actually work — how Git hosting handles hooks, how CI runners execute pipelines, how reverse proxies route traffic — makes you a better engineer. Self-hosting forces that understanding in a way that clicking buttons in a SaaS dashboard never will. You have three realistic options for budget self-hosting in 2026, each with different trade-offs. Hetzner's CAX line of ARM-based cloud servers remains the best price-to-performance ratio in cloud computing. As of April 2026 (after their recent price adjustment), here is the lineup: Our recommendation: The CAX21 at €7.99/month is the sweet spot. Four ARM vCPUs and 8 GB of RAM comfortably run Gitea, Coolify, a CI runner, PostgreSQL, and a monitoring stack simultaneously. The CAX11 works for truly minimal setups, but you will feel the 4 GB RAM limit once you start running CI builds alongside everything else. Note: Hetzner raised prices by roughly 30–37% effective April 1, 2026, citing rising hardware and infrastructure costs. Even after the increase, these remain among the cheapest cloud servers available in Europe. The CAX series is available in German and Finnish regions only — not in the US or Singapore. Oracle's Always Free tier includes Ampere A1 ARM instances with genuinely useful specs: This sounds almost too good to be true, and there are real caveats. Provisioning ARM instances is notoriously difficult — capacity constraints mean you may need to script retry attempts across multiple regions. Oracle has also been known to reclaim idle free-tier instances. And the network performance is inconsistent compared to Hetzner. That said, if you can get an instance provisioned, it is hard to argue with free. Some developers use Oracle as a secondary/staging environment while keeping Hetzner for production. An old Mac Mini, a used Dell Optiplex, or a Raspberry Pi 5 can all run this stack from your home network. The hardware cost is a one-time purchase, and the monthly cost is just electricity (typically $3–8/month depending on your location and hardware). The trade-off is reliability. Home internet goes down. Power goes out. Dynamic IPs change. You will need a solution like Cloudflare Tunnel or Tailscale to expose services reliably. This works well for personal development but is not recommended for anything client-facing. Here is the complete self-hosted developer stack, all open-source, all running on a single server. What it replaces: GitHub, GitLab (self-hosted)
Resource usage: ~100 MB RAM idle Gitea is a lightweight, self-hosted Git service written in Go. It compiles to a single binary, starts in seconds, and uses a fraction of the resources that GitLab demands. Gitea is not GitHub. The code review experience is simpler, the ecosystem of integrations is smaller, and you will not get Copilot or advanced security scanning. But for hosting private repositories with a clean web interface and functional collaboration tools, it does the job without demanding 4+ GB of RAM like GitLab. What it replaces: GitHub Actions, CircleCI, GitLab CIResource usage: ~50 MB RAM (server) + build-time spikes Woodpecker CI is a community fork of Drone CI that focuses on simplicity and container-native pipelines. Pipelines are defined in YAML, every step runs in a Docker container, and configuration is minimal. A basic pipeline looks like this: Woodpecker integrates directly with Gitea via webhooks. Push code, pipeline runs. No external service, no build minute limits, no waiting in queues. Your builds run as fast as your server allows. For most small-to-medium projects, Woodpecker handles everything you need. Where it falls short compared to GitHub Actions is the ecosystem — you will not find thousands of pre-built actions. But for standard build-test-deploy pipelines, it is more than sufficient. What it replaces: Vercel, Heroku, Railway, RenderResource usage: ~300–500 MB RAM Coolify is the centerpiece of this stack. It is an open-source, self-hosted PaaS that gives you a Heroku-like deployment experience on your own hardware. We covered it extensively in our Coolify vs Dokploy comparison, and for a self-hosted dev stack, it is the clear winner. What Coolify handles: Coolify effectively replaces the need to manually configure Nginx, Certbot, Docker, and deployment scripts. You point it at a repo, it builds and deploys. You click "New Database," it provisions PostgreSQL with credentials. This is the tool that makes self-hosting accessible to developers who do not want to become sysadmins. The self-hosted version is completely free with all features included. Coolify Cloud (their managed offering) starts at $5/month per server if you prefer not to manage the Coolify instance itself. What it replaces: PlanetScale, Supabase (database layer), Neon, RDSResource usage: ~100–200 MB RAM (depends on workload) PostgreSQL needs no introduction. Deploy it through Coolify with one click, or run it as a standalone Docker container. On a CAX21 with 8 GB RAM, you have plenty of room for PostgreSQL to handle small-to-medium workloads comfortably. Key considerations for self-hosted PostgreSQL: What it replaces: UptimeRobot, Pingdom, Better Uptime
Resource usage: ~50–80 MB RAM Uptime Kuma is a self-hosted monitoring tool with a clean interface and surprisingly rich feature set. It handles HTTP(s) monitoring, TCP port checks, DNS monitoring, and Docker container health checks. Notification integrations include Slack, Discord, Telegram, email, and dozens more. The dashboard shows uptime history, response time graphs, and incident timelines. For a single-binary Node.js application, it punches well above its weight. Here is what this entire stack actually costs on a Hetzner CAX21: That is approximately $9.80 USD/month at current exchange rates — well under the $20 target. You could step up to the CAX31 (€15.99) for a more comfortable setup with headroom for multiple projects and still stay under $20. For comparison, here is a rough estimate of equivalent SaaS pricing for a small team (2–3 developers): The self-hosted stack saves $50–100/month. Over a year, that is $600–1,200 — enough to pay for the server for six to twelve years. Self-hosting everything is a trap. Some services are genuinely better left to specialists. Here is what we recommend you keep external. Self-hosting email in 2026 is an exercise in frustration. IP reputation management, SPF/DKIM/DMARC configuration, deliverability monitoring, spam filtering — the operational burden is enormous, and a single misconfiguration means your emails land in spam folders. Use a transactional email service (Resend, Postmark, or Amazon SES) for application emails. Use a standard email provider for business email. The cost is negligible compared to the time you would spend maintaining a mail server. Your domain's DNS should be hosted on infrastructure with global anycast networks and guaranteed uptime. Cloudflare (free tier), Hetzner DNS (free with any Hetzner product), or your registrar's DNS are all better options than running your own BIND or CoreDNS instance. If you are building a product with user authentication, the security implications of running your own auth infrastructure are serious. Services like Clerk, Auth0, or even self-hosted solutions like Authentik or Keycloak (which do run well on this stack) require careful security maintenance. For internal tools and developer authentication, self-hosted Authentik or Keycloak is fine. For customer-facing products with real liability, weigh the trade-offs carefully. If your application stores significant amounts of user-uploaded files, images, or media, use an object storage service (Hetzner Object Storage, Backblaze B2, Cloudflare R2). The cost per gigabyte is lower than block storage, and you get built-in redundancy and CDN integration. We practice what we write about. Effloow runs on a self-hosted stack that closely mirrors what this article describes. As we documented in How We Built a Company Powered by 14 AI Agents, our entire content operation runs on infrastructure that would cost us several hundred dollars a month if we used SaaS equivalents for everything. Our production setup uses Coolify as the deployment layer, PostgreSQL for persistent data, and a mix of self-hosted and external services based on the same principle outlined above: self-host what is straightforward to operate, pay for what is not. The AI agents that produce this content, manage our editorial calendar, and handle SEO optimization all run through this infrastructure. We also run Ollama with Open WebUI for self-hosted AI inference — local LLMs for drafting, code review, and private document analysis, all on the same infrastructure. The monthly infrastructure cost is a fraction of what comparable SaaS-based setups would charge. Here is the fastest path from zero to a working self-hosted dev stack: Sign up for a Hetzner Cloud account and create a CAX21 instance. Choose Ubuntu 24.04 as the operating system, select the Falkenstein or Helsinki region, and add your SSH key. SSH into your server and run the Coolify installation script: This installs Docker, Traefik, and the Coolify management interface. Once complete, access the dashboard at http://your-server-ip:8000 and complete the initial setup. From the Coolify dashboard, click "New Resource" → "One-Click Services" and select Gitea. Configure your domain (e.g., git.yourdomain.com), and Coolify handles the Docker deployment, reverse proxy, and SSL certificate automatically. Same process — deploy Woodpecker CI from Coolify's one-click menu. Configure it to authenticate against your Gitea instance using OAuth2. Once connected, any repository in Gitea with a .woodpecker.yml file will automatically trigger builds. Deploy PostgreSQL as a database resource in Coolify. Deploy Uptime Kuma as a one-click service. Add monitoring endpoints for all your services. In Coolify's settings, configure backup destinations pointing to Hetzner Object Storage or Backblaze B2. Set up automated daily backups for your PostgreSQL databases and Gitea data. After 30 minutes, you have a complete developer stack running on hardware you control, at a cost that rounds to zero in most engineering budgets. This single-server setup works well up to a point. Here are the signals that you need more: The beauty of this approach is that scaling is incremental. Add a server when you need it, not before. There is no minimum tier, no annual contract, no sales call required. Self-hosting your dev stack in 2026 is not about being contrarian or penny-pinching. It is about understanding what you are paying for, controlling your infrastructure, and keeping costs proportional to the value you are getting. A CAX21 at €7.99/month running Coolify, Gitea, Woodpecker CI, PostgreSQL, and Uptime Kuma gives you 90% of what most small teams need from their development infrastructure. The other 10% — email delivery, DNS, auth for customer-facing apps — is better served by specialized providers. Start with one server. Deploy one project. See how it feels. The worst case is you learn how your tools actually work. The best case is you save hundreds of dollars a month and never look back. Want to see how our self-hosted PaaS layer compares? Read our detailed Coolify vs Dokploy comparison for benchmark data and real deployment results. And if you want to add workflow automation to your self-hosted stack, see our Zapier vs Make vs n8n comparison — n8n can be self-hosted on the same infrastructure. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse