• Install ghost without ghost cli (it's not needed for this)
  • We use sqlite3 (but you can easily change this for mysql if needed
  • Apache2 with

The steps are summarized as the following:

  1. Install and enable mod_macro
  2. Write one apache config for all of your ghost instances
  3. Install ghost using yarn for each ghost blog instance
  4. Create a systemd service for each of the blogs

1. Install & enable mod_macro

sudo a2enmod macro
sudo service apache2 reload

2. Write one apache config for all of your ghost instances

We will define the following ghost blogs:

  • on port 2368
  • on port 2369
  • on port 8001
  • on port 8000

This is to demonstrate how you'd host blogs on multiple hosts, and also as subdomains if you needed to. The only thing that really changes between the different ghost blogs is the domain they're on and the port they listen on. It's pointless creating an entire VirtualHost file for each ghost blog. mod_macro allows you to create on VirtualHost config file, and loop over each blog. Store this in your /etc/apache2/conf-available/ directory (asuming Ubunti 16.04, but that's not required).

Example /etc/apache2/conf-available/ghost-blogs.conf:

    # Created by Karma Computing 26/02/2017 14:46
    # Documentation Reference:

    # get the server name from the Host: header
    UseCanonicalName Off

    # this log format cab be split per-virtual-host based on the first field
    # using the split-logfile utility.
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog "/var/log/apache2/access_log" vcommon

      Listen $port
        ServerName $host
        ProxyPass / http://localhost:$proxy/

    ## Use of VHost with different arguments.

    Use VHost 80 2368
    Use VHost 80 2369
    Use VHost 80 8001
    Use VHost 80 8000
    UndefMacro VHost

The above config defines 4 ghost blog entries, look at the bottom of the config file and notice all that really changes is the list at the bottom. We use this to add new blogs. Notice how easy it is to add another ghost instance, simply add another line to your ghost-blogs.conf file (be sure to avoid any port conflicts) and you're good to setup the ghost instanace.

All that's left is to install ghost and make shure you have an install of ghost listening on each of those ports. You'll need one install of ghost for each blog.

4. Install ghost using yarn for each ghost blog instance

Follow our post on how to install Ghost using Yarn and you're good to go.
This also covers how to set-up a systemd service, so that you can configure all of your ghost instances to start on boot.

You might decide to create a user for each ghost blog for example:

$ ls /home/
$ user1 user2 user3

This way you can seperate each user to have their own ownership of their ghost blog.