A Comprehensive Guide to Installing and Setting Up Ghost CMS on Ubuntu
Learn how to install and set up Ghost CMS on an Ubuntu server. Follow our comprehensive guide to get your blog up and running quickly and easily.
Ghost CMS is a powerful and user-friendly platform designed for bloggers and content creators. In this guide, we'll walk you through the process of installing and setting up Ghost CMS on an Ubuntu server.
Introduction to Ghost CMS
Ghost CMS is a free and open-source blogging platform written in JavaScript, initially released in 2013. Unlike other content management systems, Ghost focuses on simplicity and is designed purely for blogging. It comes with built-in SEO and social sharing features, making it an ideal choice for bloggers and writers.
There are several methods for installing Ghost CMS depending on if you are looking for a development style install, or a full production stack install. In this article we will focus on a production install using the full suggested stack. Soon, I will publish another article outlining the methods for local development installs.
Prerequisites
The officially recommended production installation requires the following stack:
- Ubuntu 20.04 or Ubuntu 22.04
- NGINX (minimum of 1.9.5 for SSL)
- A supported version of Node.js
- MySQL 8
- Systemd
- A server with at least 1GB memory
- A registered domain name
Prior to beginning, it is essential to establish a functioning DNS A-Record for your domain that points to your server's IP address. This step should be completed beforehand to ensure SSL can be configured during the setup process.
Server Setup
This section of the guide will confirm that all prerequisites for installing the Ghost-CLI are satisfied.
Create a new user
Open up your terminal and login to your new server as the root user:
# Login via SSH
ssh root@your_server_ip
# Create a new user and follow prompts
adduser <user>
ghost
causes conflicts with the Ghost-CLI, so it’s important to use an alternative name.# Add user to superuser group to unlock admin privileges
usermod -aG sudo <user>
# Then log in as the new user
su - <user>
Update packages
Ensure package lists and installed packages are up to date.
# Update package lists
sudo apt-get update
# Update installed packages
sudo apt-get upgrade
Follow any prompts to enter the password you just created in the previous step.
Install NGINX
Ghost uses an NGINX server and the SSL configuration requires NGINX 1.9.5 or higher.
# Install NGINX
sudo apt-get install nginx
If ufw
was activated, the firewall allows HTTP and HTTPS connections. Open Firewall:
sudo ufw allow 'Nginx Full'
Install MySQL
Next, you’ll need to install MySQL to be used as the production database.
# Install MySQL
sudo apt-get install mysql-server
On newer versions of Ubuntu, the root user created when you install MySQL will by default be configured to use socket-based authentication, meaning that only the root Unix user will be able to authenticate. Ghost does not support this kind of authentication, so you must change the root MySQL user to have a password. Run these commands to make the root user have a password:
# Enter mysql
sudo mysql
# Update permissions
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '<your-new-root-password>';
# Reread permissions
FLUSH PRIVILEGES;
# exit mysql
exit
Install Node.js
You will need to have a supported version of Node installed system-wide in the manner described below. If you have a different setup, you may encounter problems.
# Download and import the Nodesource GPG key
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
# Create deb repository
NODE_MAJOR=18 # Use a supported version
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
# Run update and install
sudo apt-get update
sudo apt-get install nodejs -y
Install Ghost-CLI
Ghost-CLI is a commandline tool to help you get Ghost installed and configured for use, quickly and easily. The npm module can be installed with npm
or yarn
.
sudo npm install ghost-cli@latest -g
Once installed, you can always run ghost help
to see a list of available commands.
Install Ghost
Once your server is correctly setup and ghost-cli
is installed, you can install Ghost itself. The following steps are the recommended setup. If you need more fine-grained control, the CLI has flags and options that allow you to break down and customize the install steps.
Create a directory
Ghost must be installed in its own directory, with a proper owner and permissions.
# Create directory: Change `sitename` to whatever you like
sudo mkdir -p /var/www/sitename
# Set directory owner: Replace <user> with the name of your user
sudo chown <user>:<user> /var/www/sitename
# Set the correct permissions
sudo chmod 775 /var/www/sitename
# Then navigate into it
cd /var/www/sitename
Run the install process
Now we install Ghost with one final command.
ghost install
Install questions
During install, the CLI will ask a number of questions to configure your site.
Blog URL
Enter the exact URL your publication will be available at and include the protocol for HTTP or HTTPS. For example, https://example.com
. If you use HTTPS, Ghost-CLI will offer to set up SSL for you. Using IP addresses will cause errors.
MySQL hostname
This determines where your MySQL database can be accessed from. When MySQL is installed on the same server, use localhost
(press Enter to use the default value). If MySQL is installed on another server, enter the name manually.
MySQL username / password
If you already have an existing MySQL database, enter the username. Otherwise, enter root
. Then supply the password for your user.
Ghost database name
Enter the name of your database. It will be automatically set up for you, unless you’re using a non-root MySQL user/pass. In that case the database must already exist and have the correct permissions.
Set up a ghost MySQL user? (Recommended)
If you provided your root MySQL user, Ghost-CLI can create a custom MySQL user that can only access/edit your new Ghost database and nothing else.
Set up NGINX? (Recommended)
Sets NGINX up automatically enabling your site to be viewed by the outside world. Setting up NGINX manually is possible, but why would you choose a hard life?
Set up SSL? (Recommended)
If you used an https
Blog URL and have already pointed your domain to the right place, Ghost-CLI can automatically set up SSL for you using Let’s Encrypt. Alternatively, you can do this later by running ghost setup ssl
at any time.
SSL certification setup requires an email address so that you can be kept informed if there is any issue with your certificate, including during renewal.
Set up systemd? (Recommended)
systemd
is the recommended process manager tool to keep Ghost running smoothly. We recommend choosing yes
but it’s possible to set up your own process management.
Start Ghost?
Choosing yes
runs Ghost and makes your site work.
Future maintenance
Once Ghost is properly set up it’s important to keep it properly maintained and up to date. Fortunately, this is relatively easy to do using Ghost-CLI. Run ghost help
for a list of available commands or explore the full Ghost-CLI documentation.
What to do if the install fails
If an install goes horribly wrong, use ghost uninstall
to remove it and try again. This is preferable to deleting the folder to ensure no artifacts are left behind.
If an install is interrupted or the connection lost, use ghost setup
to restart the configuration process.
For troubleshooting and errors, use the site search and FAQ section to find information about common error messages.
Conclusion
Installing and setting up Ghost CMS on Ubuntu is a straightforward process that allows you to create and manage your blog with ease. Whether you're a beginner or an experienced blogger, Ghost offers a powerful platform for publishing your content online.