How to Install Ghost: The Complete Guide for 2026

Step-by-step guide to install Ghost CMS. Covers Ghost(Pro) managed hosting, self-hosting on Ubuntu/DigitalOcean, Docker, and local development setup.

Quick Start: Which Install Method Is Right for You?

Ghost can be installed in four ways. The right choice depends on your technical comfort level and budget:

MethodBest ForMonthly CostTechnical SkillSetup Time
Ghost(Pro)Most publishers$18-199/moNone5 minutes
DockerDevelopers$4-12/mo (VPS)Intermediate30 minutes
Ubuntu CLISysadmins$6-12/mo (VPS)Advanced45 minutes
LocalTheme developersFreeIntermediate15 minutes

Our recommendation: Start with Ghost(Pro) unless you have a specific reason to self-host. It includes managed email delivery, automatic updates, CDN, SSL, and backups. You can always migrate to self-hosted later.

If you’re evaluating hosting options in depth — provider comparisons, pricing breakdowns, and long-term maintenance — see our Ghost self-hosting guide.

Install Ghost on Ghost(Pro)

Ghost(Pro) is the official managed hosting from the Ghost team. Setup takes about 5 minutes.

Step 1: Choose a Plan

Current Ghost(Pro) pricing (February 2026):

PlanPriceMembersStaff UsersNotes
Starter$18/mo1,0001Free members only (no paid subscriptions)
Publisher$29/mo1,0003Paid subscriptions, custom sending domain
Business$199/mo10,000UnlimitedPriority support, 10 tiers, white-label

All plans include SSL, CDN, daily backups, and automatic Ghost updates.

Important: The Starter plan does not support paid subscriptions — that was removed in the July 2025 pricing update. If you plan to monetize through Ghost membership, start with Publisher.

Step 2: Create Your Site

  1. Go to ghost.org and click Start free trial
  2. Enter your site name, email, and password
  3. Your Ghost instance is provisioned instantly at yoursite.ghost.io
  4. Access Ghost Admin at yoursite.ghost.io/ghost

Step 3: Connect a Custom Domain

In Ghost Admin: Settings → Domain → Connect domain

  1. Enter your domain name (e.g., yourdomain.com)
  2. Ghost provides DNS records to add at your domain registrar
  3. Add the CNAME or A record
  4. Click Activate — SSL is provisioned automatically

DNS propagation can take up to 48 hours, though it usually completes within a few hours.

Step 4: Configure Your Site

Once your domain is connected:

  1. Settings → General — set your site title, description, and timezone
  2. Settings → Design — upload your logo and icon
  3. Settings → Membership — configure free/paid tiers (see our membership guide)
  4. Settings → Email newsletter — set up your newsletter (see our newsletter guide)

Install Ghost with Docker

Docker Compose is now the official primary install method for self-hosted Ghost. Ghost-CLI is becoming legacy as Docker provides better reproducibility, easier updates, and simpler backups.

Ghost 6 requirements:

  • Docker Engine 20.10+
  • Docker Compose v2
  • 1 GB RAM minimum (2 GB+ recommended with ActivityPub)

Quick Docker Setup

Create a docker-compose.yml file:

services:
ghost:
image: ghost:6-alpine
restart: always
ports:
- "2368:2368"
environment:
NODE_ENV: production
database__client: mysql
database__connection__host: mysql
database__connection__user: ghost
database__connection__password: ${MYSQL_PASSWORD}
database__connection__database: ghost
url: https://yourdomain.com
volumes:
- ghost-content:/var/lib/ghost/content
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ghost
MYSQL_USER: ghost
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
volumes:
ghost-content:
mysql-data:

Create a .env file (never commit this to version control):

MYSQL_PASSWORD=your-secure-password-here
MYSQL_ROOT_PASSWORD=your-root-password-here

Start Ghost:

Terminal window
docker compose up -d

Ghost is now running at http://localhost:2368. Access admin at http://localhost:2368/ghost.

For a production-ready Docker setup with Caddy (automatic SSL), network isolation, and security hardening, see our Ghost self-hosting guide — it covers the full Docker Compose stack with Caddy reverse proxy, proper credential management, and backup strategies.

Install Ghost on Ubuntu/DigitalOcean

The Ghost-CLI method installs Ghost directly on an Ubuntu server. While Docker is now the recommended path, Ghost-CLI remains widely used and well-documented.

Requirements:

  • Ubuntu 22.04 or 24.04
  • Node.js 22 LTS (not 18 or 20 — Ghost 6 requires Node 22)
  • MySQL 8.0+ (not MariaDB)
  • NGINX (installed by Ghost-CLI)
  • At least 1 GB RAM
  • A non-root user with sudo privileges

Step 1: Provision a Server

DigitalOcean ($6/month for 1 GB RAM):

  1. Create a Droplet: Ubuntu 24.04, Basic, $6/month
  2. Add your SSH key
  3. SSH into the server: ssh root@your-server-ip

Step 2: Set Up the Server

Terminal window
# Create a non-root user
adduser ghostuser
usermod -aG sudo ghostuser
su - ghostuser
# Install Node.js 22 LTS
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install MySQL 8.0
sudo apt-get install -y mysql-server
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';"
# Install NGINX
sudo apt-get install -y nginx
sudo ufw allow 'Nginx Full'

