The Self-Hosted Publishing Stack: Ghost + Coolify + Hetzner
Self-hosting Ghost on a Hetzner VPS managed through Coolify is the cheapest way to run a professional-grade publishing operation — under $10/month for what Ghost(Pro) charges $25-199/month to deliver. You get full ownership of your data, your code, and your infrastructure. The trade-off is that you become the sysadmin. Every SSL certificate renewal, every Ghost update, every Docker container that decides to misbehave at 2 AM — that's yours. This article covers what the setup actually involves, what the tutorials leave out, and whether the savings justify the maintenance.
What It Actually Does
The stack has four components, each doing one job.
Hetzner is the hosting. A German cloud provider that offers VPS instances at prices that make AWS, DigitalOcean, and Linode look like luxury goods. A CX22 instance — 2 vCPUs, 4GB RAM, 40GB disk — costs roughly €4.50/month (~$5 USD). That's enough to run a single Ghost instance comfortably or 2-3 low-traffic instances if you're careful with resources. Hetzner's datacenters are in Germany, Finland, and the US (Ashburn, Virginia, and Hillsboro, Oregon). [VERIFY US datacenter locations] For a publishing site where millisecond latency doesn't matter, European hosting with a CDN in front works fine for global audiences.
Coolify is the deployment layer. It's an open-source, self-hosted alternative to platforms like Heroku, Vercel, or Railway. You install Coolify on your Hetzner VPS, and it gives you a web dashboard for deploying and managing Docker-based applications. It handles SSL certificates (via Let's Encrypt), reverse proxy configuration (Traefik or Caddy), basic monitoring, and deployment automation. Coolify is the "make self-hosting not terrible" layer — the thing that turns "manage Docker containers via SSH" into "click a button to deploy Ghost."
Ghost is the CMS. The same Ghost that Ghost(Pro) runs — same editor, same membership system, same newsletter sending, same API. Self-hosted Ghost is functionally identical to Ghost(Pro). The difference is that Ghost(Pro) handles updates, backups, scaling, and server management. Self-hosted Ghost is just the software; everything else is your problem.
Mailgun is the email sending service. Ghost uses Mailgun to send newsletters and transactional emails (welcome emails, login links, password resets). Mailgun's flex pricing — free for the first 1,000 emails per month, then $0.80 per 1,000 after that — makes it effectively free for small publications and cheap at scale. At 50,000 subscribers, you're looking at roughly $40/month for email sending. At 100,000, roughly $80/month. These are fractions of what managed newsletter platforms charge for equivalent subscriber counts.
Together, the stack gives you a fully functional publishing platform with newsletters, memberships, and payments — for roughly $5-15/month depending on your traffic and email volume. The same capability through Ghost(Pro) costs $25/month at the starter tier and scales to $199+/month as your audience grows.
What The Demo Makes You Think
Every self-hosting tutorial follows the same narrative arc: install this, configure that, done in 15 minutes. The Coolify documentation shows a clean deployment flow — select Ghost from the template library, fill in your domain, click deploy, and your site is live.
Here's what the 15-minute tutorial doesn't cover.
DNS configuration takes longer than deployment. Before Ghost goes live, you need to point your domain to your Hetzner server's IP address, set up the right DNS records, and wait for propagation. If you're using Cloudflare (and you should be — free CDN, free DDoS protection, fast DNS), you'll need to configure the proxy settings correctly. SSL certificates from Let's Encrypt — which Coolify manages — require the DNS to resolve before they can be issued. If your DNS isn't propagated yet, SSL fails. If SSL fails, your site serves over HTTP or doesn't serve at all. The first time you do this, expect to spend 30-60 minutes on DNS alone.
Mailgun setup is its own project. Ghost sends email through Mailgun, and Mailgun requires domain verification, DNS records for SPF and DKIM, and — if you want decent deliverability — a custom sending domain rather than the default Mailgun sandbox. Setting up Mailgun properly means adding 3-5 DNS records, verifying them, and then warming up your sending domain so Gmail doesn't immediately flag your emails as spam. The Mailgun dashboard is not intuitive for first-time users. Budget an hour for initial setup and another few days for DNS propagation and verification.
The 2-3 hour reality. A realistic timeline for someone with basic server experience: 15 minutes to spin up a Hetzner VPS, 15 minutes to install Coolify, 10 minutes to deploy Ghost through Coolify, 30-60 minutes for DNS configuration and SSL, 30-60 minutes for Mailgun setup, and another 30 minutes for Ghost configuration (theme, settings, Stripe integration for memberships). Total: 2-3 hours for a first-time setup. Subsequent sites go faster — maybe 60-90 minutes — because you've already debugged the DNS and Mailgun patterns.
What breaks. This is the part the tutorials genuinely skip. Ghost updates occasionally introduce breaking changes — a new version might require a newer Node.js version that conflicts with your Docker configuration. Coolify itself is actively developed, and updates sometimes introduce bugs or change how deployments work. SSL certificate renewals are supposed to be automatic (Coolify manages Let's Encrypt), but "supposed to be automatic" means "usually automatic until it isn't," and a failed renewal means your site goes down or serves security warnings. Server resource limits sneak up on you — a 2GB RAM VPS can run one Ghost instance, but if your site gets a traffic spike, the OOM killer will terminate processes with no warning.
Backups are your responsibility. Ghost(Pro) handles backups. Self-hosted Ghost doesn't. If your Hetzner VPS dies — and servers do die, even at good providers — your data dies with it unless you've configured automated backups. Hetzner offers automated server snapshots for an additional ~20% of your server cost. Coolify can be configured to back up databases to external storage. Neither is set up by default. If you self-host without configuring backups, you will eventually lose data. It's a question of when, not if.
What's Coming
Coolify is improving rapidly. The project has grown from a solo developer's side project to a funded open-source tool with a real team and a growing community. Each release makes the deployment experience smoother — better template support, more reliable SSL management, improved monitoring dashboards. The goal is to make self-hosting as simple as clicking "deploy" on a managed platform, and it's getting meaningfully closer to that goal with each release. [VERIFY Coolify's current funding/team status]
Hetzner continues to expand its datacenter footprint and offer increasingly competitive pricing. The US datacenters make it a viable option for publishers who need low-latency hosting for North American audiences without using a CDN. Pricing has remained stable while specs improve — the VPS you get for $5/month today has more resources than the $5/month VPS from two years ago.
Ghost's self-hosting story is getting better. Docker-based deployments are now the recommended approach (replacing the older CLI-based installation), and Ghost's official Docker images are well-maintained. The upgrade path — pulling a new Docker image and restarting the container — is more reliable than the old ghost update CLI command, which had a tendency to fail in creative ways.
The direction is clear: self-hosting is getting easier. It's not yet as easy as managed hosting, and it may never be, but the gap is shrinking. The question is whether the gap shrinks fast enough to matter for your specific situation.
The Cost Comparison In Detail
Let's make the savings concrete.
Single site, 5,000 subscribers:
- Self-hosted: Hetzner CX22 (~$5/month) + Mailgun (~$4/month) + domain ($12/year, amortized to $1/month) = ~$10/month
- Ghost(Pro) Starter: $25/month [VERIFY current pricing tier for 5K subscribers]
- Savings: ~$15/month, $180/year
Single site, 25,000 subscribers:
- Self-hosted: Hetzner CX22 (~$5/month) + Mailgun (~$20/month) + domain ($1/month) = ~$26/month
- Ghost(Pro) Business: $99/month [VERIFY]
- Savings: ~$73/month, $876/year
Five sites, mixed traffic:
- Self-hosted: Hetzner CX32 (~$9/month, bigger VPS for multiple sites) + Mailgun (~$15/month across all sites) + domains (~$5/month) = ~$29/month
- Ghost(Pro) for five sites: 5 × $25/month minimum = $125/month
- Savings: ~$96/month, $1,152/year
The savings multiply with every additional site. This is where self-hosting makes the most compelling economic argument — when you're running multiple publications, the per-site cost on managed hosting adds up fast, while the self-hosted cost barely increases. Adding a sixth Ghost instance to a VPS that's already running five costs zero dollars in additional hosting (assuming the server has headroom) and a few minutes of deployment time.
When Self-Hosting Is Worth It
It's worth it if you're running multiple Ghost sites. The economics become undeniable at three or more sites, and dramatic at ten or more. A server that costs $10/month can comfortably run 5-8 low-to-medium traffic Ghost sites. The same setup through Ghost(Pro) would cost $125-200+/month.
It's worth it if you have basic comfort with servers and terminals. You don't need to be a sysadmin. You need to be able to SSH into a server, read log output, and follow troubleshooting documentation. If ssh root@your-server-ip doesn't intimidate you, you're qualified.
It's worth it if you want full control over your publishing infrastructure — custom themes without Ghost(Pro)'s limitations, API access without rate limiting, the ability to run custom integrations on the same server, and the knowledge that your entire publishing operation lives on hardware you control.
It's not worth it if you're running a single site and your time is worth more than $15-75/month. The maintenance tax — 2-4 hours per month on updates, monitoring, troubleshooting, and the occasional emergency — is real. If you bill $100/hour for your time, the "savings" from self-hosting a single site evaporate the moment something breaks.
It's not worth it if you have zero server experience and no interest in learning. The learning curve is manageable but not trivial. If the idea of configuring DNS records makes you anxious, Ghost(Pro) exists specifically so you don't have to.
It's not worth it if uptime is critical and you don't have monitoring and alerting set up. Ghost(Pro) has a team watching the servers. Your self-hosted instance has you. If your VPS goes down at midnight and you don't have uptime monitoring configured, your site stays down until you check it in the morning.
The Verdict
The Ghost + Coolify + Hetzner stack is the best value in independent publishing infrastructure. For the price of two coffees per month, you get a professional publishing platform with newsletters, memberships, and payments — fully under your control. At scale, especially with multiple sites, the savings are measured in thousands of dollars per year.
The cost is your time and your willingness to own the infrastructure. Self-hosting is not passive. It's an ongoing commitment to updates, backups, monitoring, and troubleshooting. The workload is modest — a few hours per month in normal operation, more when something breaks — but it is not zero.
The honest recommendation: if you're technical enough to be reading this article and nodding along, and especially if you're running or planning to run multiple publications, self-host. The savings are real, the control is meaningful, and the tools (Coolify in particular) have matured enough to make the experience reasonable. If any part of this article made you nervous, Ghost(Pro) is $25/month and they handle everything. That's also a perfectly good answer.
This is part of CustomClanker's Publishing Stack series — what actually works for putting stuff online.