Lab : création d’un blog Ghost sur le web

Présentation et architecture de l’application

Dans ce lab, nous allons créer une plateforme pour un blog sur Internet. Nous allons utiliser « Ghost », une application web open source qui permet de créer des blogs. Pour y accéder : ghost.org

Pour le bon fonctionnement de la plateforme, nous allons également configurer une base de données MySQL qui va stocker le contenu du blog.

Déploiement de la solution

MéthodePréparation de l’environnement 

Comme indiqué précédemment, Docker Compose fait appel à Docker afin de créer et gérer les services décrits dans le fichier « docker-compose.yml ».

Il est donc obligatoire d’installer Docker avant de pouvoir utiliser Docker Compose. Le lab a été réalisé dans un environnement Linux (Ubuntu). Vous pouvez adapter les commandes CLI en fonction de l’environnement dans lequel vous travaillez.

Étape 1 : pour installer Docker, commencez par récupérer et installer le package Docker :

1
# sudo apt-get install docker.io

Étape 2 : une fois l’installation effectuée, vérifiez que Docker fonctionne correctement :

1
# sudo service docker status 

Étape 3 : pour installer Docker Compose, exécutez les commandes listées précédemment. Une fois l’installation terminée, vérifiez la version Docker Compose installée.

MéthodeAnalyse du fichier de configuration Docker Compose

Nous allons examiner de plus près le contenu fichier « docker-compose.yml » qui sera utilisé pour créer notre application.

Étape 1 : le fichier de configuration commence toujours par l’argument « version ». Pour notre lab, nous allons travailler avec la version 3

Étape 2 : dans le bloc « services », déclarez l’ensemble des services que vous souhaitez créer. Chaque conteneur (service) commence par un nom unique dans le fichier de configuration. Dans notre exemple, le premier conteneur se nommera : « ghost »

Étape 3 : vous devez maintenant détailler pour chaque conteneur l’ensemble des paramètres à utiliser lors de sa création. Le premier argument est « image ». Il spécifie l’image que nous allons récupérer (comme lorsqu’on utilise la commande « pull » avec Docker) et que nous allons utiliser pour créer le conteneur.

Remarque

Il existe un autre argument que l’on peut utiliser à la place de « image » : c’est l’argument « build ». Il est utilisé lorsqu’on veut spécifier le chemin vers un fichier « dockerfile » et créer le conteneur en se basant sur ce fichier.

Méthode

Étape 4 : l’argument suivant est « restart ». Cet argument est important pour la continuité et la disponibilité d’un service. Lorsque cet argument est configuré avec la valeur « always », le service concerné redémarre automatiquement en cas d’erreur.

Étape 5 : un autre argument important permet au conteneur de communiquer avec l'hôte local (localhost) et les autres conteneurs : l’argument « ports ». Dans notre exemple, le conteneur exposera le port 2368 pour communiquer avec le localhost qui, de son côté, va utiliser le port 80.

Remarque

La déclaration des ports se fait généralement suivant la règle suivante : on déclare un couple de ports « (HOST :CONTAINER) ». Si aucun port n’est spécifié côté localhost, ce dernier choisit un port aléatoirement pour communiquer avec le conteneur.

Méthode

Étape 6 : l’image « ghost :1-alpine » que nous allons utiliser dispose de plusieurs variables d'environnement. On peut considérer ces variables d’environnement comme des paramètres à configurer pour garantir le bon fonctionnement du service. Dans notre exemple, les variables d’environnement à configurer vont permettre au service « ghost » de communiquer avec la base de données. La base de données MySQL est spécifié, et un login et un mot de passe sont configurés. Ces informations vont permettre au service « ghost » de stocker ses données dans la database MySQL. Vous pouvez bien sûr modifier les valeurs de ces paramètres et choisir le login et mot de passe qui vous conviennent.

Étape 7 : utilisez ensuite l’argument « volumes » pour faire persister les données utilisées et générées par le conteneur. Dans notre exemple, nous avons besoin de préserver le contenu du dossier « /var/lib/ghost ». Pour ce faire, Docker crée un volume nommé « ghost-volume » qui permet d'écrire les données du conteneur en local sur le disque du localhost.

Remarque

Les volumes à créer doivent également figurer dans le bloc « volumes » en plus d'être spécifié dans la description du service.

Méthode

