Installing Ghost CMS on Debian 10
Updated by Linode Written by Linode
Ghost is an open source blogging platform that helps you easily create a professional-looking online blog. Ghost is a robust content management system (CMS) with a Markdown editor, an easy-to-use user interface, and beautiful themes. It is easy to install and update with Ghost-CLI.
In This Guide
In this guide, you’ll set up, deploy, and secure a Ghost v3.5.1 blog on a Linode running Debian 10, using NGINX, MySQL, Node.js, NPM, Ghost-CLI, and Let’s Encrypt. For installation instructions for other distributions, click here.
NoteThis guide is written for a non-root user. Commands that require elevated privileges are prefixed with
sudo
. If you’re not familiar with thesudo
command, consult our Users and Groups guide.Replace each instance of
example.com
in this guide with your site’s domain name.
Before you Begin
This guide assumes that you’ve followed the steps in our Getting Started and Securing Your Server guides and have created a new user for Ghost with elevated
sudo
privileges. The example username used in this guide isghostexample
.Ensure that you have a valid domain name and properly configured DNS records for your domain.
Ensure that your system is up to date:
sudo apt update && sudo apt upgrade
Install
build-essential
:sudo apt install build-essential
Install Prerequisites
Install NGINX
NGINX will be used as a reverse proxy for your Ghost application:
sudo apt install nginx
Install MariaDB Server
Download and install MariaDB Server:
sudo apt install mariadb-server
Log into MariaDB Server:
sudo mysql
Note
MariaDB is a fork of the popular MySQL database software, and is meant to be functionally alike, meaning that it can be accessed with the ‘mysql’ command.Set a password for the root user with this command, replacing
password
with a strong password:SET old_passwords=0; ALTER USER root@localhost IDENTIFIED BY 'password';
Exit MariaDB:
quit
Install Node.js and NPM
Ghost is built on Node.js and follows Node’s Long Term Support (LTS) plan. Ghost only supports LTS versions of Node.js.
Download and install Node.js:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install nodejs
Install and Configure Ghost
Install Ghost-CLI
Ghost-CLI is a command line interface (CLI) tool that makes installing and updating Ghost easy. It sets up the database, configures NGINX as a reverse proxy, enables TLS/SSL security using Let’s Encrypt CA, automatically renews your SSL, and initializes Ghost as a systemd service.
Install Ghost-CLI:
sudo npm install -g ghost-cli@latest
Install Ghost
Install Ghost using the Ghost-CLI tool.
Create the document root directory:
sudo mkdir -p /var/www/ghost
Note
Installing Ghost in the/root
or/home/{user}
folder won’t work and results in a broken setup. Only use/var/www/{folder}
because it has the correct permissions.Change ownership of the
/var/www/ghost
directory to the non-root user withsudo
privileges that you created. In this example,ghostexample
is our username:sudo chown ghostexample:ghostexample /var/www/ghost sudo chmod 775 /var/www/ghost
Navigate to the Ghost root directory:
cd /var/www/ghost
Ensure that the directory is empty to avoid file conflicts:
ls -a
Install Ghost in production mode:
ghost install
Note
By default Ghost looks for Ubuntu and will display this warning if it detects a different operating system.
System checks failed with message: 'Linux version is not Ubuntu 16 or 18' Some features of Ghost-CLI may not work without additional configuration. For local installs we recommend using `ghost install local` instead.
It will ask you if you would like to continue anyway, answer yes.
Answer each question as prompted. For more information about each question, visit the Ghost documentation:
? Enter your blog URL: https://example.com ? Enter your MySQL hostname: localhost ? Enter your MySQL username: root ? Enter your MySQL password: thePasswordYouEnteredForRoot ? Enter your Ghost database name: exampleGhost Configuring Ghost Setting up instance Setting up "ghost" system user ? Do you wish to set up "ghost" mysql user? yes ? Do you wish to set up Nginx? yes ? Do you wish to set up SSL? yes ? Enter your email (used for Let's Encrypt notifications) user@example.com ? Do you wish to set up Systemd? yes ? Do you want to start Ghost? yes
After installation is complete, run
ghost ls
to view running Ghost processes:ghost ls
In the future when a newer version of Ghost is released, run ghost update
from the /var/www/ghost
directory to update to the newest version.
Complete the Setup
To complete the setup process, navigate to the Ghost configuration page by appending /ghost
to the end of your blog’s URL or IP. This example uses https://example.com/ghost
.
On the welcome screen, click Create your account:
Enter your email, create a user, password, and blog title:
Invite additional members to your team. If you’d prefer to skip this step, click I’ll do this later, take me to my blog! at the bottom of the page.
Navigate the Ghost admin area to create your first post, change your site’s theme, or configure additional settings:
Troubleshooting
Troubleshoot the system for any potential issues when installing or updating Ghost:
ghost doctor
Get help about Ghost:
ghost --help
More Information
You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.
Join our Community
Find answers, ask questions, and help others.
This guide is published under a CC BY-ND 4.0 license.