Un petit article sur l'utilisation de Ghost dans un container Docker en production.

Comme souvent, les démonstrations sur les sites officiels se limitent aux versions de développement.

La raison est simple, vous donner envie d'utiliser leurs outils. En effet, démarrer un environnement de test est beaucoup plus simple qu'un environnement de production.

Outre les aspects de performances, l'aspect sécurité de l'application / site / etc ajoute une couche de complexité.

Ici, je vous propose d'utiliser l'image officielle de Ghost dans la lirabrarie Docker mais de la faire fonctionner en production.

C'est parti :-)

Seulement trois étapes, c'est très simple :

  1. Créer le répertoire qui va accueillir les données persistantes (qui pourront vivre même si l'on tue notre container)
  2. Renseigner config.js (le fichier de configuration de Ghost)
  3. Démarrer notre container

1. Créer le répertoire qui va accueillir les données persistantes

C'est une approche, vous pouvez l'adapter à vos besoins du moment que vous mettez à jour les chemins que vous souhaitez utiliser, mais j'aime bien placer mes données dans le répertoire /var/data

Du coup, on peut créer un répertoire pour accueillir nos données :

$ mkdir -p /var/data/blog

2. Renseigner config.js

Si vous avez déjà un Ghost qui tourne, copier le contenu de votre blog (apps, images, data, themes, etc...) à l'intérieur du répertoire que nous venons de créer. Vous devez surement avoir un config.js existant, il vous suffit juste de le configurer avec votre nom de domaine, le port que vous voulez utiliser, etc...

Si vous n'avez pas de blog Ghost existant, je vous propose une petite astuce qui consiste à créer un container de developpement qui va créer un config.js pour vous avec les bons paths (chemins) et les différents environnement de travail. Pour cela, il suffit d'exécuter cette commande :

$ docker run -d -p 2368:2368 -v /var/data/blog:/var/lib/ghost ghost

Cette commande démarre la libraire Ghost, détache l'exécution du container ce qui nous permet de reprendre le contrôle du shell après son démarrage et monte le répertoire que nous venons de créer comme répertoire source pour notre container (paramètre -v).

Une fois le container démarré, si on retourne dans /var/data/blog, on peut voir un fichier config.js. Il vous suffit juste de l'ajuster à vos besoins. N'oubliez pas de stopper le container une fois que vous avez terminé.

Pour lister les containers :

$ docker ps

Pour stopper un container :

$ docker stop [CONTAINER_ID]

IMPORTANT : Aucun path n'est défini par défaut dans la configuration de production. Il faut donc copier celui de la version de développement pour que notre environnement de production fonctionne.

Il faut ajouter :

// #### Paths
// Specify where your content directory lives
paths: {  
    contentPath: path.join(process.env.GHOST_CONTENT, '/')
}

Juste après les informations concernant la configuration du server.

3. Démarrer notre container

La commande que vous attendez avec impatience :-)

$ docker run -d -p 80:2368 --env 'NODE_ENV=production' -v /var/data/blog:/var/lib/ghost ghost
  • -d : On détache le container
  • -p : On spécifie les ports utilisés (public:interne). Ici on ouvre le port 80 pour le rediriger vers le port 2368
  • --env : On passe une variable d'environnement. C'est LE point important pour basculer l'environnement d'éxécution.
  • -v : On monte le volume qui contient nos données.

Et voilà, nous venons de déployer un blog fonctionnant avec Ghost dans un container Docker :-)

Vous êtes fier de vous ? Vous pouvez !

Sur ce, euh... Bonne Dockerisation de l'économie ;-)

Crédit photo :