Étape 8 : un dernier argument est utilisé dans notre fichier : « depends_on ». Cet argument établit une dépendance entre les services et un ordre à respecter lors de la création des conteneurs. Dans notre exemple, le service « base de données » sera créé en premier avant de créer le service « blog ». De la même façon que le premier service est décrit dans le bloc « services », le deuxième service « mysql » est également décrit mais avec des valeurs et des paramètres différents :

Étape 9 : maintenant que le fichier « docker-compose.yml » est prêt, vous allez pouvoir créer votre application. Commencez par créer un répertoire où vous allez mettre le fichier « docker-compose.yml » et copiez la version finale du fichier dedans :

1
--------------------------------------------------------------------------------------------------------------------------
2
version: '3'
3
services:
4
  ghost:
5
    image: ghost:1-alpine
6
    container_name: ghost-blog
7
    restart: always
8
    ports:
9
      - 80:2368
10
    environment:
11
      database__client: mysql
12
      database__connection__host: mysql
13
      database__connection__user: root
14
      database__connection__password: P4sSw0rd0!
15
      database__connection__database: ghost
16
    volumes:
17
      - ghost-volume:/var/lib/ghost
18
    depends_on:
19
      - mysql
20
21
  mysql:
22
    image: mysql:5.7
23
    container_name: ghost-db
24
    restart: always
25
    environment:
26
      MYSQL_ROOT_PASSWORD: P4sSw0rd0!
27
    volumes:
28
      - mysql-volume:/var/lib/mysql
29
30
volumes:  
31
  ghost-volume:  
32
  mysql-volume:
33
------------------------------------------------------------------------------------------------------------------------

Étape 10 : executez la commande :

1
# sudo docker-compose up -d 

Remarque

Lors de l’exécution de la commande « docker-compose up », vous pouvez visualiser le process Docker pour récupérer les images « ghost :alpine-1 » et « mysql ». Docker commence par vérifier si les images sont présentes en local avant de les télécharger à partir d’un « Registry Docker » sur Internet.

MéthodeAnalyse des logs Docker Compose

Étape 1 : commencez tout d’abord par vérifier l’état des conteneurs avec la commande suivante :

1
# sudo docker ps 

Cette commande permet de visualiser l’état des différents conteneurs créés et fournit d’autres informations telles que le nom du conteneur, l’identifiant du conteneur et les ports utilisés.

Étape  2 : pour avoir plus de visibilité sur le fonctionnement du conteneur, vous pouvez consulter les logs docker en utilisant la commande suivante :

1
# docker logs  « Identifiant du conteneur »

Dans la capture précédente, nous avons vérifié les logs qui correspondent au conteneur « ghost ». Les logs confirment la création du service « ghost » sans erreurs.

Étape 3 : de même, on peut vérifier les logs du deuxième service, la base de données « MySQL » :

Les logs retracent les différentes étapes de création de la base de données « MysQL » : création des tables, chiffrement, etc. Vers la fin des logs, on peut clairement distinguer les messages indiquant le succès de la configuration et la disponibilité de la base de données :

MéthodeVérification de l’état des services créés

Une fois l’installation terminée, les services affichent un statut « UP ». On peut maintenant les tester et s’assurer qu’ils fonctionnent correctement.

Étape 1 : dans un premier temps, connectez-vous à la base de données « MysQL » pour vérifier la création de la base de données « ghost » et de ses tables. Pour ce faire, connectez-vous au conteneur en exécutant la commande suivante :

1
#sudo docker exec -it ghost-db bash

Étape 2 : une fois à l’intérieur du conteneur, connectez-vous à la base de données avec la commande suivante :

1
#mysql -u root -p

Utilisez le mot de passe renseigné dans le fichier « docker-compose.yml ».

Étape 3 : listez ensuite les bases de données disponibles :

1
#SHOW DATABASES ;

Étape 4 : vous devriez voir la base de données « ghost » listée. Sélectionnez celle-ci avec la commande :

1
#USE ghost 

Étape 5 : vérifiez l’existence des tables de la base de données utilisées par le service blog « ghost » :

1
#SHOW tables ;

Étape 6 : maintenant que votre base de données est prête, vérifiez si votre blog est accessible sur un navigateur web. Ouvrez un navigateur et entrez l’adresse suivante : http://127.0.0.1

Vous devriez voir la page suivante s’afficher :