Photo by Bram Naus / Unsplash

Ghost - A better platform for blogging

Ghost Oct 29, 2025

Why Ghost is the Perfect WordPress Alternative for Bloggers

Nowadays, there are many platforms available for bloggers, but many still use WordPress as their primary platform. Although WordPress has many pros, we shouldn't ignore the new platforms that are making blogging easier than ever.


Introducing Ghost

Ghost is a simple platform with a modern and minimalist design built solely for blogging—unlike WordPress, which can power a wide range of websites. Ghost is an excellent alternative to WordPress that allows you to host your website on your own server with many customizable themes, all free of cost.

Ghost's features are just as minimalist as its design, with simplified create, edit, and post functionality. Things like scheduling posts, adding tags and members, and even newsletter subscriptions are available in Ghost with little to no coding required. Code injection and staff management features really come in handy most of the time.


Installing Ghost on Your Server

I always use Docker installation because it's easier, and I can't spend my weekends installing all the dependencies one by one to make sure everything is running well. Docker makes Ghost installation straightforward and eliminates the need to manually configure dependencies.

Prerequisites

Before we begin, you'll need:

  • A server (Oracle Cloud's free tier works perfectly)
  • Docker and Docker Compose installed
  • A domain name pointed to your server

Setting Up Oracle Cloud Free Tier

Oracle Cloud offers an always-free tier that's perfect for hosting Ghost. Here's how to get started:

Create an Oracle Cloud Account: Visit oracle.com/cloud/free and sign up for the free tier

Create a VM Instance:

  • Go to Compute → Instances → Create Instance
  • Choose Ubuntu 22.04 as your OS
  • Select the free tier eligible shape (ARM-based Ampere A1)
  • Download your SSH keys and save them securely
  • Note down your instance's public IP address

Configure Firewall Rules:

  • Navigate to Virtual Cloud Networks → Your VCN → Security Lists
  • Add Ingress Rules for:
  • Port 80 (HTTP)
  • Port 443 (HTTPS)
  • Port 2368 (Ghost default port)

Connect to Your Server:

bash

ssh -i /path/to/your-private-key ubuntu@your-server-ip

Installing Docker and Docker Compose

Once connected to your server, run these commands:

bash

# Update system packages
sudo apt update && sudo apt upgrade -y

# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Add your user to docker group
sudo usermod -aG docker $USER

# Install Docker Compose
sudo apt install docker-compose -y

# Verify installation
docker --version
docker-compose --version

Log out and log back in for the group changes to take effect.


Installing Ghost with Docker

Now let's get Ghost up and running:

Create a directory for Ghost:

bash

mkdir ghost-blog
cd ghost-blog

Create a docker-compose.yml file:

bash

nano docker-compose.yml

Add this configuration (replace your-domain.com with your actual domain):

yaml

version: '3'

services:
  ghost:
    image: ghost:latest
    container_name: ghost
    ports:
      - "2368:2368"
    volumes:
      - ./content:/var/lib/ghost/content
    environment:
      - url=https://your-domain.com
      - database__client=sqlite3
      - database__connection__filename=/var/lib/ghost/content/data/ghost.db
      - database__useNullAsDefault=true
      - mail__transport=Direct
    restart: always

Start Ghost:

bash

docker-compose up -d

Check if Ghost is running:

bash

docker ps
docker logs ghost

You should see Ghost running on port 2368. The initial startup might take a minute or two as it sets up the database and creates necessary files.


Configuring Your Domain

Assuming you have a domain already, now is a good time to point your domain name to your Ghost installation.

Go to your domain registrar's DNS settings and create an A record pointing to your server's IP address:

  • Type: A
  • Name: @ (or your subdomain)
  • Value: Your server's IP address
  • TTL: 3600 (or default)

Wait for DNS propagation (can take up to 24 hours, but usually just a few minutes)


Setting Up SSL with Nginx and Let's Encrypt

To serve your blog securely over HTTPS, we'll use Nginx as a reverse proxy with Let's Encrypt SSL certificates.

Install Nginx and Certbot:

bash

sudo apt install nginx certbot python3-certbot-nginx -y

Create Nginx configuration:

bash

sudo nano /etc/nginx/sites-available/ghost

Add this configuration (replace your-domain.com):

nginx

server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com www.your-domain.com;

    location / {
        proxy_pass http://localhost:2368;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Enable the site:

bash

sudo ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Get SSL certificate:

bash

sudo certbot --nginx -d your-domain.com -d www.your-domain.com

Follow the prompts to complete SSL setup. Certbot will automatically configure HTTPS and set up auto-renewal.


Setting Up Your Ghost Blog

Few more steps to go! Now visit your domain in a browser. There will be a default website served by Ghost. To make changes and configure your blog, you need to access the Ghost admin portal.

Access the Ghost admin portal by visiting:

https://your-domain.com/ghost

Complete the initial setup:

  • Enter your email address (don't worry, you won't be getting emails because we haven't set up SMTP on Ghost yet)
  • Create a secure password
  • Enter your blog's title
  • Add your name

Explore the admin panel:

  • Posts: Create and manage your blog posts
  • Pages: Create static pages (About, Contact, etc.)
  • Tags: Organize your content
  • Members: Manage subscribers
  • Settings: Customize your blog's appearance and functionality

Happy blogging!

Tags