Ghost CMS
A self-hosted Ghost CMS stack for professional publishing, backed by MySQL 8.0 for content storage and fronted by Nginx as a reverse proxy. Ghost 5 provides a modern editor, membership and subscription management, newsletter delivery, and a customizable theme engine out of the box. Nginx handles SSL termination, static asset caching, and request proxying to the Ghost Node.js application on the internal network. MySQL is tuned with InnoDB optimizations and health checks ensure correct startup ordering across all services. Ghost content (images, themes, and settings) is persisted in a named volume, making backups and migrations straightforward.
Services Inclus
nginx
nginx:1.27-alpine
ghost
ghost:5-alpine
Variables d'Environnement :
mysql
mysql:8.0
Variables d'Environnement :
YAML Généré
# Generated by ComposeHub (composehub.dev)
name: ghost-mysql
services:
nginx:
image: nginx:1.27-alpine
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- nginx_conf:/etc/nginx/conf.d
networks:
- frontend
- backend
depends_on:
ghost:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- curl -f http://localhost/ || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
deploy:
resources:
limits:
cpus: "0.50"
memory: 256M
reservations:
cpus: "0.10"
memory: 64M
labels:
com.composeforge.description: Nginx reverse proxy for Ghost CMS
ghost:
image: ghost:5-alpine
restart: unless-stopped
expose:
- "2368"
volumes:
- ghost_content:/var/lib/ghost/content
environment:
url: ${GHOST_URL:-http://localhost}
database__client: mysql
database__connection__host: mysql
database__connection__port: "3306"
database__connection__user: ${MYSQL_USER:-ghost}
database__connection__password: ${MYSQL_PASSWORD:-changeme}
database__connection__database: ${MYSQL_DATABASE:-ghost}
mail__transport: ${GHOST_MAIL_TRANSPORT:-Direct}
mail__from: ${GHOST_MAIL_FROM:[email protected]}
mail__options__host: ${GHOST_SMTP_HOST:-}
mail__options__port: ${GHOST_SMTP_PORT:-587}
mail__options__auth__user: ${GHOST_SMTP_USER:-}
mail__options__auth__pass: ${GHOST_SMTP_PASSWORD:-}
NODE_ENV: production
networks:
- backend
depends_on:
mysql:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- wget --no-verbose --tries=1 --spider http://localhost:2368/ghost/api/admin/site/ || exit 1
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.25"
memory: 128M
labels:
com.composeforge.description: Ghost 5 CMS Node.js application
mysql:
image: mysql:8.0
restart: unless-stopped
command:
- "--default-authentication-plugin=caching_sha2_password"
- "--innodb-buffer-pool-size=256M"
- "--innodb-log-file-size=64M"
- "--innodb-flush-method=O_DIRECT"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
- "--max-connections=100"
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootchangeme}
MYSQL_DATABASE: ${MYSQL_DATABASE:-ghost}
MYSQL_USER: ${MYSQL_USER:-ghost}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-changeme}
networks:
- backend
healthcheck:
test:
- CMD
- mysqladmin
- ping
- "-h"
- localhost
- "-u"
- root
- "-p${MYSQL_ROOT_PASSWORD:-rootchangeme}"
interval: 15s
timeout: 5s
retries: 5
start_period: 60s
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
labels:
com.composeforge.description: MySQL 8.0 database for Ghost CMS
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
ghost_content:
driver: local
mysql_data:
driver: local
nginx_conf:
driver: local
Informations Rapides
- Services
- 3
- Réseaux
- 2
- Volumes
- 3
Quand l'Utiliser
Ce modèle est idéal pour mettre en place un environnement ghost cms Tous les services sont préconfigurés avec des healthchecks, des limites de ressources et des valeurs par défaut raisonnables. Personnalisez les variables d'environnement avant de déployer en production.
Conseils
- Changez tous les mots de passe par défaut avant le déploiement
- Vérifiez les limites de ressources pour votre matériel
- Ajoutez un reverse proxy pour le HTTPS en production
- Configurez des stratégies de sauvegarde pour les volumes de données