Ce post s'inspire en grande partie de ce tutorial.

J'ai découvert Ghost il y a quelques temps déjà et ai toujours voulu tenter l'expérience. Ce CMS n'a rien de révotionnaire en soi mais j'apprécie particulièrement sa sobriété ainsi que l'interface d'administration. C'est aussi l'occasion pour moi de sortir un peu du confort des stacks Apache PHP habituelles.

Ghost dispose d'une interface en ligne de commande (CLI) qui facilite grandement les choses. Néanmoins, la seule stack officiellement supportée est un peu différente de celle utilisée ici. La principale différence tient à l'utilisation de Apache à la place de Nginx.

Je partirai du principe que vous avez déjà tout ce qu'il faut à savoir :

  • Un serveur sous Ubuntu 16.04
  • Apache 2
  • MySQL
  • Nodejs et npm à jour

C'est parti.

Installer Ghost

# Installation du CLI
$ npm install -g ghost-cli

# Création de l'espace de travail
$ mkdir -p /var/www/ghost
$ cd /var/www/ghost

# Création d'un user dédié pour Ghost
$ sudo useradd -d /var/www -s /bin/bash ghost
$ sudo passwd ghost
$ sudo usermod -aG sudo ghost
$ sudo chown -R ghost:ghost /var/www/ghost
$ sudo chmod 775 /var/www/ghost

# On se connecte avec ce nouvel user
$ su - ghost

# Et on lance l'installation
$ ghost install

# On quitte le user ghost
$ exit

L'outil vous demandera si vous souhaitez configurer Nginx tout de suite. Répondez non.

A partir de là, votre blog est déjà en place sur http://localhost:2368 Pour le constater, il vous suffit par exemple de faire :

$ curl -I localhost:2368

Ce qui devrait vous retourner un HTTP 200.

Nous allons configurer Apache comme proxy pour permettre l'accès à votre blog de l'extérieur.

Configurer Apache

Créez un nouveau site Apache

$ cd /etc/apache2/sites-available/
$ sudo nano ghost.conf

Vous pouvez remplacer nano par vim ou tout autre éditeur de texte en ligne de commande. Moi je préfère nano :)

Collez le contenu suivant en remplaçant ghostblog.me par l'URL de votre blog :

<VirtualHost *:80>
    ServerName ghostblog.me
    ServerAlias www.ghostblog.me

    ProxyRequests off 
    ProxyPass / http://127.0.0.1:2368/ 
    ProxyPassReverse / http:/127.0.0.1:2368/     
</VirtualHost>

Activez le mode proxy d'Apache :

$ sudo a2enmod proxy proxy_http

Il ne reste plus qu'à activer le nouveau site et à redémarrer Apache :

$ sudo a2ensite ghost
$ sudo systemctl restart apache2

Puis à redémarrer Ghost lui-même :

$ sudo systemctl restart ghost

A ce stade, en accédant à l'URL de votre blog vous devriez le voir.

Activer HTTPS (optionnel mais conseillé)

Cette étape est facultative mais très fortement conseillée. Elle permettra d'améliorer la sécurité de votre site et de protéger vos lecteurs.

Le mieux est d'utiliser le service Let's Encrypt qui fournit des certificats SSL signés gratuitement.

Pour la suite de ce tuto, je me suis très librement interprété de ce guide de Digital Ocean (en anglais).

Installer Certbot

Certbot est un utilitaire qui va vous permettre de pratiquement tout automatiser, cela vous simplifiera grandement la vie.

On commence par ajouter le repository de Certbot pour pouvoir l'utiliser avec apt-get.

$ sudo add-apt-repository ppa:certbot/certbot

On installe ensuite Certbot:

$ sudo apt install python-certbot-apache

Autoriser le trafic HTTPS via le firewall

Nous allons ici utiliser ufw. Si vous utilisez un autre utilitaire, je vous laisse chercher par vous même mais vous devriez trouver facilement.

On active le profil Apache Full (qui inclut HTTP et HTTPS) et on supprime le profil Apache qui est à présent redondant.

$ sudo ufw allow 'Apache Full'
$ sudo ufw delete allow 'Apache'

$ sudo ufw status

La dernière ligne sert à vérifier que tout a marché comme prévu.

Lancer Certbot

Comme avant, remplacez ghostblog.me par l'adresse de votre blog.

$ sudo certbot --apache -d ghostblog.me -d www.ghostblog.me

Si c'est votre première fois, une adresse email vous sera demandée. C'est normal. Vous devrez aussi indiquer si vous voulez rediriger le trafic HTTP vers HTTPS. C'est conseillé.

Les certificats émis par Let's Encrypt sont valides seulement 3 mois, mais Certbot gère le renouvelement automatiquement (quand je vous dis qu'il vous facilite la vie !). Vous pouvez tester le processus de renouvelement avec cette commande :

$ sudo certbot renew --dry-run

Si vous ne voyez pas d'erreur, c'est que tout fonctionne. Vous devriez à présent avoir accès à votre blog en HTTPS.