Comment j’ai créé mon blog grâce à Ghost, Docker et Azure

Quand m’est venue l’idée de publier mon blog, je me suis posé les habituelles questions liées à l’hébergement, le coût, la plateforme de blogging…

Après quelques jours à parcourir les hébergeurs afin de trouver la meilleure offre, j’ai fini par tenter ma chance chez HostGator.

Mais l’expérience, peu satisfaisante — plusieurs allers-retours avec le support pour activer mon domaine, console d’administration des domaines inexploitable -, et l’envie d’essayer autre chose que WordPress m’ont poussé à m’intéresser à Ghost.

Puisque j’avais choisi Ghost, je me suis mis à chercher les meilleures solutions pour en déployer un. 
 Je suis d’abord, tombé sur ce très bon template ARM de Felix Riesberg 
 Mais je préférais maitriser l’architecture du blog quitte à en faire un docker-compose plus tard. 
 Alors, cette image Docker est devenu un point de départ idéal, et il ne me restait plus qu’à tirer parti de Azure et déployer tout ça!

Pour cela il me fallait procéder en 3 étapes: 
 1. Configurer la connexion avec Azure 
 2. Créer la VM Docker dans Azure 
 3. Créer les containers du Blog


Configuration de la connexion avec Azure

Azure dispose d’un très bon support pour Docker, et le driver permettant de provisionner une VM dans Azure est disponible depuis fin 2014.

Nous allons commencer par créer un certificat qu’on importera dans notre souscription Azure afin de créer la VM et pour s’y connecter plus tard.

$ choco install openssl.light $ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout blog-cert.pem -out blog-cert.pem $ openssl pkcs12 -export -out blog-cert.pfx -in blog-cert.pem -name "My Blog Certificate" $ openssl x509 -inform pem -in blog-cert.pem -outform der -out blog-cert.cer

On importe le fichier .cer dans les paramètres du portail Azure et on en profite pour récupérer l’id de la souscription nécessaire pour la création de la docker machine.


Création de la VM Docker dans Azure

docker-machine create \ -d azure \ --azure-subscription-id="<subscription ID>" \ --azure-subscription-cert="blog-cert.pem" \ machine-name

Un VM “classique” est créée.

Note: A partir de la version 0.7.0 de docker-machine le driver Azure de docker a été réécrit pour provisionner des VM “nouvelle génération” exploitant l’Api Azure Resource Manager. Plus d’infos dans l’article de @ahmetalpbalkan et le changelog.

Notre machine est créée, nous pouvons passer à l’installation de Ghost. 
 On va profiter de la flexibilité de Docker pour créer 2 conteneurs avec des responsabilités distinctes:


Création du blog

Création du conteneur de données

Le conteneur de données va nous permettre de:

  • partager le volume de données entre plusieurs instances de conteneur
  • faciliter le backup des données en capturant le container vers une archive par exemple
  • encapsuler le mapping du volume
  • $ docker run -d -t — name blog-content -v /var/blog/ghost:/var/lib/ghost alpine ./bin/sh

On crée un “placeholder” léger à partir de Alpine qui va accueillir les données du blog dans /var/lib/ghost. 
 Pour simplifier la configuration de ghost, on effectue un mapping du volume de données vers la machine hôte -v /var/blog/ghost:/var/lib/ghost. 
 On pourra accéder aux fichiers de configuration de Ghost depuis notre VM à l’adresse /var/blog/ghost.

Création du conteneur applicatif

$ docker run --name blog --volumes-from blog-content -p 80:2368 ghost

Pour la partie applicative, on crée un conteneur depuis l’image ghost en indiquant avec soin d’où proviennent les données avec l’option — volumes-from blog-content.

Le container sera accessible sur le port 80 avec l’option -p 80:2368

Nos 2 volumes sont prêts à l’utilisation

Dans les paramètres de la VM, il faut ouvrir un accès vers le port choisi lors de la création du container en ajoutant un point de terminaison (endpoint).

Le blog est prêt à être utilisé !!

Configuration de Ghost

Finalement, on se connecte à la machine afin de configurer ghost grâçe au mapping qu’on a effectué via notre conteneur de données

$ docker-machine ssh yr-docker-vm cd /var/blog/ghost

config.js

N’oubliez pas de configurer le fichier config.js pour faire correspondre les URLs avec celle de la VM et voilà !

Dans les prochains articles, nous verrons comment exploiter le driver de volume pour Azure File afin d’étendre la personnalisation du blog,

Stay Tuned ! :)


Originally published at yannrenaudin.com on March 24, 2016.

Show your support

Clapping shows how much you appreciated Renaudin Yann’s story.