Introduction to Ghost 👻 - modern Node.js publishing platform.
Table of contents
First one of the incoming Ghost tutorial series.
The inscription will cover a topic of ghost setup on Ubuntu 18.04, ensuring step by step that prerequisites for installing the Ghost-CLI are met, installing Nginx, MySQL, and nodejs. I will introduce headless CMS of my choice and gather instructions for installing it with all other necessary software and its basic configuration.
Ghost introduction
It's an open-source publishing platform, headless Node.js CMS. Started by John O'Nolan and Hannah Wolfe in early 2013, after successful Kickstarter campaign with the mission to deliver publicly available tools for independent journalists and writers across the world to increase their impact on online media. Not complicated to configure, relatively fast and quite well-designed out-of-the-box. CMS comes with features which can be customized based on the needs. The basic theme is Casper, but it's not complicated to craft your one. As we can read on ghost www - they are structured as a non-profit organization and product based on the needs of its users - not ones who look for returns. The ghost is licensed under MIT LICENCE.
General prerequisites
Server prerequisites
Ubuntu configuration
Assuming that you already have access to your Ubuntu terminal, let's create a new user
:~$ adduser ghostuser
and add it to the sudo group using usermod with --append & --groups options.
# Usage: usermod [options] LOGIN
:~$ usermod -aG sudo ghostuser
Now we need to set up Uncomplicated Firewall :D
CLI lines speak for themselves I believe, as we could expect from the name.
:~$ ufw allow OpenSSH
:~$ ufw enable
:~$ ufw status
Allowing OpenSSH will let us through the firewall while connecting using the SSH protocol.
:~$ ssh ghostuser@server_ip
NGINX installation
Nginx is available in Ubuntu's default repository, so we can get it using apt.
:~$ sudo apt-get update
:~$ sudo apt-get upgrade
:~$ sudo apt install nginx
The software adds itself to UFW upon installation but as it is recommended we need to enable the most restrictive profile that will still allow the traffic you’ve configured.
:~$ sudo ufw app list
:~$ sudo ufw allow 'Nginx HTTP'
Now you should be able to see Nginx Hello World page at http://server_ip.
MySQL configuration
A headless CMS focus is to store and deliver structured content. Ghost uses MySQL for the content to read and write.
:~$ sudo apt-get install mysql-server
:~$ sudo mysql
As it is on the Ghost docs:
# Now update your user with this password
# Replace 'password' with your password, but keep the quote marks!
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
# Then exit MySQL
quit
# and login to your Ubuntu user again
su - <user>
Nodejs installation
To run Ghost you need to have nodejs repository downloader and installed.
:~$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash
:~$ sudo apt install nodejs
If you met some problems here, please check different installation methods at digitalocean.
The npm CLI.
:~$ sudo apt install npm
Some npm packages to work require compiling code from the source - you will need to install the build-essential package to run them.
:~$ sudo apt install build-essential
Ghost-CLI
Now when you're sure about server met the prerequisites you can proceed to Ghost-CLI installation.
The project goal is to make setting up and maintaining a Ghost site as straight forward as possible. Mainly ensuring that everyone that uses the recommended system stack can install, configure, start, stop, restart, update & list their Ghost sites. It makes possible to install or update Ghost in a single command.
We can get it using npm CLI.
:~$ sudo npm install ghost-cli -g
:~$ ghost help
Install Ghost
Before installing ghost, remember to register your domain. Here we use server-domain.com.
Create a directory, set its owner and permissions.
:~$ sudo mkdir -p /var/www/ghost
:~$ sudo chown <ghostuser>:<ghostuser> /var/www/ghost
:~$ sudo chmod 775 /var/www/ghost
Then navigate to the new directory and install the ghost.
:~$ cd /var/www/ghost
:~$ ghost install
Change your Nginx configuration to display your blog.
:~$ cd /etc/nginx/
:~$ rm sites-enabled/default
:~$ cd sites-available
:~$ touch ghost
server {
listen 0.0.0.0:80;
server_name *server-domain-name*;
access_log /var/log/nginx/*server-domain-name*.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}
Nginx reads from sites-enabled directory during startup, so we need to link that file.
:~$ cd..
:~$ sudo ln -s sites-available/ghost sites-enabled/ghost
As there are possible hash bucket memory problem, but they're easy to solve by editing a single file.
:~$ sudo nano /etc/nginx/nginx.conf
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
To be sure we can check for the errors and restart Nginx using commands bellow.
:~$ sudo nginx -t
:~$ sudo systemctl restart nginx
Start Ghost
:~$ ghost start
SSH
Ghost has integration with Let's Encrypt SSL and thanks to that you can add a new SSL certificate in a couple of steps using a single command.
ghost setup ssl
In the next part, I will cover adding Ghost to upstart to be sure that it runs whenever your server does.
I will also show how to host your blog on Heroku and AWS.
Later I'm going to show how to create a custom theme and more.
Top comments (0)