Step 3: Install Ghost-CLI and Ghost

Terminal window
# Install Ghost-CLI globally
sudo npm install ghost-cli@latest -g
# Create and enter the Ghost directory
sudo mkdir -p /var/www/ghost
sudo chown ghostuser:ghostuser /var/www/ghost
cd /var/www/ghost
# Install Ghost
ghost install

The installer prompts you for:

  • Blog URL (your domain with https://)
  • MySQL hostname (localhost)
  • MySQL username and password
  • Ghost database name
  • Whether to set up NGINX
  • Whether to set up SSL (via Let’s Encrypt)
  • Whether to set up systemd (for auto-start on reboot)

Answer yes to all for a standard production setup.

Step 4: Verify

Visit https://yourdomain.com — your Ghost site is live. Access admin at https://yourdomain.com/ghost.

Install Ghost Locally for Development

Local installation is ideal for theme development and testing. Ghost provides a simplified installer for development use.

Terminal window
# Install Ghost-CLI
npm install ghost-cli@latest -g
# Create a directory for Ghost
mkdir ghost-local && cd ghost-local
# Install Ghost in development mode
ghost install local

This installs Ghost with SQLite (no MySQL needed) and starts it on http://localhost:2368. Ghost Admin is at http://localhost:2368/ghost.

Common commands:

Terminal window
ghost start # Start Ghost
ghost stop # Stop Ghost
ghost restart # Restart Ghost
ghost log # View logs

Using Docker (Alternative)

If you prefer Docker for local development:

Terminal window
docker run -d \
--name ghost-local \
-p 2368:2368 \
-e NODE_ENV=development \
-e url=http://localhost:2368 \
ghost:6-alpine

Access Ghost at http://localhost:2368.

Install a Ghost Theme

Once Ghost is running, the default Casper theme is active. To install a premium theme:

From Ghost Admin

  1. Go to Settings → Design → Change theme
  2. Click Upload theme
  3. Select the .zip file of your theme
  4. Click Activate

Via Admin API (Advanced)

For automated deployments, use the Ghost Admin API. Authentication requires generating a short-lived JWT from your Admin API key (found in Settings → Integrations → Custom). The key format is id:secret — you split these and sign a JWT with the secret.

Terminal window
# Generate a JWT token (requires a JWT library or script)
# See Ghost's Admin API docs for token generation examples
curl -X POST "https://yourdomain.com/ghost/api/admin/themes/upload/" \
-H "Authorization: Ghost $JWT_TOKEN" \
-F "file=@theme.zip"

For most publishers, uploading via Ghost Admin (Settings → Design → Upload theme) is simpler. The API approach is useful for CI/CD pipelines and automated theme deployment.

Choosing a Theme

The default Casper theme is functional but generic. A premium theme gives your publication a distinctive identity, custom membership pages, and features like dark mode, table of contents, and advanced layouts.

Your theme controls how your site looks, how membership pages work, and which editor features get custom styling. We build Ghost themes that pass GScan validation with 100/100 scores and include membership pages, dark mode, and full translation support out of the box.

Post-Installation Setup

After installing Ghost, complete these essential configuration steps:

Custom Domain and SSL

  • Ghost(Pro): Domain connection is built into the admin panel
  • Self-hosted with Docker/Caddy: Caddy provides automatic SSL via Let’s Encrypt
  • Self-hosted with NGINX: Ghost-CLI configures Let’s Encrypt during installation

Email Configuration

Ghost needs email for member signups, magic login links, and newsletters.

  • Ghost(Pro): Already configured — no action needed
  • Self-hosted: Configure Mailgun for bulk email delivery. See the email setup section in our self-hosting guide

SEO Basics

Ghost includes solid SEO defaults out of the box:

  • Automatic sitemap generation at /sitemap.xml
  • Clean URL structure
  • Meta tags and Open Graph support
  • Structured data (JSON-LD) for articles

Integrations

Set up essential integrations in Settings → Integrations:

  • Google Analytics or Plausible for traffic tracking (see our analytics guide)
  • Zapier for workflow automation
  • Custom integrations via the Ghost Content API and Admin API

Common Questions

Which version of Node.js does Ghost 6 require?

Ghost 6 requires Node.js 22 LTS. Many older tutorials reference Node 18 or 20 — these are no longer supported. Check your version with node --version.

Can I use MariaDB instead of MySQL?

No. Ghost officially supports MySQL 8.0+ only. MariaDB may work for basic operations but is not tested or supported.

Is AMP still supported?

No. AMP was deprecated in Ghost 6. If your previous Ghost installation used AMP, those pages will return 404s after upgrading.

Can I migrate from Ghost(Pro) to self-hosted (or vice versa)?

Yes. Ghost provides built-in export/import tools in Settings → Import/Export. Content, members, and settings transfer cleanly. Themes can be downloaded and re-uploaded. The main thing that doesn’t transfer is Stripe subscription relationships — paid members may need to re-subscribe.

How do I update Ghost?

  • Ghost(Pro): Updates happen automatically
  • Ghost-CLI: Run ghost update in your Ghost directory
  • Docker: Update the image tag in docker-compose.yml and run docker compose pull && docker compose up -d

Always back up before updating.