Skip to content
Live $100 credit at signup, up to $300 total Offer ends December 31, 2026 Get started →

Ghost

Ghost is an open-source publishing platform for blogs, newsletters, and membership sites. It pairs a fast editor and built-in email delivery with a clean, theme-driven front end.

ComponentVersion
Ghost6.51.0
Node.js22.x
MySQL8.0
nginxLatest
Ubuntu24.04 LTS
ResourceMinimumRecommended
vCPU12
RAM2 GB4 GB
Storage20 GB40 GB

You can optionally set these when deploying Ghost from the marketplace. Leave GHOST_DB_PASSWORD blank to have a secure random value generated automatically.

VariableDescription
GHOST_URLFull site URL, for example https://blog.example.com
GHOST_DB_PASSWORDPassword for the MySQL ghost database user

If GHOST_URL is not set, the VM serves a placeholder page and leaves Ghost unconfigured until you provide a domain.

ssh ubuntu@<your-vm-ip>

On the first boot, a setup script creates the MySQL database, configures Ghost for your GHOST_URL, writes the nginx virtual host, and starts the site as a systemd service. This takes 1-2 minutes. Track progress:

journalctl -u ghost-first-boot.service -f

The login message (MOTD) confirms when Ghost is ready.

Open the admin area in a browser and create the first administrator account:

https://your-domain.com/ghost

The generated database credentials are written to a root-only file:

sudo cat /etc/ghost/credentials.txt

TLS is not configured automatically, because it requires your domain’s DNS to point at the VM first. Once that resolves, provision a free Let’s Encrypt certificate:

cd /var/www/ghost
ghost setup ssl

Ghost runs as a per-site systemd service named ghost_<hostname> (for example ghost_blog-example-com). Manage it from the install directory:

# Show the running instance and its service name
cd /var/www/ghost && ghost ls
# Restart, stop, and start
ghost restart
ghost stop
ghost start

Install directory: /var/www/ghost. Content (themes, images, and data) lives under /var/www/ghost/content.

Ports 80 and 443 are open on the VM’s network interface. UFW is enabled and allows SSH (port 22), HTTP (80), and HTTPS (443).

For production use, complete the Let’s Encrypt step above so the site is served over HTTPS, and restrict SSH access to known IP ranges.

Last updated: