Skip to main content

Can you self host Ghost for free?

Ghost's code is MIT-licensed, but a supported install needs a server, MySQL 8, email and upkeep. Real costs and options, checked 2026-11-10.

Updated 20 min readMarkdown

Yes and no. Ghost is MIT-licensed open source, so the software itself costs nothing to download, modify or run. Running it is a different matter: you need a server with at least 1 GB of memory, MySQL 8, a domain, a way to send transactional mail, Mailgun if you want Ghost's built-in newsletter delivery, backups, and someone (you) to apply updates. A genuinely $0 server exists in a couple of places, but it comes with caveats, and paid setups that meet Ghost's documented floor start at about $3.30 a month for a managed pod (newsletters not included) and reach about $21 a month for a $6 server plus Mailgun's Basic plan, before you count your own time.

Disclosure: I work on VeloCMS, a hosted blog CMS. It can't be self-hosted, so it isn't a way to run Ghost for free. It appears once, in the comparison section.

Every price, version and limit below comes from the vendor's own docs or pricing page, read on 2026-11-10. I didn't benchmark Ghost on any of these hosts, so "meets the floor" means it meets the number the docs print, nothing more.

Is Ghost really free software?

The source code is. Ghost's GitHub repository says the code is "Released under the MIT license" (Ghost on GitHub), which lets you run it commercially, change it, and host it without paying anyone. The repository also says that 100% of revenue from Ghost(Pro) purchases goes to the Ghost Foundation.

What "free" doesn't cover is the infrastructure underneath: Node.js, MySQL, a reverse proxy with TLS and a mail provider. Each is a bill, a chore, or both.

What does a supported Ghost production server look like?

Ghost's official install guide targets a very specific shape, and it's worth reading before you buy anything. As of today the prerequisites on the Ubuntu install page are:

  • Operating system: Ubuntu 22.04, 24.04 or 26.04
  • Web server: NGINX, minimum 1.9.5 for SSL
  • Database: MySQL 8.0 or 8.4
  • Node.js: "a supported version" (see below)
  • Init system: systemd
  • Memory: a server with at least 1 GB
  • A registered domain with a DNS A-record pointing at the server's IP before you start, so SSL can be configured during install

On Node, the Node versions FAQ says Ghost supports Node.js v22 LTS and v24 LTS and nothing else. Odd-numbered releases and older even ones are marked unsupported. The same page keeps a per-release table of exact minimums, which have been moving up to security releases, so don't pin a stale Node patch version from an old tutorial.

The install itself goes through Ghost-CLI. These are the commands the docs show:

sudo npm install ghost-cli@latest -g
sudo mkdir -p /var/www/sitename
cd /var/www/sitename
ghost install

The guide warns against naming the system user ghost because it conflicts with the CLI. When your box is slightly off the supported path (a different distro, MariaDB instead of MySQL, another NGINX site on the same server), you're on your own.

One more detail from that page, because it affects what "free" gets you: Ghost-CLI installs "are not compatible with web analytics". Ghost's newer built-in analytics and its ActivityPub features need the Docker Compose route instead, which is the next section.

Can I run Ghost on SQLite or MariaDB to save resources?

Not in production. The supported databases FAQ is blunt: "MySQL 8 is the only supported database in production." For SQLite it says "We strongly recommend switching to MySQL 8 by performing a full reinstall of Ghost," and for MariaDB, "We strongly recommend migrating from MariaDB to MySQL 8."

SQLite still exists for local work. The local install guide uses it, runs in development mode, and describes the result as unsuitable for production. Older posts that run Ghost on SQLite on a tiny VPS predate Ghost narrowing its production database support, and the update docs recommend a full reinstall for SQLite-in-production sites.

The cost consequence: MySQL 8 wants memory of its own on top of Ghost's Node process, so on a 1 GB box both live side by side with little to spare. That's a judgement from reading the numbers, not a measurement, but it's why I'd treat 1 GB as a floor and not a target.

Does Ghost have an official Docker setup?

Two of them, with different maturity levels.

First, the plain image. The official ghost image on Docker Hub has a one-liner for trying it out, and the quick-start sets NODE_ENV=development, which is a development setup (a SQLite file), not a production one:

