Comment déployer Ghost CMS avec Docker en 15 minutes
Introduction
Vous avez entendu parler de Ghost CMS — la plateforme de blogging moderne, rapide et centrée sur la publication — et vous voulez l'héberger vous-même ? Bonne nouvelle : avec Docker, vous pouvez avoir un blog Ghost 5 entièrement fonctionnel en moins de 15 minutes sur votre propre serveur.
Dans ce tutoriel, je vous montre exactement comment j'ai déployé le blog de BOTUM (blog.botum.ca) avec Ghost 5, Docker Compose, Zoraxy comme reverse proxy SSL, et Cloudflare pour le DNS. Pas de bullshit — juste les commandes réelles, les fichiers réels, les décisions réelles.
Points clés à retenir
- Ghost 5 tourne dans un conteneur Docker léger — zéro dépendance système à installer.
- Un fichier docker-compose.yml suffit pour définir tout l'environnement.
- Le reverse proxy (Zoraxy ou Nginx) gère HTTPS — Ghost n'a pas besoin de connaître les certificats.
- Les données persistent dans /mnt/docker-data/ghost-blog/ — survivent aux mises à jour.
- Cloudflare DDNS + CNAME blog.botum.ca → botum.ca assure la résolution DNS sans IP fixe.
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Un serveur Linux (Ubuntu 22.04+ recommandé) avec accès SSH
- Docker et Docker Compose installés (docker compose v2)
- Un nom de domaine — ici blog.botum.ca via Cloudflare
- Un reverse proxy avec SSL — ici Zoraxy (ou Nginx, Traefik, Caddy)
- Un utilisateur non-root avec accès sudo
- Ports 80 et 443 ouverts sur le pare-feu
Étape 1 — Créer la structure de répertoires
Ghost a besoin d'un espace persistant pour ses fichiers (thèmes, images, DB SQLite). On crée la structure sur le disque hôte :
mkdir -p /mnt/docker-data/ghost-blog/content
# Le dossier content contiendra : data/, images/, themes/, adapters/Pourquoi /mnt/ ? Sur ce serveur, /mnt/ est monté sur un disque séparé — les données Ghost survivent ainsi à une réinstallation du système.

Étape 2 — Créer le fichier docker-compose.yml
Créez le fichier de configuration Docker Compose. Ce fichier définit le conteneur Ghost, les variables d'environnement et les volumes persistants :
nano /mnt/docker-data/ghost-blog/docker-compose.ymlservices:
ghost-blog:
image: ghost:5
container_name: ghost-blog
restart: unless-stopped
ports:
- "4598:4598"
environment:
url: https://blog.botum.ca
NODE_ENV: production
volumes:
- /mnt/docker-data/ghost-blog/content:/var/lib/ghost/content
- /mnt/docker-data/ghost-blog/config.production.json:/var/lib/ghost/config.production.jsonPoints importants : restart: unless-stopped redémarre automatiquement le conteneur au reboot. La variable url doit correspondre exactement à l'URL publique finale avec HTTPS — Ghost l'utilise pour générer tous ses liens internes.
Étape 3 — Créer config.production.json
Ghost lit sa configuration depuis ce fichier JSON. Créez-le avant de démarrer le conteneur :
{
"url": "https://blog.botum.ca",
"server": {
"port": 4598,
"host": "0.0.0.0"
},
"database": {
"client": "sqlite3",
"connection": {
"filename": "/var/lib/ghost/content/data/ghost.db"
}
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": ["stdout"]
},
"process": "local",
"paths": {
"contentPath": "/var/lib/ghost/content"
}
}Étape 4 — Lancer Ghost avec Docker Compose
Démarrez le conteneur en arrière-plan :
cd /mnt/docker-data/ghost-blog
docker compose up -d
Vérifiez que le conteneur tourne :
docker ps | grep ghost-blog
# Attendu : ghost-blog Up X minutes 0.0.0.0:4598->4598/tcp
# Consultez les logs si besoin :
docker logs ghost-blog --tail 50Ghost effectue ses migrations de base de données au premier démarrage — attendez 30 à 60 secondes avant de tester.
Étape 5 — Configurer le DNS Cloudflare
Dans le dashboard Cloudflare, configurez :

- Un enregistrement A botum.ca → IP publique de votre serveur (activez Cloudflare Proxy ☁️)
- Un enregistrement CNAME blog → botum.ca (proxié)
- Optionnel : DDNS automatique via un script ou l'addon Cloudflare DDNS si votre IP change
Résultat : blog.botum.ca résout vers l'IP de votre serveur via Cloudflare, avec protection DDoS et cache CDN gratuits.
Étape 6 — Configurer Zoraxy comme reverse proxy SSL
Zoraxy est un reverse proxy moderne avec interface web et gestion SSL automatique (Let's Encrypt). Dans l'interface Zoraxy, ajoutez une règle de proxy :
- Domaine entrant : blog.botum.ca
- Destination : http://localhost:4598 (ou l'IP interne du serveur)
- SSL : activé — Zoraxy génère automatiquement le certificat Let's Encrypt
- HTTPS redirect : activé
Ghost tourne sur le port 4598 en HTTP simple — Zoraxy se charge de la terminaison TLS. C'est la séparation des responsabilités : Ghost fait du contenu, Zoraxy fait la sécurité.

Étape 7 — Première connexion et configuration Ghost
Accédez à https://blog.botum.ca/ghost pour créer votre compte administrateur. Complétez l'assistant de configuration initiale :
- Nom du blog, description
- Compte administrateur (email + mot de passe solide)
- Thème — le thème Source est installé par défaut sur Ghost 5
Votre blog Ghost est maintenant opérationnel. Testez l'accès public sur https://blog.botum.ca — vous devriez voir la page d'accueil Ghost.
Commandes utiles pour la maintenance
# Mettre à jour Ghost vers la dernière version 5.x
docker compose pull && docker compose up -d
# Sauvegarder la base de données SQLite
cp /mnt/docker-data/ghost-blog/content/data/ghost.db ~/backup-ghost-$(date +%Y%m%d).db
# Voir les logs en temps réel
docker logs ghost-blog -f
# Redémarrer Ghost sans perdre les données
docker compose restart ghost-blogConclusion
En moins de 15 minutes, vous avez un blog Ghost 5 self-hosted, sécurisé avec HTTPS, accessible publiquement via Cloudflare et Zoraxy. Vos données sont persistantes, le conteneur redémarre automatiquement, et les mises à jour se font en deux commandes.
Les prochaines étapes : configurer l'envoi d'emails (Mailgun ou SMTP), installer un thème personnalisé, activer les membres et abonnements Ghost, et mettre en place des sauvegardes automatiques de la DB.
Passez à l'action
Si ce tutoriel vous a été utile, abonnez-vous au blog BOTUM pour recevoir les prochains articles sur l'auto-hébergement, Docker, et les outils open-source. Des questions sur votre configuration ? Laissez un commentaire ci-dessous — je réponds à chaque message.
Téléchargez ce guide en PDF pour le consulter hors ligne.
⬇ Télécharger le guide (PDF)🚀 Aller plus loin avec BOTUM
Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.
Discuter de votre projet →