Comment déployer un blog fantôme avec Docker – CloudSavvy IT
Ghost est une plate-forme de création de contenu populaire écrite en JavaScript avec Node.js. Le logiciel open source est livré avec tout ce dont vous avez besoin pour créer, thème, publier et gérer votre propre blog.
Ghost est un logiciel open source pris en charge par le service hébergé officiel Ghost (Pro). Vous pouvez l’installer sur votre propre serveur en ajoutant Node.js et en utilisant Ghost CLI pour configurer votre pile. Ghost est également disponible en tant qu’image Docker qui regroupe toutes les dépendances pour vous.
Dans ce guide, nous utiliserons Docker pour rendre rapidement opérationnel un nouveau blog Ghost. Installez Docker et Docker Compose sur votre hôte avant de continuer. Alors que vous pouvez déployer Ghost en utilisant Docker seul, Compose simplifie la fourniture et la gestion des valeurs de configuration dont votre site aura besoin pour démarrer.
Sommaire
Démarrer un conteneur fantôme
Vous pouvez démarrer un site Ghost de base avec une seule commande Docker :
docker run -d -p 2368:2368 --name simple-ghost ghost:4
Cela fera apparaître Ghost sur son port par défaut de 2368. Visitez http://localhost:2368
pour voir votre site ou http://localhost:2368/ghost
pour accéder au panneau d’administration de Ghost. Vous devrez fournir certains paramètres de première exécution pour finaliser votre installation Ghost et créer un compte utilisateur initial.
Cette approche est idéale pour une expérimentation rapide si vous essayez simplement Ghost. Cependant, nous n’avons pas encore configuré le stockage persistant, vos données seront donc perdues lorsque le conteneur s’arrêtera.
Voici un exemple plus complet qui utilise Docker Compose pour configurer Ghost avec un volume Docker. Monter un volume sur le /var/lib/ghost/content
répertoire pour stocker les données de Ghost en dehors du conteneur.
version: "3" services: ghost: image: ghost:4 ports: - 8080:2368 environment: url: https://ghost.example.com volumes: - ghost:/var/lib/ghost/content restart: unless-stopped volumes: ghost:
Ce fichier Compose présente quelques autres modifications apportées à la configuration du conteneur. Le port 2368 exposé par le conteneur est mappé sur le port 8080 de votre hôte, ce qui vous permet d’utiliser localhost:8080
pour accéder à Ghost. La stratégie de redémarrage est modifiée en unless-stopped
pour vous assurer que votre site s’affiche automatiquement après le redémarrage de votre hôte.
Utilisez maintenant Compose pour afficher votre site :
docker-compose up -d
Configuration de Ghost
Ghost prend en charge plusieurs paramètres de configuration pour personnaliser son fonctionnement et paramétrer votre site. Lorsque vous utilisez Docker, vous pouvez fournir ces valeurs en tant que variables d’environnement.
Les fichiers de configuration de Ghost utilisent des objets JSON imbriqués pour stocker des valeurs. Vous pouvez convertir les clés JSON en leurs homologues de variables d’environnement en remplaçant chaque niveau d’arborescence par __
caractères (double trait de soulignement) :
# in a JSON config file { "mail": { "transport": "SMTP" } } # as an environment variable mail__transport=SMTP
Utilisez le environment
champ dans votre docker-compose.yml
file pour fournir ces paramètres à votre conteneur Ghost :
version: "3" services: ghost: environment: mail__transport: SMTP
Reportez-vous à la documentation de Ghost pour une liste exhaustive des options prises en charge. Vous pouvez configurer un système de messagerie, utiliser une URL distincte pour accéder au panneau d’administration, remplacer les chemins de répertoire et basculer les options de confidentialité via les variables d’environnement disponibles.
le url
L’option est particulièrement importante car elle est requise pour les sites de production en direct. Ceci définit l’URL que les visiteurs externes utiliseront pour accéder à votre site. Définissez ceci sur le nom de domaine de votre site dans votre docker-compose.yml
:
environment: url: https://ghost.example.com
Utilisation d’une base de données externe
Par défaut, Ghost utilise une base de données SQLite stockée sous forme de fichier dans le répertoire de contenu de votre site. Il sera conservé dans le cadre du volume Docker créé ci-dessus. Vous pouvez utiliser une base de données MySQL externe à la place en fournissant les détails de connexion via database
-variables d’environnement préfixées :
services: ghost: # ... environment: database__client: mysql database__connection__host: ghost_mysql database__connection__user: root database__connection__password: databasePw database__connection__database: ghost ghost_mysql: image: mysql:5.7 expose: - 3306 environment: MYSQL_DATABASE: ghost MYSQL_ROOT_PASSWORD: databasePw volumes: - mysql:/var/lib/mysql restart: unless-stopped volumes: mysql:
Ce fichier Compose inclut un autre service qui exécute MySQL dans un conteneur supplémentaire. Les variables d’environnement sont définies sur le service Ghost pour fournir les détails de connexion MySQL. Un séparé mysql
volume est créé pour conserver les fichiers de stockage de la base de données.
Compose relie automatiquement les services à un réseau Docker. Le fantôme peut atteindre le ghost_mysql
conteneur en utilisant le nom du service comme nom d’hôte. Si vous souhaitez utiliser une base de données MySQL non Dockerisée existante, vous pouvez supprimer le ghost_mysql
définition de service et fournissez l’adresse IP de votre serveur MySQL, le nom du schéma de base de données et les informations d’identification de l’utilisateur à la place.
Proxy du trafic vers votre conteneur
Maintenant, votre site Ghost devrait être opérationnel mais il est toujours exposé sur le port 8080. Si vous n’exécutez rien d’autre sur votre hôte, vous pouvez lier le port 80 ou 443 à la place pour le rendre directement accessible via le nom de domaine de votre serveur. Dans d’autres situations, utilisez un proxy inverse tel que NGINX pour transférer le trafic du Web vers votre conteneur Ghost.
Ajoutez NGINX à votre hôte :
sudo apt update sudo apt install nginx # Allow HTTP/HTTPS traffic through the firewall sudo ufw allow 80 sudo ufw allow 443
Définissez un hôte NGINX pour votre site dans /etc/nginx/sites-available/ghost.example.com
:
server { server_name ghost.example.com; index index.html; access_log /var/log/nginx/ghost_access.log error_log /var/log/nginx/ghost_error.log error; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Original-IP $remote_addr; } }
Ce fichier configure NGINX pour transférer le trafic vers ghost.example.com
via le port 8080 sur localhost
, qui était auparavant lié à votre conteneur Ghost. Activez le nouveau fichier de configuration en le liant à NGINX sites-enabled
annuaire:
sudo ln -s /etc/nginx/sites-available/ghost.example.com /etc/nginx/sites-enabled/ghost.example.com
Redémarrez NGINX pour appliquer vos modifications :
sudo service nginx restart
Vous pouvez maintenant configurer SSL avec le service gratuit Let’s Encrypt. Ajoutez le Certbot de Let’s Encrypt pour automatiser l’émission et le renouvellement des certificats :
sudo apt install certbot
Utilisez Certbot pour obtenir des certificats pour votre site NGINX :
sudo certbot --nginx
Certbot lira vos sites NGINX et générera des certificats pour leur server_name
champs de configuration. Il reconfigurera automatiquement NGINX pour servir le certificat avec votre site. Vous devriez maintenant pouvoir accéder à votre blog Ghost en visitant votre nom de domaine via HTTPS.
Bien que nous nous soyons concentrés sur NGINX dans cet article, il existe d’autres options pour envoyer par proxy le trafic Web vers votre conteneur Ghost. Traefik est un concurrent de premier plan qui bénéficie d’un support de premier ordre pour Docker. Le déploiement d’une instance Traefik vous permettrait de configurer le routage et le SSL automatique via les étiquettes Docker que vous auriez définies sur votre conteneur Ghost.
Gestion des mises à jour fantômes
Vous pouvez mettre à jour Ghost en remplaçant le conteneur Docker de votre site par un nouveau contenant une version mise à jour de l’image Ghost. Comme le contenu de votre site est stocké en toute sécurité dans un volume Docker séparé, il sera conservé lorsque le volume sera rattaché au nouveau conteneur.
Si vous balisez une version d’image majeure dans votre docker-compose.yml
, tel que ghost:4
, vous pouvez mettre à jour vers la dernière version mineure en exécutant docker-compose up
avec le --pull
drapeau:
docker-compose up -d --pull
Cela indique à Compose de vérifier les modifications apportées à la balise d’image et d’extraire une version mise à jour lorsqu’elle est disponible. Il remplacera vos conteneurs par de nouvelles instances en utilisant la dernière version d’image qui correspond à la balise.
Lorsque vous souhaitez modifier la balise que vous utilisez, mettez à jour le image
référence dans votre docker-compose.yml
déposer. Répéter docker-compose up -d
pour extraire l’image et démarrer de nouveaux conteneurs. Par exemple, si Ghost v5 sort à l’avenir, vous pouvez modifier votre docker-compose.yml
à image: ghost:5
pour passer à la nouvelle version majeure.
Docker facilite l’obtention des mises à jour de Ghost en extrayant la dernière image et en remplaçant vos conteneurs. Néanmoins, vous devez toujours faire attention aux modifications que vous appliquez. Consultez le journal des modifications de Ghost avant d’effectuer une mise à niveau majeure au cas où vous auriez besoin de prendre des mesures supplémentaires pour terminer la migration.
Utilisation de ghost-cli
ghost-cli
est disponible dans l’image Ghost Docker. Cet utilitaire est utilisé pour configurer et maintenir Ghost lorsqu’il est installé dans des environnements traditionnels non conteneurisés.
Vous pouvez accéder ghost-cli
via Docker en utilisant le ghost
commande avec docker exec
. Voici un exemple qui utilise le version
sous-commande pour révéler la version de Ghost que vous utilisez :
docker exec -it my-ghost-container ghost version
Bien que beaucoup ghost-cli
composants fonctionneront, certains ne sont pas pris en charge dans les environnements Dockerized. Des commandes telles que install
, setup
, update
, et uninstall
sont soit cassés, sans signification ou contraires aux meilleures pratiques lorsqu’ils sont utilisés avec l’image Docker de Ghost. Ghost et toutes ses dépendances sont intégrés à l’image et n’ont pas besoin d’être « installés » ; les mises à jour doivent être appliquées en démarrant un nouveau conteneur, comme indiqué ci-dessus.
Résumé
Ghost est une plate-forme de blogs moderne qui offre un tableau de bord propre, des capacités de création de contenu riches et une prise en charge avancée des thèmes et de la personnalisation. L’utilisation de Docker pour héberger Ghost simplifie la procédure de configuration, réduit le nombre de packages de système d’exploitation dont vous avez besoin et contribue à rendre votre site plus portable d’un environnement à l’autre.
Une fois votre blog Dockerisé opérationnel, utilisez la documentation de développement standard de Ghost pour gérer votre site et son contenu. Vous pouvez configurer des abonnements, des newsletters, des thèmes personnalisés et des intégrations d’API à l’aide des fonctionnalités intégrées de la plateforme.