How to self-host Ghost in 2026: own your blog and newsletter

Substack takes 10% of every paid subscription. Ghost Pro charges $9–199/month managed. Self-hosting gives you 0% revenue share and a flat monthly bill. Three ways to do it — including a 3-minute deploy on livemy.app.

Dmytro Chervonyi

Dmytro Chervonyi

Co-founder & CMO, livemy.app

Last updated

9

min.

Reading time

TABLE OF CONTENTS

item

How to self-host Ghost in 2026 (Docker guide)

AI Summary

Ghost is the open-source publishing platform behind serious independent newsletters — a Substack alternative that charges 0% revenue share, a WordPress alternative without the plugin chaos. Ghost 6.0 (2025) shipped first-class Docker Compose tooling, making self-hosting cleaner than ever. The break-even math against Substack is roughly $290/month in subscription revenue — above that point Ghost saves you money on every paid subscriber. Ghost Pro (managed hosting) runs $9–199/month depending on member count. Self-hosting on a VPS is $5–20/month plus your time. Self-hosting on livemy.app is $20/month flat with custom domain, SSL, and backups included. This guide walks all three paths, the essential URL and database configuration, email delivery setup (the part everyone gets wrong), and the five things that quietly break self-hosted Ghost.

What Ghost is and why people self-host it

Ghost is open-source publishing software — modern, fast, and built specifically for blogs and paid newsletters. Around 50,000 GitHub stars in 2026, used by The Browser Company, 404 Media, Platformer, and thousands of independent writers running paid subscription businesses.

Three reasons people self-host instead of using Ghost Pro or Substack.

Substack takes 10% of every paid subscription. Ghost (Pro or self-hosted) takes 0%. You pay Stripe's standard 2.9% + $0.30 per transaction and keep the rest. Break-even versus Substack lands around $290/month in subscription revenue — above that, Ghost saves you money every month, forever.

Ghost Pro scales by member count. Starter $9/month covers 500 members. Creator $25/month covers 1,000. The number climbs to $199/month at 10,000 members. Self-hosting flattens that — a $20/month server runs Ghost for any member count.

You own your data. Posts, members, subscribers, email lists — all on your server. Useful for compliance, useful for export, useful for never being locked into anyone's platform decisions.

If any of that fits, the rest of this guide is the setup.

Three ways to self-host Ghost

Path A: Docker Compose on your own VPS

Ghost 6.0 shipped first-class Docker Compose tooling in 2025, making this path much cleaner than it used to be. Spin up a VPS ($5–20/month at DigitalOcean, Hetzner, Linode). Install Docker. Drop the official Ghost docker-compose.yml, which includes Ghost itself + MySQL. Configure environment variables, point your domain.

The good. Cheapest path. Full control. Direct access to MySQL for backups and migrations.

The catches. Reverse proxy (nginx), SSL certificate management (free SSL certificate), email delivery configuration — all on you. Realistic time-to-first-deploy: 2–4 hours.

Path B: Managed Docker host (Coolify, Dokploy)

Coolify and Dokploy both ship Ghost as a one-click template. Install Coolify on a $10/month VPS, click "Deploy Ghost", configure the domain, click Deploy. SSL, reverse proxy, MySQL all wired up automatically.

The good. Self-hosted economics, UI-driven setup, no Docker Compose to write.

The catches. Coolify itself needs occasional updates. You're still on a VPS you maintain.

Path C: livemy.app one-click deploy

Pick the Ghost template, point your domain, ship. livemy.app handles the SSL, MySQL provisioning, daily backups, OS patching, and Ghost version upgrades.

The good. Three-minute deploy. $20/month flat with custom domain and free SSL. Backups available as a $5/month add-on.

The catches. More expensive than a $5 VPS. Less customizable at the infrastructure layer. Email delivery still needs a third-party service — see gotcha #3 below.

From zero to a live Ghost on livemy.app (about 3 minutes)

Step 1: Sign up at livemy.app

