6 min read

Self-Hosting Ghost CMS on a VPS: What It Actually Takes

Ghost Theme
Ghost Theme May 7, 2026
Self-Hosting Ghost CMS on a VPS: What It Actually Takes

Ghost(Pro) handles all the technical stuff for you, server maintenance, backups, security patches, scaling, for a monthly fee. Self-hosting flips that arrangement: you do the technical work yourself, and in exchange you pay a lot less, often a fraction of what a managed plan costs.

That trade-off is genuinely worth it for plenty of people. It's also genuinely not worth it for plenty of others. Before walking through the actual setup, let's be honest about who this is really for.

Is Self-Hosting Right for You?

Self-hosting Ghost makes sense if:

  • You're comfortable with a command line, even at a basic level
  • You don't mind being responsible for security updates and backups
  • You want to minimize ongoing costs, especially for a smaller site
  • You're already running other self-hosted services and have a workflow for managing servers

It's probably not worth it if:

  • You want to focus entirely on writing, with zero technical overhead
  • You don't have time to handle updates, monitoring, or troubleshooting when something breaks
  • Your time is worth more than the money you'd save versus a managed plan

That last point matters more than people expect. Self-hosting isn't actually free. You're paying with your own time instead of money, and for some people that trade isn't worth it once their site starts mattering to their income.

What You'll Need Before Starting

Regardless of which installation method you choose, you'll need:

  • A VPS. Ghost's documented minimum is around 1 vCPU and 1 to 2 GB of RAM for a small site. If you're running a newsletter going out to a few thousand subscribers, plan for 2 vCPUs and 4 GB of RAM to keep things comfortable, especially during send spikes.
  • A domain name, with DNS pointed at your server.
  • An SMTP provider for email. Ghost doesn't handle bulk newsletter sending on its own when self-hosted. Mailgun is Ghost's most commonly recommended provider, though Postmark and Amazon SES work too.
  • Basic comfort with SSH. You'll be typing commands, not clicking through a graphical dashboard, at least for the initial setup.

Two Official Paths: Ghost-CLI and Docker

Ghost currently supports two installation routes, and it's worth understanding both before picking one.

Ghost-CLI: The Long-Standing, Fully Supported Method

Ghost-CLI is the original, officially recommended command-line tool for installing and maintaining a self-hosted Ghost site. It was built specifically to make setup and updates as simple as possible for people who don't want to use Ghost(Pro), and it works against a specific, documented system stack: Ubuntu LTS, Nginx, MySQL, and Node.js. Ghost's team only officially supports this exact stack, so straying from it (different OS, different web server, different database) tends to mean you're on your own if something breaks.

A basic install looks roughly like this on a fresh Ubuntu server:

sudo apt update && sudo apt upgrade -y
sudo adduser ghost-user
sudo usermod -aG sudo ghost-user

From there, you'd install Node.js, MySQL, and Nginx, then install Ghost-CLI itself:

npm install -g ghost-cli@latest

And run the actual install from inside a new directory for your site:

ghost install

This single command handles downloading Ghost, setting up Nginx, configuring SSL through Let's Encrypt, and registering Ghost as a system service so it restarts automatically if your server reboots. It's genuinely one of the smoother CLI installation experiences out there, specifically because Ghost narrowed its supported stack down to one well-tested combination rather than trying to support everything.

Updating later is just as simple:

ghost update

Docker Compose: The Newer, Officially Previewed Option

With the launch of Ghost 6.0, the Ghost team began previewing a new set of tooling built around Docker Compose. The idea behind this shift is architectural: Ghost has been adding features like ActivityPub (its social web integration) and built-in web analytics, and rather than bundling everything into one increasingly complex application, these are being built as separate services that run alongside Ghost. Docker Compose handles the job of managing those services and their dependencies together, which keeps Ghost's own core simple while still letting self-hosters opt into the newer features.

