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:
| Method | Best For | Monthly Cost | Technical Skill | Setup Time |
|---|---|---|---|---|
| Ghost(Pro) | Most publishers | $18-199/mo | None | 5 minutes |
| Docker | Developers | $4-12/mo (VPS) | Intermediate | 30 minutes |
| Ubuntu CLI | Sysadmins | $6-12/mo (VPS) | Advanced | 45 minutes |
| Local | Theme developers | Free | Intermediate | 15 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):
| Plan | Price | Members | Staff Users | Notes |
|---|---|---|---|---|
| Starter | $18/mo | 1,000 | 1 | Free members only (no paid subscriptions) |
| Publisher | $29/mo | 1,000 | 3 | Paid subscriptions, custom sending domain |
| Business | $199/mo | 10,000 | Unlimited | Priority 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
- Go to ghost.org and click Start free trial
- Enter your site name, email, and password
- Your Ghost instance is provisioned instantly at
yoursite.ghost.io - Access Ghost Admin at
yoursite.ghost.io/ghost
Step 3: Connect a Custom Domain
In Ghost Admin: Settings → Domain → Connect domain
- Enter your domain name (e.g.,
yourdomain.com) - Ghost provides DNS records to add at your domain registrar
- Add the CNAME or A record
- 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:
- Settings → General — set your site title, description, and timezone
- Settings → Design — upload your logo and icon
- Settings → Membership — configure free/paid tiers (see our membership guide)
- 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-hereMYSQL_ROOT_PASSWORD=your-root-password-hereStart Ghost:
docker compose up -dGhost 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):
- Create a Droplet: Ubuntu 24.04, Basic, $6/month
- Add your SSH key
- SSH into the server:
ssh root@your-server-ip
Step 2: Set Up the Server
# Create a non-root useradduser ghostuserusermod -aG sudo ghostusersu - ghostuser
# Install Node.js 22 LTScurl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -sudo apt-get install -y nodejs
# Install MySQL 8.0sudo apt-get install -y mysql-serversudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';"
# Install NGINXsudo apt-get install -y nginxsudo ufw allow 'Nginx Full'Step 3: Install Ghost-CLI and Ghost
# Install Ghost-CLI globallysudo npm install ghost-cli@latest -g
# Create and enter the Ghost directorysudo mkdir -p /var/www/ghostsudo chown ghostuser:ghostuser /var/www/ghostcd /var/www/ghost
# Install Ghostghost installThe 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.
Using Ghost-CLI (Recommended)
# Install Ghost-CLInpm install ghost-cli@latest -g
# Create a directory for Ghostmkdir ghost-local && cd ghost-local
# Install Ghost in development modeghost install localThis installs Ghost with SQLite (no MySQL needed) and starts it on http://localhost:2368. Ghost Admin is at http://localhost:2368/ghost.
Common commands:
ghost start # Start Ghostghost stop # Stop Ghostghost restart # Restart Ghostghost log # View logsUsing Docker (Alternative)
If you prefer Docker for local development:
docker run -d \ --name ghost-local \ -p 2368:2368 \ -e NODE_ENV=development \ -e url=http://localhost:2368 \ ghost:6-alpineAccess 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
- Go to Settings → Design → Change theme
- Click Upload theme
- Select the
.zipfile of your theme - 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.
# Generate a JWT token (requires a JWT library or script)# See Ghost's Admin API docs for token generation examplescurl -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 updatein your Ghost directory - Docker: Update the image tag in
docker-compose.ymland rundocker compose pull && docker compose up -d
Always back up before updating.
Recommended Themes
These themes excel at the features discussed in this article.
Luxe Themes
