Installer et mettre à jour Ghost

Je me suis fait une install de Ghost à ma façon qui me permet de facilement le mettre à jour. Comme c'est très différent de ce qui est préconisé dans la documentation, je me permet de vous le faire partager.

Pré-requis

Un serveur sous Debian ou Ubuntu. C'est un serveur web quand même, il faut quelque chose de sérieux.

Il faut évidemment nodejs et npm. Et le module forever qui servira à lancer l'application et à la relancer automatiquement si jamais elle plante.

sudo install -g forever

Un serveur frontal (NGinx, Apache, Cherokee…) ou une redirection de port.

Installation

Commencez par choisir le lieu de votre installation sur votre serveur. N'importe où, mais comme vous préférez. Par exemple, mettons nous sur /home/web/monblogghost.

Commençons par la première installation. Allez chercher le lien de la dernière release sous forme d'archive .zip. Pour l'exemple, je prendrais la version 0.4.0 afin de voir ensuite la mise à jour en 0.4.1. Téléchargeons le :

$ wget https://ghost.org/zip/ghost-0.4.0.zip

…puis décompressons le :

$ unzip ghost-0.4.0.zip -d ghost-0.4.0
$ rm ghost-0.4.0.zip

Nous allons procéder à l'installation de base :

$ cd ghost-0.4.0
$ cp config.example.js config.js

Éditez le fichier config.js afin d'y faire correspondre votre environnement. Ignorez la partie development et concentrez vous sur la partie production. Il vous faudra renseigner la propriété url en lui donnant le domaine auquel votre blog devra répondre. Pour le mail, vous devrez utiliser le serveur SMTP de GMail, c'est le plus simple :

mail: {
    transport: 'SMTP',
    options: {
        service: 'Gmail',
        auth: {
            user: 'votrecompte@gmail.com',
            pass: 'votremotdepasse'
        }
    }
},

Une fois ce fichier sauvegardé, il est temps d'installer les modules npm d'un preste :

$ npm install --production

Normalement, tout s'est bien passé et en lançant :

$ npm start

Vous devriez pouvoir vous connecter à votre blog, créer votre compte en vous rendant sur {url de votre blog }/ghost et vous y connecter.

Arretons maintenant le serveur d'un habile ctrl+c.

Init.d

Maintenant que le blog est installé, il nous faut un moyen de le lancer au démarrage du serveur. Nous allons pour cela créer un service init.d.

$ sudo vi /etc/init.d/monblogghost

Vous pouvez évidemment remplacer monblogghost par n'importe quoi. Chez moi, c'est blog.hadrien.eu.
Dans ce fichier, insérez le script suivant :

#! /bin/sh

. /lib/lsb/init-functions

USER="votre_user_name"
APP="/home/web/monblogghost/ghost-0.4.0/index.js"

do_start() {
    /usr/bin/sudo -u $USER NODE_ENV=production /usr/local/bin/forever start $APP
}
do_stop() {
    /usr/bin/sudo -u $USER /usr/local/bin/forever stop $APP
}

case "$1" in
    start)
        do_start
        ;;
    stop)
        do_stop
        ;;
    restart)
        do_stop
        do_start
        ;;
    *) 
        echo "Usage: $0 start|stop|restart" >&2
        exit 3
        ;;
esac

Vous pouvez devez tester votre script immédiatement en invoquant :

$ sudo service monblogghost start

Si votre blog s'affiche à l'url demandée, c'est bon. Vous pouvez aussi utiliser les commandes :

$ sudo service monblogghost stop

pour arretez Ghost. Ça sera utile pour la mise à jour. Et :

$ sudo service monblogghost restart

qui sera utile si vous éditer ou ajouter de nouveaux thèmes, puisqu'un redémarrage de Ghost est nécessaire.

Il faut maintenant indiquer au système que ce service doit être lancé au démarrage :

$ sudo update-rc.d monblogghost defaults

À noter que vous pouvez aussi créer plusieurs services si vous voulez faire tourner plusieurs blogs Ghosts sur la même machine. Il suffit pour cela de leur donner des noms différents et de les faire pointer sur un dossier différent.

Nous en avons fini avec l'installation, nous allons maintenant préparer le terrain pour la prochaine mise à jour.

Préparation

Ce qui est agaçant quand on met à jour, c'est que certains dossier/fichiers très importants sont situés dans le dossier de Ghost et qu'il faut penser à les copier à chaque fois. Les fichiers en question, ce sont juste la base de données (sqlite3), la config et toutes les images. Ça va vite devenir pesant, et surtout, sensible. Alors moi ce que j'ai fait, c'est que je les ai sorti du dossier Ghost en utilisant des liens symboliques. J'en ai aussi profité pour sortir le dossier node_modules pour éviter d'avoir à tout réinstaller à chaque mise à jour. Ça donne ceci :

Tout d'abord on stoppe le serveur Ghost avec le service créé précédemment.

$ sudo service monblogghost stop

On est situé dans le dossier de Ghost et on va déplacer les éléments importants au niveau en dessous (donc dans /home/web/monblogghost/ :

$ mv config.js ..
$ mv content ..
$ mv node_modules ..

Puis nous créons des liens symboliques au même endroit vers ces fichiers :

$ ln -s ../config.js
$ ln -s ../content
$ ln -s ../node_modules

Et c'est tout. Vous pouvez relancer Ghost et constater que tout fonctionne comme avant.

Mise à jour

Voilà arrivé le jour tant attendu de la mise à jour ! Nous allons installer la 0.4.1. Nous nous plaçons dans le dossier du blog :

$ cd /home/web/mongblogghost/

Nous téléchargeons la nouvelle archive :

$ wget https://ghost.org/zip/ghost-0.4.1.zip

Et nous la dézippons :

$ unzip ghost-0.4.1.zip -d ghost-0.4.1
$ rm ghost-0.4.1.zip

Nous voilà donc avec deux dossier de Ghost !

$ ls
config.js  content  ghost-0.4.0  ghost-0.4.1  node_modules

Entrons dans le nouveau dossier et créons les alias vers les fichiers que nous avons déplacé :

Certains feront la remarque qu'il serait pertinent de copier le theme casper avant de supprimer le dossier content et ils ont raison.

$ cd ghost-0.4.1
$ ln -s ../config.js
$ rm ../content/themes/casper
$ mv content/themes/casper ../content/themes/
$ rm -rf content
$ ln -s ../content
$ ln -s node_modules

Mettez à jour les modules npm :

$ npm install --production

Coupez votre ghost courant (c'est très important de le couper maintenant et de ne pas faire un restart après) :

$ sudo service monblogghost stop

Éditez le service :

$ sudo vi /etc/init.d/monblogghost

Et changez le chemin dans la variable APP simplement en changeant le numéro de version. Relancez ensuite l'app :

$ sudo service monblogghost start

Et voilà, c'est à jour \o/

Hadrien

Hi, I'm a french Javascript Lead Developer, Web Architect from Toulouse, France. I've worked for 12 years for many projects with YUI, AngularJS, Aurelia.io and now React and React native.

Toulouse, France https://hadrien.eu