4 KiB
title | description | published | date | tags | editor | dateCreated |
---|---|---|---|---|---|---|
Ghost | true | 2025-08-28T18:33:53.128Z | markdown | 2025-08-28T18:07:31.592Z |
Ghost est un CMS open-source, rapide et moderne, orienté blogging et publication de contenu. Ce guide décrit comment déployer Ghost dans un environnement conteneurisé avec Docker Compose, en utilisant une base de données MySQL et un reverse proxy Traefik pour la gestion du HTTPS.
Arborescence du projet
ghost/
│── docker-compose.yml
│── content/ # Contenu Ghost (thèmes, images, config)
│── db/ # Données MySQL
│── .env # Variables d’environnement
Fichier docker-compose.yml
services:
ghost:
image: ghost:alpine
container_name: ${SERVICE}
restart: always
environment:
database__client: mysql
database__connection__host: ${SERVICE}_db
database__connection__user: ${MYSQL_USER}
database__connection__password: ${MYSQL_PASSWORD}
database__connection__database: ${MYSQL_DATABASE}
mail__transport: "SMTP"
mail__from: ${MAIL_FROM}
mail__options__host: ${MAIL_HOST}
mail__options__port: ${MAIL_PORT}
mail__options__secure: ${MAIL_SECURE}
mail__options__auth__user: ${MAIL_SECURE}
mail__options__auth__pass: ${MAIL_PASS}
url: "https://${DOMAIN}/"
volumes:
- ./content:/var/lib/ghost/content
networks:
- traefik_net
- ghost_net
depends_on:
- ghost_db
labels:
- "traefik.enable=true"
- "traefik.http.routers.ghost.rule=Host(`echo.blasseye.fr`)"
- "traefik.http.routers.ghost.entrypoints=websecure"
- "traefik.http.routers.ghost.tls=true"
- "traefik.http.routers.ghost.tls.certresolver=http"
- "traefik.http.routers.ghost.service=ghost"
- "traefik.http.services.ghost.loadbalancer.server.port=2368"
- "traefik.docker.network=traefik_net"
ghost_db:
image: mysql:8
container_name: ${SERVICE}_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
volumes:
- ./db:/var/lib/mysql
networks:
- ghost_net
networks:
traefik_net:
external: true
ghost_net:
name: ${SERVICE}_net
driver: bridge
🔐 Variables d’environnement (.env
)
Exemple de fichier .env
:
SERVICE=ghost_blog
# Domaine
DOMAIN=blog.example.com
# Base de données
MYSQL_ROOT_PASSWORD=superpassword
MYSQL_USER=ghost
MYSQL_PASSWORD=ghostpass
MYSQL_DATABASE=ghostdb
# Mail (SMTP)
MAIL_FROM="Ghost Blog <noreply@example.com>"
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_SECURE=false
MAIL_USER=smtp_user
MAIL_PASS=smtp_pass
Déploiement
- Créez les répertoires nécessaires :
mkdir -p ghost/content ghost/db
-
Placez le fichier
docker-compose.yml
et.env
dans le dossierghost/
. -
Lancez le déploiement :
docker compose up -d
- Vérifiez que les conteneurs tournent :
docker ps
Accès
-
L’interface Ghost sera disponible à : https://blog.example.com
-
L’administration est accessible via : https://blog.example.com/ghost
Points importants
-
Sauvegardes :
./content
contient tous les fichiers Ghost (images, thèmes, config)../db
contient la base de données MySQL.
-
Traefik gère automatiquement les certificats SSL via Let’s Encrypt.
-
Scalabilité : Ghost est prévu pour un usage monolithique, mais peut être déployé derrière un load balancer.
Conclusion
Avec cette configuration, vous disposez d’un CMS Ghost auto-hébergé, sécurisé avec HTTPS grâce à Traefik, et supportant une base MySQL persistante. Idéal pour héberger un blog personnel ou professionnel tout en gardant la maîtrise complète de vos données.