Docker Guide · 9 min read · Feb 04, 2026

Guide Docker : Déployer Ghost Blog avec MySQL et Traefik avec Docker

Ghost est une puissante plateforme de publication et de blog open source basée sur nodejs. Elle est bien conçue et facile à utiliser. La plateforme Ghost est écrite en JavaScript et utilise node.js comme environnement d’exécution. La première version de Ghost a été publiée en 2013 sous la licence MIT..

Traefik est un proxy inverse HTTP moderne et un équilibreur de charge pour les microservices. Traefik facilite le déploiement de tous les microservices, intégré avec des composants d’infrastructure existants tels que Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.

Dans ce tutoriel, nous allons montrer étape par étape comment installer et configurer Ghost en tant que conteneur Docker. Nous allons installer et configurer Ghost sous la dernière version de Docker CE, utiliser MySQL comme base de données et utiliser Traefik comme proxy inverse.

Prérequis

  • Ubuntu 18.04 LTS
  • Privilèges root

Ce que nous allons faire

  1. Installer Docker CE sur Ubuntu 18.04 LTS
  2. Configurer Docker pour un utilisateur non-root
  3. Installer Docker Compose
  4. Configurer la pile Ghost - Créer un réseau personnalisé
    • Créer un répertoire de projet
    • Créer et configurer le conteneur MySQL
    • Créer et configurer le proxy inverse Traefik
    • Créer et configurer le conteneur Ghost
  5. Déployer Ghost avec MySQL et Traefik
  6. Tests

Étape 1 - Installer Docker CE sur Ubuntu 18.04 LTS

La première étape que nous allons faire dans ce tutoriel est d’installer la dernière version de docker-ce du système. La version docker-ce peut être installée à partir du dépôt officiel de docker.

Ajoutez la clé docker et le dépôt docker-ce.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  
sudo add-apt-repository \  
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \  
   $(lsb_release -cs) \  
   stable"

La commande mettra automatiquement à jour tous les dépôts sur le système.

Maintenant, installez docker en utilisant la commande apt ci-dessous.

sudo apt install docker-ce -y

Après l’installation, démarrez le service docker et activez-le pour qu’il se lance à chaque démarrage du système.

systemctl start docker  
systemctl enable docker

La dernière version de docker-ce a été installée sur le système Ubuntu 18.04.

Installation de Docker CE

Étape 2 - Configurer Docker pour un utilisateur non-root

Dans ce guide, tous les microservices de conteneur seront exécutés sous un utilisateur normal/non-root. Nous devons donc configurer l’utilisateur pour pouvoir exécuter le conteneur Docker et exécuter la commande sudo pour obtenir des privilèges root.

Créez un nouvel utilisateur nommé ‘hakase’ et créez le mot de passe.

useradd -m -s /bin/bash hakase  
passwd hakase

Maintenant, assignez l’utilisateur ‘hakase’ aux groupes ‘sudo’ et ‘docker’.

usermod -a -G root hakase  
usermod -a -G docker hakase

Et redémarrez le service docker.

systemctl restart docker

L’utilisateur ‘hakase’ peut maintenant exécuter le conteneur docker et exécuter la commande sudo pour obtenir des privilèges root.

Configurer Docker pour un utilisateur non-root

Connectez-vous en tant qu’utilisateur ‘hakase’ et exécutez le conteneur hello-world de docker.

su - hakase  
docker run -it hello-world

Et voici le résultat.

Tester docker en tant qu'utilisateur non-root

Étape 3 - Installer Docker Compose

Dans ce tutoriel, nous allons installer docker compose 1.21 à partir d’un fichier binaire sur le dépôt Github.

Téléchargez le binaire docker-compose dans le répertoire ‘/usr/local/bin’.

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

Et rendez le fichier ‘docker-compose’ exécutable en changeant les permissions du fichier.

sudo chmod +x /usr/local/bin/docker-compose

Docker compose a été installé - vérifiez-le en utilisant la commande ci-dessous.

docker-compose version  
docker version

Installer Docker Compose

Docker-compose 1.21 avec Docker-ce 1.18 a été installé.

Étape 4 - Configurer la pile Ghost

Dans cette étape, nous allons configurer le docker et créer un nouveau fichier docker-compose pour l’installation de Ghost.

