Back to Blog

January 19, 2026

Running 29+ Services on a Single NAS with Zero Monthly Fees

Self-Hosting Docker Infrastructure

The Philosophy

Every SaaS subscription is a recurring cost for something you could own. That’s not always a reason to self-host — sometimes the convenience and reliability of a managed service is worth the price. But when you’re running 29 services and counting, those $5-20/month subscriptions compound fast.

My approach: if a service touches my data, my content, or my workflow, I want to own it. If it’s commodity infrastructure (DNS, CDN, email delivery), I’ll pay for managed.

The Hardware

The entire stack runs on a QNAP NAS. Not a rack-mounted server. Not a cloud VM. A NAS sitting in my office. It handles storage, compute, and networking for every service in the stack.

This is intentionally modest hardware. If a service can’t run efficiently on a NAS, it’s probably over-engineered for what I need.

The Stack

Social & Publishing

  • Mastodon — Federated social media. Own your social presence instead of renting it from Twitter/X. My posts, my data, my rules.
  • Castopod — Podcast hosting and distribution. Handles RSS, Spotify, Apple Podcasts. Powers the Luke at the Roost autonomous podcast.
  • Postiz — Social media scheduling and cross-posting. One post, 10+ platforms. Self-hosted alternative to Buffer/Hootsuite.

Developer Tools

  • Gitea — Git server with a clean web UI. Every personal and client project lives here. Fast, lightweight, and doesn’t require GitHub’s pricing tiers.
  • Portainer — Docker management UI. Makes it easy to monitor containers, check logs, and manage deployments without SSH-ing in every time.

Content & Media

  • Plex — Media server. Movies, TV, music — all served to any device in the house.
  • FreshRSS — Feed reader. Hundreds of feeds, zero algorithmic curation. The internet the way it used to work.

Custom Applications

  • Lumina — Custom internal tools and dashboards.
  • Podcast Analytics — Custom analytics pipeline for listener tracking across platforms.

And about 20 more services covering monitoring, backups, DNS management, and various automation tasks.

Infrastructure: Docker Compose + Cloudflare Tunnels

Everything runs in Docker containers managed by Docker Compose. Each service gets its own compose file, its own network, and its own volume mounts. Updates are docker compose pull && docker compose up -d.

The ingress layer is Cloudflare Tunnels, and this is the key architectural decision. Instead of opening ports on my router and managing SSL certificates, each service connects outbound to Cloudflare’s network. Cloudflare handles SSL termination, DDoS protection, and routing.

The pattern works like this: a lightweight cloudflared daemon runs on the NAS and establishes persistent outbound connections to Cloudflare’s edge. I configure routes in the Cloudflare dashboard — service.mydomain.com maps to localhost:8080 on the NAS. No ports exposed. No dynamic DNS. No firewall rules. The NAS is invisible to port scanners.

This is meaningfully better than traditional port forwarding. There’s no attack surface on the network edge. SSL is always handled correctly. And if my ISP changes my IP, nothing breaks because the connection is outbound.

Monitoring

Every service is tracked in Uptime Kuma — an open-source monitoring tool that checks HTTP endpoints, TCP ports, and DNS records on configurable intervals. If Mastodon goes down at 3am, I get a notification. If a Docker container crashes, I know before any user does.

The dashboard gives me a single pane of glass for the entire stack. Green means running. Red means fix it. No ambiguity.

The Cost

Total monthly cost: electricity and internet. That’s it. No hosting fees. No per-seat licensing. No usage-based billing surprises.

The electricity cost for a NAS running 29 containers is negligible — maybe $10-15/month. My internet connection costs the same whether I’m self-hosting or not.

When SaaS Is Still the Right Call

Self-hosting everything is a bad idea. Here’s when I pay for managed services:

  • Email delivery (AWS SES, Postmark) — Deliverability is hard. Let specialists handle it.
  • DNS (Cloudflare) — Global anycast DNS for free is unbeatable.
  • Domain registration — Obviously.
  • Backup storage (B2, S3) — Off-site backups need to be off-site.

The rule of thumb: self-host applications, pay for infrastructure. Applications are where the lock-in and per-seat pricing live. Infrastructure is where the economies of scale live.

If you’re technical enough to manage Docker containers and read logs, self-hosting is worth exploring. Start with one service — Gitea or FreshRSS are great entry points — and expand from there. The savings compound, and so does the control.