Qu'est-ce-que Ghost 👻 ?

Ghost est un moteur de blog Open Source développé en Node.js sous licence MIT.

Comme pour la plupart des projets Open Source, plusieurs possibilités vous sont offertes si vous souhaitez l'utiliser:

  • un service PaaS payant appelé Ghost Pro (hébergement & support) proposé par la Ghost Foundation comprenant une installation en 1 clic, un CDN, des sauvegardes et du support
  • un service d'infogérance (installation et maintenance) sur votre propre serveur appelé Ghost Valet, fourni également par la Ghost Foundation
  • le déploiement sur un service de type Heroku, Netlify...etc.
  • procéder vous-même à une installation sur votre propre serveur
    • Via une image Docker
    • Via la méthode recommandée, en l'installant manuellement.

J'ai sélectionné cette dernière option et je partage avec vous, dans cet article, la procédure que j'ai suivie.

Prérequis

Tout d'abord, voici les recommandations officielles :

  • Système d'exploitation : 🐧 Ubuntu 16.04 or Ubuntu 18.04
  • Serveur Web : NGINX (minimum of 1.9.5 for SSL)
  • A supported version of Node.js
  • Base de données : MySQL 5.5, 5.6, or 5.7 (not >= 8.0)
  • Systemd
  • Mémoire vive : 1GB
  • Un nom de domaine

Autant vous dire tout de suite que je ne vais pas respecter ces recommandations à la lettre.
Je n'utiliserai pas Ubuntu mais plutôt une Debian stable 10.4, en effet, je ne suis plus en phase avec les choix qui sont faits depuis quelque temps.
J'ai également préféré MariaDB à MySQL.

Ce tutoriel vient compléter la documentation officielle disponible ici.

TL; DR

Résumé pour les plus pressé(e)s.

# S'identifier comme root
su -
# Mise à jour du cache APT et installation des mises à jour si besoin
apt update && apt upgrade -y
# Installation de curl et sudo
apt install curl sudo -y
# Création de l'utilisateur dédié
adduser john
# Ajout de l'utilisateur au groupe sudo
usermod -aG sudo john
# Basculer vers l'utilisateur john
su - john
# Installation de nginx
sudo apt install nginx -y
# Installation de MariaDB
sudo apt install mariadb-server -y
# Configuration initiale du serveur MariaDB
sudo mysql_secure_installation
# Mode interactif de MariaDB
sudo mysql
# Remplacer BLOG_USER, MDP et BLOG
----
   CREATE USER 'BLOG_USER'@'localhost' IDENTIFIED BY "MDP";
   CREATE DATABASE IF NOT EXISTS BLOG;
   GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON BLOG.* TO 'BLOG_USER'@'localhost';
   flush privileges;
   exit;
----
# Installation de node.js
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
sudo apt install nodejs -y
# Installation de ghost
sudo npm install ghost-cli@latest -g
# Création du répertoire qui accueillera le site
sudo mkdir -p /var/www/ghost
# Modification des permissions (modifier john et le chemin si besoin)
sudo chown john:john /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost
# Installation de Ghost dans le répertoire
ghost install

Puis rendez-vous sur http://url/ghost afin de procéder à la configuration initiale de votre nouveau site Web.

Installation

Création d'un utilisateur

Nous allons tout d'abord mettre à jour le cache d'APT, procéder à d'éventuelles mises à jour et installer quelques paquets nécessaires pour la suite :

# S'identifier comme root
su -
# Mise à jour du cache APT et installation des mises à jour si besoin
apt update && apt upgrade -y
# Installation de curl et sudo
apt install curl sudo -y

