Ghost is the cleanest publishing platform going, and it's fully open source, so you can run it yourself. The interesting part is that the savings are much smaller than with WordPress: Ghost Pro starts at $15/mo, and a properly-sized self-hosted Droplet with backups lands around $14. That changes the calculation considerably.
Self-host Ghost if you want control, custom themes and integrations, or you're running several publications on one server. If you're running a single blog and the only reason you're here is to save money, be aware you'd save roughly a dollar a month over Ghost Pro while taking on all the maintenance. That's a bad trade for most people, and we'd rather say so.
| Setup | Droplet | + weekly backups | Monthly total |
|---|---|---|---|
| Minimum viable | $6 (1 GB / 1 vCPU) | $1.20 | $7.20 |
| Recommended single site | $12 (2 GB / 1 vCPU) | $2.40 | $14.40 |
| Busy publication | $18 (2 GB / 2 vCPUs) | $3.60 | $21.60 |
| Several publications | $24 (4 GB / 2 vCPUs) | $4.80 | $28.80 |
Ghost runs Node.js and MySQL on the same box, which is heavier than it sounds — 1 GB works but leaves little headroom, and Node processes that run out of memory get killed. 2 GB is the realistic starting point. For comparison, Ghost Pro starts at $15/mo and includes hosting, updates, backups and support.
| Component | Role |
|---|---|
| Ghost (latest) | The publishing platform itself. |
| Node.js 22.x | Ghost's runtime. Major Node upgrades are your job. |
| MySQL 8.0 | The database, running locally on the same Droplet. |
| Nginx | Web server and reverse proxy in front of Ghost. |
| Ghost-CLI | How you update, restart, and troubleshoot Ghost. |
Roughly half an hour, most of it DNS propagation.
Unlike the WordPress image, Ghost really wants a registered domain before setup — SSL is requested during the install. Create the Droplet, then add an A record pointing your domain at its IP and let DNS propagate before you run the setup prompts.
Create a Droplet from the Marketplace Ghost image, 2 GB or larger, with an SSH key added at creation.
Connect with ssh root@your_droplet_ip. Ghost-CLI updates itself, then asks for your domain and an email address used only for the SSL certificate. Press enter and it configures Nginx, requests the certificate, and starts Ghost.
Go to https://yourdomain.com/ghost and create the owner account right now. Until you do, the setup screen is open to anyone who finds the site, and whoever gets there first owns your publication and, in practice, your server. This is the single most important step on this page and it's easy to postpone. Don't.
Automated Droplet backups are off by default and cost 20% of the Droplet price weekly, 30% daily. Ghost also has its own export in the admin area — use both, since a Ghost export doesn't capture your uploaded images or server config.
ghost-mgr with sudo -i -u ghost-mgr, then run ghost update.ghost doctor for diagnosing problems.Self-host if you want to modify themes freely, need integrations Ghost Pro doesn't allow, run multiple publications on one server, or simply want to own the stack. Multiple sites is where the economics genuinely favour self-hosting — three publications on one $24 Droplet beats three Ghost Pro subscriptions comfortably.
Use Ghost Pro if you're running one publication and want to write rather than administer. At $15/mo it's within a couple of dollars of doing it yourself, and the money goes to the people who make Ghost, which keeps the open-source project funded. That's a reasonable thing to want.
Yes. Export your content as JSON from the old admin panel, import it into the new one, then re-upload your images — the JSON export references images but doesn't contain them. Themes need reinstalling separately.
Only once you connect a bulk email provider. Ghost uses Mailgun for newsletter sending, and you'll need your own account. Transactional email for logins can go through any SMTP provider. Budget for this — it's the hidden cost of self-hosting Ghost.
Technically yes, practically don't. Both want port 80 and 443, both want a database, and debugging the resulting Nginx configuration is not a good use of an evening. Use separate Droplets or separate containers.
sudo -i -u ghost-mgr then ghost update. Take a backup first — Ghost updates are usually clean, but "usually" is doing work in that sentence.
It runs, and a low-traffic blog may be fine. But Node plus MySQL on 1 GB has very little headroom, and the failure mode is the kernel killing a process rather than a graceful slowdown. Adding a swap file helps. 2 GB avoids the question.
Ghost from ~$14/mo self-hosted
A 2 GB Droplet with weekly backups. One-click image, no manual install.
Get started with DigitalOceanAffiliate link — we may earn a commission at no extra cost to you.