Ghost VPS
Ghost's own Docker setup (Ghost, MySQL 8 and Caddy) prepared on your server. You add your mail service, run one command with your domain, and Ghost starts with HTTPS and an owner account only you know.
Who it suits
Writers and small publications who want a fast blog with built-in newsletters and paid memberships, on their own server. Ghost(Pro) is the managed alternative and funds the project. If you want plugins and themes by the thousand, WordPress has the bigger ecosystem.
Which plan
Budget (1 vCPU, 2 GB) runs a personal blog: Ghost's Docker guide uses a 1 CPU, 2 GB server as its example. Choose Standard for a busy site, or if you turn on Ghost's optional ActivityPub and analytics services, which add containers.
What we install
We clone Ghost's ghost-docker repository to /opt/ghost, generate its database passwords and pull its images. Ghost needs a domain and working email before it can run, so it starts when you run vps9-https with your domain and email: its Caddy gets the certificate, and the owner account is created with a generated password in /root/ghost-admin.txt.
- git
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
- git
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
From order to ready
- Server ready. We email you when the server is running, and you can log in with SSH. The installer starts on that same first boot.
- Installer running. It logs to
/var/log/vps9-setup.log;tail -fit to watch. - Application ready.
/var/lib/vps9-setup.exitappears when the installer has finished, holding 0 if it worked. The install is done when /opt/ghost holds Ghost's compose.yml and .env and the images are pulled. Ghost is ready aftervps9-https, when https://<your domain>/ghost/ shows the login page.
What you still do
- Put your mail service's SMTP details in /opt/ghost/.env (the mail__ lines). Ghost needs email to log you in, so it won't start without it.
- Point your domain at the server and allow ports 80 and 443 in the panel firewall.
- Run
vps9-https blog.example.com you@example.comwith your domain and email. Ghost starts and your owner login is written to /root/ghost-admin.txt. - Log in at https://blog.example.com/ghost/ and change the site title and your name in Settings.
Exposure and security
Nothing runs until you start it. Then Caddy listens on 80 and 443, and Ghost and MySQL stay on Docker's internal network. Ghost's setup page would make its first visitor the owner; here vps9-https creates the owner through Ghost's setup API from inside the server before the site is reachable. Staff accounts are invite-only after that.
Backups and upgrades
Ghost labels its Docker setup a preview. Its update steps are cd /opt/ghost && git pull && docker compose pull && docker compose up -d; read the release notes first. We turn on the operating system's automatic security updates. Back up /opt/ghost/data (Ghost's content and the MySQL data) and /opt/ghost/.env off the server: stop the stack for a consistent copy, and keep Ghost's own export (Settings, Import/Export) as well. We run the hardware, the network and the first-boot install; after that, Ghost is yours to run, and we don't manage, update or back it up for you.
Ghost questions
Why does Ghost need email before it starts?
Ghost's own configuration says transactional email is required for logins, staff invites and password resets. Any SMTP service works (Mailgun, Postmark, Amazon SES or your own mail server). It's separate from newsletter sending.
Can I send newsletters?
Yes, newsletters are built into Ghost. Bulk newsletter sending goes through Mailgun, set up in Ghost's settings; the SMTP details in .env are only for transactional mail such as logins.
Why Docker and not Ghost-CLI?
Ghost recommends Ghost-CLI on Ubuntu with MySQL and nginx, and offers Docker as a preview that is also the only way to run its self-hosted analytics and ActivityPub. We use Ghost's Docker setup because it runs on every distribution we offer and keeps Ghost, MySQL and Caddy together. Ghost includes a script (scripts/migrate.sh) for moving a Ghost-CLI site into it.
Can I move an existing Ghost site here?
Yes. Export your content from the old site (Settings, Import/Export), import it into the new one, and copy your images from the old content/images folder into /opt/ghost/data/ghost/images.
Order it from your terminal
$ vps9 servers create --plan budget --image ubuntu-24.04 --app ghost --hostname web-1 --key key_8f2c{
"plan": "budget",
"image": "ubuntu-24.04",
"hostname": "web-1",
"app": "ghost"
}Related apps
Or browse all 28 one-click apps.