This path is worth considering if you specifically want those newer features, or if you're already comfortable with Docker and run other self-hosted services in containers. It's officially supported, but it's newer than Ghost-CLI, so documentation and community troubleshooting threads are less extensive right now. A few practical notes if you go this route:

  • Standard Ghost-CLI commands like install, setup, and update aren't meant to be used inside the Docker image; updates are handled by pulling a new image version instead.
  • By default, Ghost's Docker image uses SQLite, which is fine for smaller or development sites, but a production setup with real traffic generally calls for running MySQL as a separate container alongside it.
  • You'll need a reverse proxy (commonly Nginx or Caddy) in front of Ghost to handle HTTPS termination, since the Ghost container itself doesn't manage SSL certificates for you.

If you're starting fresh today and don't have a strong reason to need the newer social or analytics features, Ghost-CLI on the documented stack remains the more battle-tested choice. If you're building out a broader self-hosted setup in Docker already, the new Compose tooling fits naturally into that workflow.

Setting Up Email Delivery

This step trips up more people than the actual Ghost installation does. Self-hosted Ghost doesn't include its own email-sending infrastructure for newsletters, so you'll need to connect a transactional email provider.

The general steps look like this:

  1. Sign up for an email provider (Mailgun is the most common pairing with Ghost).
  2. Verify your sending domain by adding the DNS records they give you (SPF, DKIM, and usually a tracking CNAME).
  3. Add your provider's API credentials to Ghost's configuration, either through environment variables or your config file, depending on which install method you used.
  4. Send a test newsletter to yourself before sending to your real list, and check that it doesn't land in spam.

Skipping the DNS verification step is the single most common reason self-hosted newsletters end up in spam folders. It's tedious, but it's not optional if you want your emails actually reaching inboxes.

Keeping Your Site Running Smoothly

Once everything's installed, self-hosting becomes an ongoing, low-but-real maintenance job. A few habits that prevent most problems:

  • Back up your database and content regularly, ideally automated rather than something you remember to do manually. If you're using MySQL, a simple scheduled dump job covers most of this. If you're on Docker, back up your persistent volumes the same way.
  • Keep your OS patched. Regular apt update && apt upgrade cycles (or your distribution's equivalent) close known security holes before they become a problem.
  • Renew SSL certificates before they expire. Ghost-CLI installs typically set up automatic renewal through Let's Encrypt, but it's worth periodically confirming it's actually running rather than assuming.
  • Update Ghost itself periodically, rather than letting it sit on an old version indefinitely. Security and performance fixes ship regularly, and large version jumps tend to be more painful than smaller, more frequent updates.
  • Monitor basic uptime. A free tool that pings your site and alerts you if it goes down gives you a head start on fixing problems before readers notice.

Is It Actually Cheaper?

Usually, yes, but the gap depends heavily on your email volume, since that's the cost most people forget to account for upfront.

A small VPS suitable for a modest Ghost site typically runs somewhere in the $5 to $12 per month range. Add a transactional email provider, and for low-to-moderate sending volumes (a few thousand emails a month), that often adds only a few more dollars. Stack those together, and you're frequently paying noticeably less than even Ghost's entry-level managed plan.

That gap narrows, and can even reverse, once your newsletter sending volume climbs into the tens of thousands of emails per month, since pay-as-you-go email providers scale their pricing with volume. At that point, a managed plan with unlimited sends built in can end up cheaper than the email costs alone on a self-hosted setup. It's worth running the actual math for your expected list size and sending frequency before assuming self-hosting automatically wins on price.

The Honest Trade-Off

Self-hosting Ghost isn't hard in the way people sometimes assume, the installation itself, especially through Ghost-CLI, is genuinely well designed. What it actually costs you is ongoing attention: patching, backups, monitoring, and the occasional troubleshooting session when something doesn't update cleanly.

If that kind of upkeep doesn't bother you, or you're already managing other self-hosted infrastructure, self-hosting Ghost is a solid way to get the full platform for a fraction of the managed price. If server maintenance sounds like a chore you'd rather never think about, the money you'd save probably isn't worth the time you'd spend keeping things running. Either choice gets you the same Ghost, the difference is purely in who's holding the pager when something goes wrong.


Ghost Theme

Written by

Ghost Theme

View all posts →

Build something beautiful

Your dream publication, today.

Join 5,000+ creators who trust our themes. Get every theme — plus all future releases — for one simple price.

30-day money back guarantee · Cancel anytime