Using a Different System?
-
How to Deploy Ghost on Ubuntu 16.04
-
How to Deploy Ghost on CentOS 7.3
-
How to Deploy Ghost on Fedora 25
-
How to Deploy Ghost v0.11 LTS on Ubuntu 16.04
Ghost is an open source blogging platform that is gaining popularity among developers and ordinary users since its 2013 release. It puts focus on content and blogging. The most attractive thing about Ghost is its simple, clean, and responsive design. You can write your blog posts from a mobile phone. Content for Ghost is written using the Markdown language.
In this guide we are going to set up and deploy Ghost blog on an Debian 8.7 VPS using Let’s Encrypt, Node.js and Nginx.
Let’s Encrypt (Certbot)
Before starting this step, ensure that you have set DNS records for your domain.
-
Update system:
apt update && apt upgrade -y -
Install needed tools:
apt install -y zip build-essential -
Enable the Jessie backports repo. Run
apt edit-sourcesand paste the below line at the end of/etc/apt/sources.listfile:# Copy/Paste the below line at the end of file deb http://ftp.debian.org/debian jessie-backports main -
Refresh package sources:
apt update -
Install Certbot (a.k.a Let’s Encrypt client):
apt install -y certbot -t jessie-backports -
Check version:
certbot --version # certbot 0.9.3 -
Obtain certificate:
certbot certonly -d example.com -d www.example.com --email [email protected] --agree-tos --standaloneAfter going through previous steps, your certificate and private key will be in the
/etc/letsencrypt/live/example.comdirectory.
Install NodeJS
Ghost currently supports Node versions 0.12.x, 4.2+, and 6.9+ only.
We are going to install the recommended version for Ghost which is v4 argon LTS at the time of this writing.
-
Download and install the LTS version of Node.js:
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - apt install -y nodejs -
Check Node and NPM version:
node -v && npm -v # v4.7.2 # 2.15.11
Install Nginx
-
Download and install Nginx:
apt install nginx -t jessie-backports -
Check the Nginx version:
nginx -v # nginx version: nginx/1.9.10 -
Start Nginx service and check status:
systemctl start nginx systemctl status nginx -
Configure Nginx as a reverse proxy:
vi /etc/nginx/conf.d/ghost.conf -
Paste the following in
/etc/nginx/conf.d/ghost.conf:server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:2368; } } -
Check syntax:
nginx -t -
Reload Nginx:
systemctl reload nginx
Install Ghost
If you want to host multiple Ghost blogs on the same VPS, each Ghost instance must be running on a separate port.
-
Make the
webrootdirectory:mkdir -p /var/www/ -
Create a Ghost user:
adduser ghost -
Download and install Ghost:
cd /var/www wget https://ghost.org/zip/ghost-latest.zip unzip ghost-latest.zip -d ghost chown -R ghost:ghost /var/www/ghost/ rm ghost-latest.zip -
Switch to the
ghostuser:su - ghost -
Install Ghost:
cd /var/www/ghost npm install --production -
Configure Ghost by changing the
urlproperty of theproductionobject inside of theconfig.jsfile:cp config.example.js config.js vi config.js config = { // ### Production // When running Ghost in the wild, use the production environment. // Configure your URL and mail settings here production: { url: 'https://example.com', ... } ... ...NOTE: You should configure
mailalso. Consult the official Ghost documentation on how to do that. -
Save
config.jsfile and exit. -
Start Ghost:
npm start --productionGhost is now running on your server. Both blog front-end and admin interface are secured with HTTPS and HTTP/2 is working also. You can open your browser and visit your site at
https://example.com. Don’t forget to replaceexample.comwith your domain name.
Keep Ghost running
If you close the terminal session to your VPS, your blog will also go down. That’s not good. To avoid this, we are going to use the Forever process manager. That will keep your blog up 24/7.
-
Switch to the
ghostuser:su - ghost -
Go to the
/var/www/ghostfolder:cd /var/www/ghost -
Install Forever:
npm install forever -
Add the new
forevercommand to your path:echo "export PATH=/var/www/ghost/node_modules/forever/bin:$PATH" >> ~/.bashrc source ~/.bashrc -
Start Ghost with Forever:
NODE_ENV=production /var/www/ghost/node_modules/forever/bin/forever start index.jsAt this point,
forevershould have started Ghost. -
Go to
https://example.com/ghostand create a Ghost admin account. Do this as soon as possible.
Conclusion
That’s it. We now have a fully functional Ghost blog. If you want to change the default Ghost theme called Casper to a custom one, you can just download and unzip the theme into the /var/www/ghost/content/themes folder and select it via Ghost admin interface, located at https://example.com/ghost.
Want to contribute?
You could earn up to $300 by adding new articles
Suggest an update
Request an article