Nous allons créer un nouveau réseau docker personnalisé et créer un nouveau fichier docker-compose yml qui contient trois services principaux, y compris la base de données MySQL, le proxy inverse Traefik et le blog Ghost lui-même.

Créer un réseau personnalisé

Montrez le réseau docker disponible en utilisant la commande docker network ci-dessous.

docker network ls

Créez un nouveau réseau docker personnalisé pour le proxy inverse traefik nommé ‘traefiknet’.

docker network create traefiknet

Maintenant, vérifiez à nouveau le réseau disponible sur le système docker.

docker network ls

Créer un réseau personnalisé

Le réseau personnalisé pour Treafik nommé ‘traefiknet’ a été créé.

Créer un répertoire de projet

Après avoir créé le réseau docker personnalisé, nous allons créer un nouveau répertoire de projet nommé ‘ghost’ et créer un nouveau fichier docker-compose.yml.

Connectez-vous à l’utilisateur ‘hakase’.

su - hakase

Créez un nouveau répertoire ‘ghost’ et changez le répertoire de travail pour y accéder.

mkdir ghost/  
cd ghost/

Et créez un nouveau fichier docker-compose.

touch docker-compose.yml

Créer et configurer le service MySQL

MySQL est le premier service que nous voulons créer, et nous voulons créer le conteneur MySQL avec les configurations ci-dessous.

  • Nous allons utiliser l’image docker MySQL 5.7.
  • Monter le répertoire de données MySQL sur le répertoire local de l’hôte docker.
  • Exécuter le service MySQL sur le réseau interne local.
  • Configurer l’utilisateur et le mot de passe MySQL. - Mot de passe root MySQL : mypassword
  • Base de données pour le ghost nommée ‘ghostdb’ avec l’utilisateur ‘ghost’ et le mot de passe ‘ghostdbpass’
  • Le conteneur MySQL sera nommé ‘mysql’.

À l’intérieur du répertoire ‘ghost’, créez un nouveau répertoire nommé ‘data’ et éditez le fichier ‘docker-compose.yml’.

mkdir -p data/  
vim docker-compose.yml

Collez la configuration ci-dessous.

version: '3.3'

services:

  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    labels:
      - "traefik.enable=false"
    networks:
      - internal
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    container_name: mysql

Enregistrez et quittez.

Créer et configurer le proxy inverse Traefik

Après avoir créé le service MySQL, nous allons créer et configurer le conteneur du proxy inverse traefik.

Avant d’éditer le script ‘docker-compose.yml’, nous devons créer une nouvelle configuration traefik nommée ‘traefik.toml’.

vim traefik.toml

Collez la configuration de règle traefik ci-dessous.

#Configuration globale de Traefik
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Définir le point d'entrée pour HTTP et HTTPS
defaultEntryPoints = ["https","http"]

#Définir le port HTTP 80 et
#Port HTTPS 443 Point d'entrée
#Activer automatiquement la redirection HTTP vers HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Activer le tableau de bord Traefik sur le port 8080
#avec méthode d'authentification de base
#hakase et mot de passe
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Activer la réessai d'envoi d'une requête si l'erreur réseau
[retry]

#Définir la configuration du backend Docker
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Enregistrement Letsencrypt
#Définir le défi HTTP ACME de Letsencrypt
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Enregistrez et quittez.

Maintenant, nous devons créer un nouveau fichier pour la configuration SSL Letsencrypt ‘acme.json’. Il est utilisé pour stocker tous les journaux générés par letsencrypt.

Créez le fichier ‘acme.json’ vide et changez les permissions à 600.

touch acme.json  
chmod 600 acme.json

Ensuite, nous allons éditer le script ‘docker-compose.yml’ et ajouter la configuration du service traefik.

  • Nous allons utiliser la dernière image docker traefik.
  • Le conteneur sera nommé ‘traefik’
  • Il utilise le réseau personnalisé ‘traefiknet’, et expose les ports HTTP et HTTPS.
  • Monter le fichier docker sock et la configuration traefik ‘traefik.toml’ et ‘acme.json’
  • Nous avons défini l’URL du tableau de bord traefik et le backend via les labels docker.

Éditez le ‘docker-compose.yml’.

vim docker-compose.yml