Go to livemy.app, click Start free. For production Ghost, pick Maker ($20/month) — always-on, no sleep on idle (Ghost's scheduled posts and email sends would miss otherwise).

Step 2: Deploy from the Ghost template

In the dashboard, click New projectTemplateGhost. livemy.app pulls the official Ghost 6.0 Docker image, provisions a MySQL database, sets up persistent volume storage for content and images.

Step 3: Configure environment variables

Under Project Settings → Environment Variables, set:

  • url — your full public URL with https://, e.g., https://blog.yourdomain.com

  • MySQL connection (livemy.app's template handles this automatically with the provisioned database)

  • Mail config — see gotcha #3, you'll add this after signing up for Mailgun

Step 4: Deploy and check the live URL

Typical deploy time: 2–4 minutes. When status flips to Live, you get your-app.livemy.site. Visit /ghost on that URL to complete the Ghost setup wizard (create the owner account, name your publication).

Step 5: Point your domain and update the URL variable

Click Add custom domain, paste your domain, update one DNS record. Once DNS propagates (1–10 minutes) and SSL is live, update the url environment variable to the new custom domain and redeploy. Ghost generates links, sitemaps, and email content from url — if it points at the old livemy.site subdomain, every shared link breaks.

Step 6: Wire up email delivery (Mailgun)

This is the part everyone misses. Ghost uses Mailgun for newsletter sends — the built-in mailer only handles transactional emails (password resets, etc.). Sign up at Mailgun (free 100 emails/day or $35/month for 50K), verify your sending domain, and add the API key + domain to Ghost's mail__transport=SMTP, mail__options__service=Mailgun, mail__options__auth__user, mail__options__auth__pass environment variables.

That's the deploy. Your Ghost is live, your domain works, your email sends, your bill is $25/month flat ($20 Maker + $5 backups) plus Mailgun for newsletter delivery.

Five things that quietly break self-hosted Ghost

1. url doesn't match the public URL

Ghost uses the url environment variable to generate every link, sitemap entry, and email body. Set it wrong and the live site loads but every shared link, every email, every RSS feed points at the wrong place.

Fix. Set url to the full public URL with https:// and no trailing slash. Redeploy. Visit a few share buttons to confirm.

2. SQLite isn't supported in production

Ghost 6.0 deprecated SQLite for production. You need MySQL 8 (the supported version) or maintain a Ghost 5.x install. The livemy.app Ghost template provisions MySQL automatically; on a manual Docker setup, add MySQL to the Compose file.

Fix. Use the official Ghost Docker Compose template, which includes MySQL. Migrate any existing SQLite data with Ghost's import/export JSON.

3. Email delivery requires a third-party transactional mailer

Ghost's built-in mailer is for transactional emails (signup, password reset). Newsletter delivery (the whole point of paid subscriptions) requires Mailgun specifically — Ghost's bulk email feature is built around Mailgun's API.

Fix. Sign up for Mailgun (free 100 emails/day for testing, $35/month for 50,000 emails on the Foundation plan). Verify your sending domain via DNS records. Add the Mailgun API credentials to Ghost's environment variables. Without this, newsletter sends fail silently.

4. Stripe webhooks point at the wrong URL

For paid subscriptions, Ghost talks to Stripe via webhooks. The webhook URL on Stripe's dashboard must match your live Ghost URL exactly. After custom domain setup, the old subdomain webhook will silently keep firing into the void.

Fix. After every domain change, log into Stripe → Developers → Webhooks, update the endpoint URL to your live Ghost URL, regenerate the webhook secret, paste it back into Ghost's Stripe settings.

5. Backups need to cover both the volume and the database

Ghost stores posts in MySQL but images and uploaded files in a volume on disk. A backup of MySQL alone leaves your images lost. A backup of the volume alone leaves your post content lost.

Fix. Run a daily backup that snapshots both. The livemy.app $5/month backups add-on does this automatically for the whole Ghost project (volume + database). For a Path A self-host, set up mysqldump + volume snapshots in cron.

Cost: Substack vs Ghost Pro vs self-hosted on livemy.app

Honest numbers for a small paid newsletter with 1,000 members at $5/month ($5,000 MRR).

Substack: $5,000 × 10% = $500/month in platform fees, plus Stripe (2.9% + $0.30 per subscriber) ~ $179. Total: $679/month.

Ghost Pro Creator (1,000 members): $25/month. Plus Stripe ~ $179. Total: $204/month.

Self-hosted on livemy.app + Mailgun: $25/month livemy.app (Maker + backups) + $35/month Mailgun + $179 Stripe. Total: $239/month.

For a $5K/month newsletter, Substack costs $440/month more than Ghost Pro and roughly $400/month more than self-hosted on livemy.app. Multiplied over a year, that's $5,000–$6,000 in savings — enough to pay for the entire stack ten times over.

At smaller scales (under $290/month subscription revenue), Substack is genuinely cheaper. Above that line, Ghost wins, and self-hosted Ghost wins again over Ghost Pro at the 5,000+ member range.

FAQ

Is self-hosted Ghost really free?

The software is free. You pay for the server ($5–20/month VPS or $20/month managed on livemy.app), email delivery via Mailgun ($0–35/month depending on volume), and Stripe processing fees (industry standard). Total realistic monthly cost: $25–60 depending on email volume and host choice. Plus 0% revenue share, forever.

Why not just use Ghost Pro?

Ghost Pro is the right choice if you don't want to think about infrastructure at all. It scales with member count, which makes it $9–199/month depending on size. Self-hosting flattens that to a constant $25–60/month regardless of how many members you have. The math flips in favor of self-hosting around the 3,000–5,000 member mark.

Can I migrate from Substack to self-hosted Ghost?

Yes. Substack supports a CSV export of subscribers and a post export. Ghost has an official Substack importer that pulls posts and subscribers in one operation. You'll need to email subscribers asking them to confirm payment migration to Stripe (Substack uses its own payment processor, not portable). Plan for 2–4 hours of work for a small newsletter.

Do I need Mailgun specifically?

For bulk newsletter sends, yes — Ghost's bulk email feature is built around Mailgun's API. Transactional emails can use any SMTP provider. There's an active community thread asking for Postmark or Resend support, but as of mid-2026 Mailgun is still the only first-class option for newsletter sends.

What's the cheapest way to host Ghost?

A $5/month VPS (Hetzner, Vultr) running Docker Compose. Realistic monthly bill: $5 VPS + $0–35 Mailgun + $0–2 backups storage = $5–42/month total. Trade-off is your time — expect 2–4 hours of setup and ongoing maintenance. livemy.app at $25/month skips all that for the managed convenience.

Will my self-hosted Ghost auto-update?

On livemy.app, opt-in auto-update or pin to a specific Ghost version. On a manual Docker host, you pull the new image and recreate the container. Ghost ships major version updates a few times a year and minor updates more frequently — worth setting a calendar reminder to check.

Self-host Ghost — own your blog, keep your revenue

If you're running a paid newsletter on Substack and the 10% fee is starting to bite, or you're on Ghost Pro and want predictable pricing as you scale, self-hosting Ghost is the move. The cheapest path is a $5 VPS and an afternoon. The fastest path is a livemy.app deploy.

→ Start free on livemy.app · No credit card · Ghost template, MySQL provisioned, custom domain, SSL, backups, all on Maker at $20/month flat.

Migrating from Substack or Ghost Pro and want a hand with the import? Email hello@livemy.app with the subscriber count and current platform. Replies inside one business day.

Read next

Dmytro Chervonyi

Dmytro Chervonyi

,

Co-founder & CMO, livemy.app

Co-founder & CMO at livemy.app. 12 years as a CMO scaling SaaS from $0 to $10M+ ARR across marketing, sales, and infra products and tools. Now building the missing step between AI-built code and a live URL — for non-developers who’d rather ship than learn DevOps.

Build something.
We'll make it live.

Free to start. 2 minutes to deploy. One click to cancel.

No credit card · No commitment · Free tier forever