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
- Installer Docker CE sur Ubuntu 18.04 LTS
- Configurer Docker pour un utilisateur non-root
- Installer Docker Compose
- 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
- Déployer Ghost avec MySQL et Traefik
- 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 -yAprè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 dockerLa dernière version de docker-ce a été installée sur le système Ubuntu 18.04.

É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 hakaseMaintenant, assignez l’utilisateur ‘hakase’ aux groupes ‘sudo’ et ‘docker’.
usermod -a -G root hakase
usermod -a -G docker hakaseEt redémarrez le service docker.
systemctl restart dockerL’utilisateur ‘hakase’ peut maintenant exécuter le conteneur docker et exécuter la commande sudo pour obtenir des privilèges root.

Connectez-vous en tant qu’utilisateur ‘hakase’ et exécutez le conteneur hello-world de docker.
su - hakase
docker run -it hello-worldEt voici le résultat.

É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-composeEt rendez le fichier ‘docker-compose’ exécutable en changeant les permissions du fichier.
sudo chmod +x /usr/local/bin/docker-composeDocker compose a été installé - vérifiez-le en utilisant la commande ci-dessous.
docker-compose version
docker version
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 lsCréez un nouveau réseau docker personnalisé pour le proxy inverse traefik nommé ‘traefiknet’.
docker network create traefiknetMaintenant, vérifiez à nouveau le réseau disponible sur le système docker.
docker network ls
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 - hakaseCré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.ymlCré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.ymlCollez 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: mysqlEnregistrez 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.tomlCollez 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.jsonEnsuite, 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.ymlCollez 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: alwaysEnregistrez 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.ymlCollez 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: falseEnregistrez et quittez.

Et maintenant, nous avons tous les répertoires et configurations comme indiqué ci-dessous.
tree
É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
Lorsque c’est terminé, vérifiez tous les services en cours d’exécution.
docker-compose psEt 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
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.

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.

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.

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

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

Maintenant, vous obtiendrez le tableau de bord Ghost.

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

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
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.