How To Install Ghost on CentOS

In this short how-to I will explain how to get the Ghost publising platform up and running on CentOS 7.

First make sure CentOS is up to date

To check if you are up to date run:

sudo yum update -y

Install Node.js

Run the following commands to install Node.js from the EPEL repo:

sudo yum install -y epel-release
sudo yum install -y nodejs npm

Or if you prefer installing Node.js from source:

curl -sL https://rpm.nodesource.com/setup | bash -
sudo yum install -y nodejs
sudo npm -g install npm@latest

Download and install the latest version of Ghost

Download and unzip Ghost with the following commands:

mkdir -p /var/www/
cd /var/www/  
curl -L -O https://ghost.org/zip/ghost-latest.zip  
unzip -d ghost ghost-latest.zip  
cd ghost
sudo npm install --production

Create Ghost User

Run the following commands to add the ghost user:

sudo useradd -r ghost
sudo chown -R ghost:ghost /var/www/ghost/

Install and configure the Apache HTTP server

We are going to use Apache to proxy to port 80. Run the following commands to install the Apache HTTP server:

sudo yum install -y httpd

Create your virtual host config file /etc/httpd/conf.d/your-site.conf, add the following content and replace example.com with your domain name :

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost on
    ProxyPass / http://127.0.0.1:2368/
</VirtualHost>

Make Ghost start at boot

Many guides instruct to use forever or pm2. But you can also do this with systemd. Simply create the systemd service file /etc/systemd/system/ghost.service with the following content:

[Service]
ExecStart=/usr/bin/node /var/www/ghost/index.js  
Restart=always  
StandardOutput=syslog  
StandardError=syslog  
SyslogIdentifier=ghost  
User=ghost  
Group=ghost  
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target  

Now you will be able to manage Ghost via systemd:

systemctl start ghost  
systemctl stop ghost  
systemctl restart ghost  
systemctl status ghost 

Finally

Time to enable Apache and Ghost and start them. Run the following command to accomplish this:

systemctl enable ghost
systemctl enable httpd
systemctl start ghost
systemctl start httpd

And done!

Uco Mesdag

Read more posts by this author.

The Netherlands