Aujourd’hui nous allons voir comment lancer un nouveau blog avec Ghost sur un VPS disposant de docker-compose. Les instructions sont les mêmes peu importe l’OS, c’est tout l’intérêt de docker.
Configuration de docker-compose pour Ghost
Créer un fichier docker-compose.yml avec le contenu suivant :
version: '2.3'
services:
ghost:
image: ghost:latest
container_name: ghost
hostname: ghost
volumes:
- ./config.production.json:/var/lib/ghost/config.production.json:z
- ghost:/var/lib/ghost/content
environment:
NODE_ENV: production
VIRTUAL_PROTO: http
VIRTUAL_HOST: nicolaskempf.fr
VIRTUAL_PORT: 80
LETSENCRYPT_HOST: nicolaskempf.fr
LETSENCRYPT_EMAIL: contact@nicolaskempf.fr
restart: always
networks:
- nginx-proxy
- ghost
links:
- mysql
mysql:
image: mysql:5.7
container_name: mysql
volumes:
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ROOT_PASSWORD
MYSQL_USER: nicolas
MYSQL_PASSWORD: MY_PASSWORD
MYSQL_DATABASE: ghost
restart: always
networks:
- ghost
networks:
nginx-proxy:
external: true
ghost:
name: ghost
volumes:
ghost: {}
db: {}
J’utilise nginx-proxy et letsencrypt-nginx-proxy-companion pour faire le lien entre mes containers et mes noms de domaines.
Il est possible de faire fonctionner le blog sans proxy en ajustant un peu les propriétés :
version: '2.3'
services:
ghost:
image: ghost:latest
container_name: ghost
hostname: ghost
volumes:
- ./config.production.json:/var/lib/ghost/config.production.json:z
- ghost:/var/lib/ghost/content
environment:
NODE_ENV: production
restart: always
ports:
- "80:80"
networks:
- nginx-proxy
- ghost
links:
- mysql
mysql:
image: mysql:5.7
container_name: mysql
volumes:
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ROOT_PASSWORD
MYSQL_USER: nicolas
MYSQL_PASSWORD: MY_PASSWORD
MYSQL_DATABASE: ghost
restart: always
networks:
- ghost
networks:
nginx-proxy:
external: true
ghost:
name: ghost
volumes:
ghost: {}
db: {}
Configuration du container ghost
Pour Ghost, on fournir un fichier de configuration JSON avec les informations de la base de données.
{
"url": "https://nicolaskempf.fr",
"server": {
"port": 2368,
"host": "0.0.0.0"
},
"database": {
"client": "mysql",
"connection": {
"host": "mysql",
"port": 3306,
"user": "nicolas",
"password": "MY_PASSWORD",
"database": "ghost",
"charset": "utf8mb4"
}
},
"mail": {
"from": "'Nicolas KEMPF' <contact@nicolaskempf.fr>",
"transport": "SMTP",
"logger": true,
"options": {
"host": "",
"secureConnection": false,
"auth": {
"user": "",
"pass": ""
}
}
},
"logging": {
"transports": [
"file",
"stdout"
]
},
"process": "systemd",
"paths": {
"contentPath": "/var/lib/ghost/content"
}
}
Si tout se passe bien, Ghost se lance et crée les tables nécessaires à son fonctionnement dans la db.
Au niveau de MySQL, il n'y a rien à faire, les variables d'environnement suffisent. Il est possible que vous aillez des erreurs au démarrage des services, le temps que mysql accepte les connexions. Pour le résoudre, il faudra ajouter un endpoint à ghost pour ne pas démarrer le conteneur tant qu'il n'arrive pas à se connecter à la db.
Si jamais vous rencontrez l'erreur suivante, il suffit de supprimer le volume db et recommencer :
ER_HOST_NOT_PRIVILEGED: Host '172.30.0.3' is not allowed to connect to this MySQL server
Une fois le démarrage terminé, votre site est accessible à l’url choisie. Il ne vous reste plus qu’à vous rendre sur /ghost
pour créer votre compte administrateur.
Article publié sur https://www.nicolaskempf.fr/installer-ghost-avec-docker/
Top comments (1)
Nice post. How do you include SMTP mail in docker-compose?