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!