Ghost is a clean, fast, open-source publishing platform built on Node.js. Creators love it for the writing experience, built-in memberships, and newsletters. But hosting Ghost has specific requirements that catch people out: it's a long-running Node server (not static), it needs a MySQL 8 database in production, and it needs durable storage for uploaded images. Get those right and Ghost is a joy to run. Here's a fair 2026 guide.
What Ghost actually requires in production
- A persistent Node.js process — Ghost serves the admin, the API, and (by default) the front-end. It is not a static site.
- MySQL 8 — Ghost officially requires MySQL 8 for production (SQLite is for local dev only).
- Durable file storage — uploaded images go to
content/imageson the filesystem by default. On ephemeral container filesystems, those disappear on redeploy unless you use persistent storage or a storage adapter (S3-compatible). - Outbound email — for member signups and newsletters (Mailgun is Ghost's documented bulk-email provider).
- A reverse proxy + TLS — for the public site.
The storage point is the single biggest self-hosting gotcha: a container that resets its filesystem on deploy will lose all uploaded images unless you configure persistent volumes or an object-storage adapter.
Hosting paths at a glance
| Option | Effort | MySQL | Image storage | Notes |
|---|---|---|---|---|
| Ghost(Pro) | None (managed) | Handled | Handled | Official; funds Ghost dev |
| PandaStack | Low | Managed MySQL 8.x | Persistent volume / S3 adapter | Container + bundled DB |
| DigitalOcean Droplet | High | You install | Local disk / Spaces | Full control, full ops |
| Render | Medium | Managed | Persistent disk | Mature PaaS |
| Generic VPS | High | You install | You configure | Cheapest, most work |
Ghost(Pro) — the managed official option
The simplest path is Ghost(Pro), the official managed hosting from the Ghost team. It handles MySQL, storage, CDN, upgrades, and email, and your subscription directly funds Ghost's open-source development. If you want zero infrastructure work and don't mind the price, it's the obvious choice — and supporting the project is a genuine plus. The reasons to self-host are cost at scale, control, or consolidating Ghost with your other apps.
PandaStack
For self-hosting Ghost without operating MySQL or worrying about image loss, PandaStack covers the tricky parts. Deploy the official Ghost container image, provision a managed MySQL (8.x), and the connection details are available to Ghost's config; backups are scheduled.
Why it fits Ghost:
- Managed MySQL 8.x — Ghost's required production database, with scheduled and manual backups, so you don't run MySQL yourself.
- Container deployment of the official Ghost image, with automatic SSL and a custom domain.
- Solving the image-storage gotcha — use a persistent volume or configure an S3-compatible storage adapter so uploaded images survive redeploys (don't rely on the ephemeral container filesystem).
- Email — Ghost uses Mailgun for bulk newsletters; configure it via env/config.
Configure Ghost via environment variables, e.g.:
url=https://blog.yourdomain.com
database__client=mysql
database__connection__host=...
database__connection__user=...
database__connection__password=...
database__connection__database=ghost
mail__transport=SMTP
mail__options__service=MailgunHonest caveats: Ghost is stateful in two ways (the MySQL DB and uploaded files), so you must configure durable storage for images — a plain stateless container will lose them. Run Ghost on an always-on tier, not the scale-to-zero free tier, so the admin and members site stay responsive. Free-tier databases are dev/hobby-sized; for a real blog with members, size the MySQL appropriately. PandaStack is newer with a growing ecosystem.
DigitalOcean Droplet
The traditional self-host: a Droplet with the official ghost-cli, which scaffolds Nginx, MySQL, and Let's Encrypt for you. Full control and low fixed cost, but you own OS patching, MySQL, backups, and upgrades. DigitalOcean even publishes a Ghost 1-Click image. Great for tinkerers; real ongoing maintenance.
Render
Render can host the Ghost container with a managed database and a persistent disk for images, with predictable per-instance pricing. A solid managed-PaaS middle ground between Ghost(Pro) and a raw VM.
Generic VPS
The cheapest option is any low-cost VPS with ghost-cli. Maximum savings, maximum responsibility — you handle everything. Fine if you enjoy sysadmin work and your blog's uptime isn't business-critical.
How to choose
- Want zero ops + support the project → Ghost(Pro).
- Want to self-host with a managed MySQL and bundled platform → PandaStack (always-on tier, durable image storage).
- Want full control at low fixed cost → DigitalOcean Droplet with ghost-cli.
- Want a managed PaaS middle ground → Render.
- Cheapest possible, DIY → generic VPS.
Whatever you pick, nail the two stateful pieces: a real MySQL 8 with backups, and durable image storage. Those are where self-hosted Ghost setups most often go wrong.
References
- Ghost self-hosting docs: https://ghost.org/docs/install/
- Ghost(Pro): https://ghost.org/pricing/
- Ghost configuration reference: https://ghost.org/docs/config/
- Ghost on Docker: https://hub.docker.com/_/ghost
- DigitalOcean Ghost 1-Click: https://marketplace.digitalocean.com/apps/ghost
---
Self-hosting Ghost? PandaStack runs the official container, provides a managed MySQL 8 with backups, and handles SSL and custom domains — free to start at https://dashboard.pandastack.io. Remember to configure durable image storage and an always-on tier.