docker run -d --name some-ghost -e NODE_ENV=development -e url=http://localhost:3001 -p 3001:2368 ghost

For production, the image page says you need "MySQL 8, https, and a reverse proxy", and the proxy must pass the usual X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Proto headers. Ghost reads configuration from environment variables, with double underscores for nesting. A MySQL connection in a compose file:

environment:
  database__client: mysql
  database__connection__host: db
  database__connection__user: root
  database__connection__password: change-me
  database__connection__database: ghost

Content (themes, images, uploads) lives at /var/lib/ghost/content, so mount a volume there or lose it with the container.

Second, the compose tooling. The Docker install guide is labelled a preview on Ghost's install overview, so treat that word seriously. It's a repository, ghost-docker, containing a compose file that wires up Ghost, MySQL and Caddy (which handles TLS). Prerequisites are a Linux server, Docker 20.10.13 or higher, a domain pointing at the server, and an SMTP service for transactional mail. The documented steps:

git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
docker compose pull
docker compose up -d

Before the last line you edit .env: set DOMAIN, generate DATABASE_ROOT_PASSWORD and DATABASE_PASSWORD (the guide suggests openssl rand -hex 32 for both), and fill in the SMTP block. Migrating from a Ghost-CLI install uses a scripts/migrate.sh, which stops the existing NGINX instance and so takes the site offline if other sites share the machine.

Web analytics adds an optional Tinybird account, which I haven't priced. The point: Docker doesn't make Ghost cheaper. It makes the setup repeatable and it's the route to Ghost's newest features, but you still need the same server, database and mail provider.

How much RAM and server do I actually need?