Collez la configuration du service traefik ci-dessous.

  traefik:
    image: traefik:latest
    command: --docker
    ports:
      - 80:80
      - 443:443
    labels:
      - "traefik.enable=true"
      - "traefik.backend=dashboard"
      - "traefik.frontend.rule=Host:traef.hakase-labs.io"
      - "traefik.port=8080"
    networks:
      - traefiknet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    container_name: traefik
    restart: always

Enregistrez et quittez.

Créer et configurer le service Ghost

Après avoir configuré le proxy inverse traefik, nous allons créer la configuration principale du service ghost.

Détails de configuration que nous voulons créer.

  • Nous allons utiliser le ghost v1 et la petite version alpine de docker.
  • Nous allons monter le répertoire de contenu ghost sur le répertoire local nommé ‘blog’.
  • Le service ghost sera exécuté sur le port par défaut avec le nom de domaine ‘gho.hakase-labs.io’, la configuration via les labels docker.
  • Le service ghost utilisera deux réseaux docker, interne et traefiknet.
  • Nous configurons les détails de la base de données MySQL à partir de la configuration du conteneur mysql.
  • Et le ghost sera démarré lorsque le conteneur traefik et MySQL sera en cours d’exécution.

Créez un nouveau répertoire nommé ‘blog’ et éditez le fichier ‘docker-compose.yml’.

mkdir -p blog/  
vim docker-compose.yml

Collez la configuration ci-dessous.

  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368
    volumes:
      - ./blog:/var/lib/ghost/content
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=ghost"
      - "traefik.frontend.rule=Host:gho.hakase-labs.io"
      - "traefik.docker.network=traefiknet"
      - "traefik.port=2368"
    networks:
      - internal
      - traefiknet
    environment:
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    container_name: ghost
    depends_on:
      - mysql
      - traefik  
  
networks:
  traefiknet:
    external: true
  internal:
    external: false

Enregistrez et quittez.

Créer et configurer le service Ghost

Et maintenant, nous avons tous les répertoires et configurations comme indiqué ci-dessous.

tree

fichiers de configuration

Étape 5 - Déployer Ghost avec MySQL et Traefik

Pour construire et exécuter tous nos services de pile ghost, nous pouvons utiliser la commande ci-dessous.

docker-compose up -d

Déployer Ghost avec MySQL et Traefik

Lorsque c’est terminé, vérifiez tous les services en cours d’exécution.

docker-compose ps

Et voici le résultat.

Si vous avez une erreur, vérifiez le journal du conteneur en utilisant les commandes ci-dessous.

docker-compose logs mysql  
docker-compose logs traefik  
docker-compose logs ghost

vérifier le journal du conteneur

La pile ghost avec MySQL et le proxy inverse Traefik est en cours d’exécution.

Étape 6 - Tests

Ouvrez le tableau de bord Traefik avec son URL, la mienne est http://traef.hakase-labs.io/

Connectez-vous avec l’utilisateur et le mot de passe dans le fichier ‘traefik.toml’.

Et voici le tableau de bord Traefik.

tableau de bord Traefik

Pour l’installation de Ghost, tapez l’URL ghost dans la barre d’adresse, la mienne est http://gho.hakase-labs.io/

Et vous obtiendrez la page d’accueil de ghost.

Blog Ghost en cours d'exécution sur Docker

Maintenant, visitez la page d’administration pour configurer et créer un nouvel utilisateur administrateur. Mon URL est : http://gho.hakase-labs.io/admin/

Cliquez sur le bouton vert pour créer un nouvel utilisateur administrateur.

installateur Ghost

Tapez les détails de l’utilisateur, le mot de passe, l’email, et cliquez à nouveau sur le bouton vert.

Créer une connexion administrateur

Pour inviter un nouveau membre ou utilisateur, cliquez sur le lien ‘Je ferai cela plus tard..’.

Inviter des utilisateurs

Maintenant, vous obtiendrez le tableau de bord Ghost.

Tableau de bord Ghost

Et après avoir créé le post d’exemple, voici le résultat.

Blog Ghost en cours d'exécution dans le conteneur Docker

L’installation du blog Ghost avec la base de données MySQL et le proxy inverse Traefik dans l’environnement Docker a été complétée avec succès.

Références

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.