Créons un utilisateur dédié et ajoutons-le au groupe sudo (ici john). (Ce dernier ne doit en aucun cas s'appeler ghost afin d'éviter d'éventuels conflits.)

# Création de l'utilisateur dédié
adduser john
# Ajout de l'utilisateur au groupe sudo
usermod -aG sudo john
# Basculer vers l'utilisateur john
su - john

Installation de Nginx et de MariaDB

Passons à l'installation du serveur Web Nginx ainsi que du serveur de base de données MariaDB :

# Installation de nginx
sudo apt install nginx -y
# Installation de MariaDB
sudo apt install mariadb-server -y

Une bonne pratique consiste à initialiser le serveur MariaDB dès son installation en utilisant mysql_secure_installation :

sudo mysql_secure_installation

mysql_secure
Nous allons maintenant créer l'utilisateur et la base de données qui serviront à notre future installation de Ghost (je vous laisse modifier MDP, BLOG_USER et BLOG):

sudo mysql
CREATE USER 'BLOG_USER'@'localhost' IDENTIFIED BY "MDP";
CREATE DATABASE IF NOT EXISTS BLOG;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON BLOG.* TO 'BLOG_USER'@'localhost';
flush privileges;
exit;

Installation de Node.js

Rendez-vous sur https://ghost.org/faq/node-versions/ afin de déterminer la version de Node.js conseillée pour l'utilisation de Ghost.
Il s'agit lors de l'écriture de cet article de la version 12.

Node JS version

Procédons à l'installation :

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
sudo apt install nodejs -y

Installation de Ghost

sudo npm install ghost-cli@latest -g

J'ai choisi d'installer mon blog dans le répertoire /var/www/ghost.
Il vous est possible d'en utiliser un autre à votre convenance.

# Création du répertoire
sudo mkdir -p /var/www/ghost
# Modification des permissions
sudo chown john:john /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost
# Installation de Ghost dans le répertoire
ghost install

À partir de là, plusieurs questions vous seront posées.

Il y aura notamment un message d'erreur vous indiquant que vous n'utilisez pas la distribution GNU/Linux recommandée, à savoir Ubuntu 16 or 18. Cela ne m'a personnellement pas causé de problème pour la suite.

Important : J'ai sélectionné No lorsque le programme d'installation m'a demandé si je souhaitai mettre en place SSL.
Cela vient du fait que ma machine virtuelle se situe derrière un reverse proxy et c'est ce dernier qui s'occupe automatiquement de demander un certificat à Let's Encrypt.
Si votre machine est directement exposée à Internet, vous pouvez indiquer Yes.

Modification du fichier de configuration

Dans certains cas, le site reste inaccessible.
Afin de le rendre accessible il vous faut modifier le fichier .config.production.json.

nano config.production.json

C'est la partie suivante qui nous intéresse :

"server": {
    "port": 2368,
    "host": "192.168.1.25"
  },

Si votre serveur se situe derrière un reverse-proxy :

Je vous conseille de sélectionner le port de votre choix et d'indiquer l'adresse IP locale de votre VM afin de l'exposer sur le réseau local et rendre votre installation de Ghost joignable par le reverse-proxy.

Si votre serveur est directement exposé à Internet :

Dans ce cas, vous pouvez indiquer l'IP suivante 0.0.0.0.

Systemd

Comme vous l'aurez remarqué, le script d'installation vous demande si vous souhaitez utiliser systemd.
L'utilisation de systemd permet, par exemple, le lancement automatique de Ghost lors d'un reboot de votre serveur.

Après chaque modification de la configuration (.config.production.json) il vous faudra relancer le service :

sudo systemctl restart ghost_blog-syntik-fr.service

Accès à votre site

Vous pouvez désormais accéder à votre nouveau site !
Afin de poursuivre sa configuration, rendez-vous sur : http://url/ghost.

Accueil Ghost

Configuration d'un reverse-proxy 🛒

Ayant de nombreuses machines virtuelles hébergeant des services Web j'utilise Caddy comme reverse-proxy.

Voici le bloc à ajouter dans votre fichier de configuration /etc/caddy/Caddyfile :

blog.truc.fr {
   reverse_proxy http://192.168.1.25:2368 {
   }
   tls john@doe.com
}

Remplacer l'IP et le port par les infos de la machine virtuelle où est installé Ghost.
L'e-mail permet de demande un certificat Let's Encrypt de façon automatique.

Puis on recharge la configuration :

systemctl reload caddy

C'est déjà la fin !
J'espère que ce tutoriel vous sera utile :)
N'hésitez pas à le commenter pour me signaler des améliorations, poser des questions ou pour partager votre avis !

Sources :

Partager cet article :