The docs' number is "at least 1GB memory", and I found no higher recommendation on the pages I read. For a sense of how that maps to real plans, DigitalOcean's Droplet pricing page lists these basic plans: $4 a month for 512 MiB (below Ghost's floor), $6 for 1 GiB with 25 GiB of SSD and 1,000 GiB of transfer, and $12 for 2 GiB. The DigitalOcean Marketplace Ghost 1-Click App bundles Ghost, Nginx, MySQL 8 and Node 22 on Ubuntu 24.04, and its own API example creates a 4 GB droplet rather than a 1 GB one. The listing's version numbers disagree with each other (6.74.0 at the top, 6.71.0 in the package table), so check what you actually got after first boot.

Which free or near-free hosts can run Ghost today?

Each option against its own current terms.

Oracle Cloud Always Free

This is the closest thing to a real $0 server. Oracle's Always Free resources page lists up to two AMD micro instances with 1 GB of memory each, and an Arm Ampere A1 allowance of 2 OCPUs and 12 GB of memory in total, with Ubuntu images available. You also get 200 GB of combined storage in your home region and 10 TB of outbound transfer a month.

The caveats are real. Instances must be created in your home region. Oracle documents an "out of host capacity" error for temporary shortages of free shapes, and its advice is to retry, try another availability domain, or upgrade to a paid account (you aren't charged for Always Free resources after upgrading, only for usage above the limits). And Oracle may reclaim idle instances: over 7 days, CPU at the 95th percentile under 20% and network under 20% (plus memory under 20% on A1 shapes) qualifies. A quiet personal blog can look exactly like that. Free in money, expensive in uncertainty.

Google Cloud Free Tier (e2-micro)

Google's free tier page covers one non-preemptible e2-micro VM per month in us-west1, us-central1 or us-east1, plus 30 GB-months of standard persistent disk. Google's machine-type docs list the e2-micro as 2 vCPUs (a fractional 0.25 each) and 1 GB of memory, so it meets Ghost's floor and no more.

The catch for a blog is network: the free allowance is 1 GB of outbound transfer per month from North America, and anything past that is outside the free tier. It needs an active billing account, and Google can change the offering with 30 days' notice. Ghost's config docs also warn that Google Cloud blocks outbound port 25, which matters in the mail section below.

Fly.io

No free tier for new accounts. Fly's pricing page says "New organizations don't have a free tier or a monthly free usage allowance", offering only a $1 trial credit that lasts 7 days. A shared-cpu-1x machine with 1 GB of RAM is $6.70 a month in Ashburn and Secaucus, and volumes are $0.15 per GB per month. I found managed Postgres on the page but no managed MySQL, so Ghost would mean running MySQL yourself on a second machine: roughly $13.40 a month for two 1 GB machines, before volumes.

Render

Render's free instances aren't a fit for Ghost, and the free tier docs say why. A free web service spins down after 15 minutes without inbound traffic, has no persistent disk ("Paid services can preserve local filesystem changes by attaching a persistent disk, but Free web services cannot"), and can't send outbound traffic on ports 25, 465 or 587. Free Postgres databases expire after 30 days, and the page doesn't mention MySQL at all. Ghost needs MySQL 8 and a content folder that survives restarts, so I wouldn't try it.

Railway

Railway's plans page lists a Free plan with $1 of credit per month and 0.5 GB of RAM, under Ghost's 1 GB floor. Trial is a one-time $5 grant with 1 GB of RAM, and Hobby is $5 a month including $5 of usage. I haven't priced what a Ghost plus MySQL pair would consume, so I can't give a monthly total.

Cheap paid managed hosts

If a free tier is out, a "managed pod" is the other end of the spectrum. PikaPods lists Ghost from $3.30 a month, billed hourly from prepaid credit, with a minimum of 0.5 CPU, 1 GB RAM and 5 GB storage, managed updates, nightly encrypted backups to your own S3 storage (you set those up in the pod settings), and a $5 welcome credit. Elestio lists Ghost "starting at $11/mo" on a provider of your choice, with automated backups, SSL and updates handled for you, billed per hour. PikaPods says outright that built-in newsletter delivery on a hosted pod needs your own Mailgun account. Elestio's page doesn't mention newsletter sending, so ask them before you assume; Ghost's own rule means bulk mail goes through Mailgun either way.

Do Ghost newsletters really need Mailgun?

For bulk delivery, yes. Ghost's Mailgun FAQ says bulk delivery "requires a bulk mail API" and "Currently the only bulk mail API we support is Mailgun." It also says Ghost doesn't support bulk mail over plain SMTP, and that the team isn't going to add other bulk providers. If you never email posts to members, you can skip Mailgun entirely and ignore the newsletter settings. You can also use an external newsletter service and sync members to it through Zapier or an integration, since there's "no requirement to use Ghost's built in newsletter delivery feature."

Transactional email is separate. Sign-in links, password resets and member confirmations go through any SMTP provider you like, configured in a mail block in your config. Ghost's config docs have a warning I'd copy onto a sticky note: some hosting providers block outbound SMTP, with DigitalOcean named for ports 25, 465 and 587 and Google Cloud for port 25. If your mail port is blocked, transactional mail times out and members can't log in. Render's free tier blocks the same three ports. Test a real sign-in email before you announce the site.

So what does Mailgun cost? Its pricing page shows these plans:

  • Free: $0, capped at 100 emails per day, 1 custom sending domain, 1 day of log retention
  • Basic: from $15 a month, 10,000 emails, extra emails from $1.80 per 1,000
  • Foundation: $35 a month after a one-month free trial, 50,000 emails
  • Scale: $90 a month after a one-month free trial, 100,000 emails

The free plan is a daily cap, not a monthly one. A list of 100 people fits in one send; a list of 500 doesn't. I wouldn't assume Ghost will quietly spread a send across several days, so test that before you rely on it. Past a small list you're realistically on Basic: four newsletters a month to 2,000 members is 8,000 emails, inside Basic's 10,000. That's $15 a month for email alone, more than the $6 server underneath.

What does Stripe cost on a self-hosted Ghost?

Ghost itself takes nothing. Ghost's transaction fees help page says "Ghost charges 0% transaction fees" and "The only fees you'll need to pay are Stripe's own processing fees (2.9% + 30¢)." Your site connects to your own Stripe account (self-hosted needs HTTPS first), and Stripe's rates vary by country, so check Stripe's pricing.

It's the same on Ghost(Pro): the pricing page shows 0% from Ghost on Publisher and above, with processor fees still applying. Paid memberships aren't a reason to self-host or a reason not to. One nuance on the hosted side: the Starter plan doesn't include paid subscriptions at all, per its comparison table, so if you want to charge members you start at Publisher.

Who handles backups, upgrades and security patches?

You do, and this is the cost people forget to count. The update guide names three commands you'll learn well:

ghost check-update
ghost backup
ghost update

ghost update moves you to the latest version within your major release, and the docs say "if you want to be super safe, run ghost backup first." Majors need reading first: Ghost 6.0.0 dropped Node 18 and 20, so a server that was fine last year can need a Node upgrade before Ghost will start.

Backups are bigger than that one command. A working restore needs the MySQL data and the content folder together, stored off the server and tested once. PikaPods is explicit on its own listing that whole-server backups aren't a per-pod restore service, so keep your own copy.

Security patching has two layers: the OS and NGINX on a plain VPS, and Node, where Ghost's matrix shows minimums being raised to specific security releases. None of it is hard. It's the unquiet day (a failed update, a full disk, a certificate the renewal job missed) that eats an evening.

What's the real monthly cost, in dollars?

Let me lay out some scenarios using only numbers I read above. Domain registration is a separate cost that I haven't priced, and it applies to every self-hosted option (Ghost(Pro)'s Starter card lists a free custom domain).

  • Oracle Always Free plus Mailgun Free plus any SMTP provider: $0 for the infrastructure, with the reclamation and capacity risks above, and a 100-emails-a-day newsletter cap
  • Google e2-micro in a US region: $0 while you stay inside 1 GB of egress a month, billed at standard rates beyond it
  • DigitalOcean 1 GiB Droplet with Mailgun Free: $6 a month, newsletters capped at 100 a day
  • DigitalOcean 1 GiB Droplet with Mailgun Basic: $21 a month ($6 plus $15), up to 10,000 emails
  • PikaPods Ghost with Mailgun Basic: from $18.30 a month ($3.30 plus $15)
  • Elestio Ghost with Mailgun Basic: from $26 a month ($11 plus $15), assuming Ghost's Mailgun rule applies there
  • Fly.io, two 1 GB machines plus Mailgun Basic: roughly $28.40 a month before volumes ($13.40 plus $15)

The server is rarely the expensive line. Email is, once your list outgrows the free cap.

When does Ghost(Pro) cost less than self-hosting?

Ghost's pricing page lists three standard plans, all shown as billed yearly: Starter at $18 a month (own website, free custom domain, email newsletter), Publisher at $29 a month (3 staff users, custom themes, paid subscriptions, advanced analytics), and Business at $199 a month (15 staff users, priority support). The cards also show a monthly-billing toggle; I didn't capture monthly prices, so check the page. There's no free plan. Each plan has a "Try for free" button, though the page doesn't state a trial length. The page says "All plans include unlimited email sends with no restrictions", so there's no Mailgun account to run.

Now the arithmetic with your time in it. Compare Publisher at $29 with the DigitalOcean-plus-Mailgun Basic self-host at $21. The gap is $8 a month. If you value an hour of your time at $30, that $8 buys you 16 minutes a month, and one Node upgrade or one broken certificate renewal wipes that out. Compare Starter at $18 with the $6 server that has the free Mailgun tier: a $12 gap, which is 24 minutes at the same hourly rate. If you enjoy the sysadmin work, treat those minutes as zero and self-hosting wins on price. If you don't, the hosted plan is cheaper than it looks.

The other side is control: root access, any theme or integration your server can run, and no member cap you didn't set. The hosted page lists 1,000 members on the entry cards, though the Business card and the comparison table disagree, so confirm limits before you plan around them.

How do the alternatives compare?

"Free" usually means "cheap and low-maintenance", so here's the field, summarised from each vendor's own pages.

Self-hosted Ghost on your own VPS.

  • Strengths: MIT-licensed, full control, 0% Ghost fee on memberships, cheapest if your time is free
  • Weaknesses: MySQL 8 and Node version upkeep, Mailgun dependency for newsletters, no supported SQLite, you own every outage
  • Cost on the numbers above: $0 to about $21 a month plus a domain

Ghost(Pro).

  • Strengths: official managed hosting from the people who write Ghost, unlimited email sends on all plans, no servers
  • Weaknesses: $18 a month billed yearly at the entry point, and that entry plan has no paid subscriptions; less freedom than your own box
  • Cost: $18, $29 or $199 a month per the page, billed yearly

Managed one-click Ghost hosts (DigitalOcean Marketplace, PikaPods, Elestio).

  • Strengths: you keep the open-source Ghost and your own account, with some or all of the install and updates handled for you
  • Weaknesses: newsletters still need Mailgun (PikaPods says so; the other two follow Ghost's own rule), version pinning depends on the vendor, and a 1-Click image on a plain droplet is still your box to patch
  • Cost: DigitalOcean from $6 a month for the droplet, PikaPods from $3.30, Elestio from $11

WordPress, self-hosted. WordPress.org lists PHP 8.3 or greater, MariaDB 10.11+ or MySQL 8.0+, and HTTPS as its requirements.

  • Strengths: far larger plugin and theme ecosystem than Ghost, and MariaDB is accepted where Ghost insists on MySQL 8
  • Weaknesses: plugin and theme updates multiply your patching surface, and it's a PHP stack if your team lives in Node
  • Cost: the same server and mail arithmetic as above

VeloCMS. A hosted headless blog CMS built on Next.js and PocketBase. Per its pricing page, Pro is $9 a month (or $86.40 a year) with custom domain, newsletter with tag segmentation, membership and paywall with no VeloCMS fee, and store features, within 5 GB of storage, 5,000 subscribers and one site. Every plan has a 14-day trial that needs a card (unless you hold a cardless trial code), the first charge comes on day 15, and there is no free plan.

  • Strengths: no server, MySQL or Mailgun account to run, because it's hosted
  • Weaknesses: it's a newer product with a much smaller ecosystem than Ghost or WordPress, you can't self-host it, and it isn't a drop-in replacement for a Ghost install (I'm not claiming a one-click Ghost import)
  • Cost: $9, $29 or $69 a month by plan, per the pricing page

If your goal is specifically "run Ghost myself and pay as little as possible", VeloCMS isn't the answer. It's for people who've decided they'd rather not operate anything.

Which option fits which person?

  • You like servers and want the lowest bill: self-host Ghost on a small VPS, and budget the Mailgun line honestly
  • You want Ghost without the ops: PikaPods, Elestio, or Ghost(Pro) itself
  • You charge members and want least fuss: Ghost(Pro) Publisher, since Starter has no paid subscriptions
  • You need a huge plugin catalogue: WordPress, with eyes open about patching
  • You want one hosted login for blog, newsletter and membership and don't need Ghost's ecosystem: VeloCMS is one candidate
  • You want $0 and can tolerate risk: Oracle Always Free or the Google e2-micro, with backups kept off the machine

FAQ

Is Ghost open source? Yes. The code is released under the MIT licence, per the Ghost repository. Ghost and its logo are trademarks of Ghost Foundation Ltd.

Can I run Ghost on a 512 MB server? Ghost's docs say a server with at least 1 GB of memory, so a 512 MiB droplet is below the documented floor. I haven't tested it and wouldn't plan on it.

Do I have to use MySQL? For a supported production install, yes. The FAQ says "MySQL 8 is the only supported database in production," and the install guide specifies MySQL 8.0 or 8.4.

Do I need Mailgun to run Ghost? Only for Ghost's built-in bulk newsletter delivery. Without newsletters you can ignore it, and transactional email works over any SMTP provider.

Is the Docker install ready for production? Ghost labels the compose-based Docker install a preview. The standalone image can be used in production if you supply MySQL 8, HTTPS and a reverse proxy yourself.

Does self-hosting Ghost save money on Stripe fees? No. Ghost charges 0% transaction fees both ways, and Stripe's processing fees apply on both.

Last verified

Last verified: 2026-11-10

Sources

About the author

  • Building VeloCMS.org , A fast multilingual CMS for blogs and online stores. I write about headless CMS, Next.js, SEO and moving off WordPress and Shopify.

No comments yet. Be the first to comment.