Ghost est une puissante plateforme de publication et de blog open source basée sur nodejs. Il est bien conçu et facile à utiliser. La plateforme fantôme est écrite en JavaScript et utilise node.js comme environnement d'exécution. La première version de Ghost sortie en 2013 sous licence MIT..
Traefik est un proxy inverse HTTP moderne et un équilibreur de charge pour les microservices. Traefik facilite le déploiement de tous les microservices, en les intégrant aux composants d'infrastructure existants tels que Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.
Dans ce didacticiel, nous allons montrer étape par étape comment installer et configurer Ghost en tant que conteneur Docker. Nous installerons et configurerons Ghost sous la dernière version de Docker CE, utiliserons MySQL comme base de données et utiliserons Traefik comme proxy inverse.
Prérequis
- Ubuntu 18.04 LTS
- Privilèges root
Ce que nous allons faire
- Installer Docker CE sur Ubuntu 18.04 LTS
- Configurer Docker pour un utilisateur non root
- Installer Docker Compose
- Configurer la pile fantôme
- Créer un réseau personnalisé
- Créer un répertoire de projets
- Créer et configurer un conteneur MySQL
- Créer et configurer le proxy inverse Traefik
- Créer et configurer un conteneur fantôme
- Déployer Ghost avec MySQL et Traefik
- Test
Étape 1 - Installer Docker CE sur Ubuntu 18.04 LTS
La première étape que nous ferons dans ce tutoriel consiste à installer la dernière version docker-ce du système. La version docker-ce peut être installée à partir du référentiel officiel de docker.
Ajoutez la clé docker et le référentiel docker-ce.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
La commande mettra automatiquement à jour tous les référentiels du système.
Installez maintenant docker à l'aide de la commande apt ci-dessous.
sudo apt install docker-ce -y
Une fois l'installation terminée, démarrez le service Docker et activez-le pour qu'il se lance à chaque fois au démarrage du système.
systemctl start docker
systemctl enable docker
La dernière version de docker-ce a été installée sur le système Ubuntu 18.04.
Étape 2 - Configurer Docker pour un utilisateur non root
Dans ce guide, tous les microservices de conteneur seront exécutés sous l'utilisateur normal/non root. Nous devons donc configurer l'utilisateur pour qu'il puisse exécuter le conteneur Docker et exécuter la commande sudo pour les privilèges root.
Créez un nouvel utilisateur nommé 'hakase' et créez le mot de passe.
useradd -m -s /bin/bash hakase
passwd hakase
Attribuez maintenant l'utilisateur 'hakase' aux groupes 'sudo' et 'docker'.
usermod -a -G root hakase
usermod -a -G docker hakase
Et redémarrez le service docker.
systemctl restart docker
Le 'hakase' peut maintenant exécuter le conteneur docker et exécuter la commande sudo pour les privilèges root.
Connectez-vous en tant qu'utilisateur "hakase" et exécutez le conteneur docker hello-world.
su - hakase
docker run -it hello-world
Et voici le résultat.
Étape 3 - Installer Docker Compose
Dans ce tutoriel, nous allons installer le docker compose 1.21 à partir d'un fichier binaire sur le dépôt Github.
Téléchargez le binaire docker-compose dans le répertoire '/usr/local/bin'.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
Et rendez le fichier 'docker-compose' exécutable en modifiant l'autorisation du fichier.
sudo chmod +x /usr/local/bin/docker-compose
Le docker compose a été installé - vérifiez-le à l'aide de la commande ci-dessous.
docker-compose version
docker version
Docker-compose 1.21 avec Docker-ce 1.18 a été installé.
Étape 4 - Configurer Ghost Stack
Dans cette étape, nous allons configurer le docker et créer un nouveau fichier docker-compose pour l'installation fantôme.
Nous allons créer un nouveau réseau personnalisé docker et créer un nouveau fichier yml composé par docker qui contient trois services principaux, notamment la base de données MySQL, le proxy inverse Traefik et le blog Ghost lui-même.
Créer un réseau personnalisé
Affichez le réseau docker disponible à l'aide de la commande docker network ci-dessous.
docker network ls
Créez un nouveau réseau docker personnalisé pour le proxy inverse traefik nommé "traefiknet".
docker network create traefiknet
Vérifiez à nouveau le réseau disponible sur le système docker.
docker network ls
Le réseau personnalisé pour Treafik nommé 'traefiknet' a été créé.
Créer un répertoire de projet
Après avoir créé le réseau personnalisé docker, nous allons créer un nouveau répertoire de projet nommé "ghost" et créer un nouveau fichier docker-compose.yml.
Connectez-vous à l'utilisateur 'hakase'.
su - hakase
Créez un nouveau répertoire "fantôme" et modifiez-le comme répertoire de travail.
mkdir ghost/
cd ghost/
Et créez un nouveau fichier docker-compose.
touch docker-compose.yml
Créer et configurer le service MySQL
MySQL est le premier service que nous voulons créer, et nous voulons créer le conteneur MySQL avec les configurations ci-dessous.
- Nous utiliserons l'image docker MySQL 5.7.
- Montez le répertoire de données MySQL dans le répertoire hôte Docker local.
- Exécution du service MySQL sur le réseau interne local
- Configurer l'utilisateur et le mot de passe MySQL.
- Mot de passe racine MySQL :mypassword
- Base de données pour le fantôme nommé 'ghostdb' avec l'utilisateur 'ghost' et le mot de passe 'ghostdbpass'
- Le conteneur MySQL sera nommé "mysql".
Dans le répertoire 'ghost', créez un nouveau répertoire nommé 'data' et modifiez le fichier 'docker-compose.yml'.
mkdir -p data/
vim docker-compose.yml
Collez la configuration ci-dessous.
version: '3.3' services: mysql: image: mysql:5.7 restart: always volumes: - ./data:/var/lib/mysql labels: - "traefik.enable=false" networks: - internal environment: MYSQL_ROOT_PASSWORD: mypassword MYSQL_USER: ghost MYSQL_PASSWORD: ghostdbpass MYSQL_DATABASE: ghostdb container_name: mysql
Enregistrez et quittez.
Créer et configurer le proxy inverse Traefik
Après avoir créé le service MySQL, nous allons créer et configurer le conteneur de proxy inverse traefik.
Avant de modifier le script 'docker-compose.yml', nous devons créer une nouvelle configuration traefik nommée 'traefik.toml'.
vim traefik.toml
Collez la configuration de la règle traefik ci-dessous.
#Traefik Global Configuration debug = false checkNewVersion = true logLevel = "ERROR" #Define the EntryPoint for HTTP and HTTPS defaultEntryPoints = ["https","http"] #Define the HTTP port 80 and #HTTPS port 443 EntryPoint #Enable automatically redirect HTTP to HTTPS [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] #Enable Traefik Dashboard on port 8080 #with basic authentication method #hakase and password [entryPoints.dash] address=":8080" [entryPoints.dash.auth] [entryPoints.dash.auth.basic] users = [ "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.", ] [api] entrypoint="dash" dashboard = true #Enable retry sending a request if the network error [retry] #Define Docker Backend Configuration [docker] endpoint = "unix:///var/run/docker.sock" domain = "hakase-labs.io" watch = true exposedbydefault = false #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "[email protected]" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http"
Enregistrez et quittez.
Nous devons maintenant créer un nouveau fichier pour la configuration SSL Letsencrypt 'acme.json'. Il est utilisé pour stocker tous les letencrypt générer un journal.
Créez le fichier 'acme.json' vierge et changez l'autorisation en 600.
touch acme.json
chmod 600 acme.json
Ensuite, nous allons modifier le script 'docker-compose.yml' et ajouter la configuration du service traefik.
- Nous utiliserons la dernière image traefik docker.
- Le conteneur sera nommé 'traefik'
- Il utilise le réseau personnalisé "traefiknet" et expose les ports HTTP et HTTPS.
- Montez le fichier docker sock et la configuration traefik 'traefik.toml' et 'acme.json'
- Nous avons défini l'URL et le backend du tableau de bord traefik via les libellés Docker.
Modifiez le 'docker-compose.yml'.
vim docker-compose.yml
Collez la configuration du service traefik ci-dessous.
traefik: image: traefik:latest command: --docker ports: - 80:80 - 443:443 labels: - "traefik.enable=true" - "traefik.backend=dashboard" - "traefik.frontend.rule=Host:traef.hakase-labs.io" - "traefik.port=8080" networks: - traefiknet volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml - ./acme.json:/acme.json container_name: traefik restart: always
Enregistrez et quittez.
Créer et configurer le service fantôme
Après avoir configuré le proxy inverse traefik, nous allons créer la configuration principale du service fantôme.
Détails de configuration que nous voulons créer.
- Nous utiliserons le ghost v1 et la petite version docker alpine.
- Nous allons monter le répertoire de contenu fantôme dans le répertoire local nommé "blog".
- Le service fantôme s'exécutera sur le port par défaut avec le nom de domaine "gho.hakase-labs.io", la configuration via les libellés docker.
- Le service fantôme utilisera deux réseaux Docker, interne et traefiknet.
- Nous configurons les détails de la base de données MySQL à partir de la configuration du conteneur mysql.
- Et le fantôme sera démarré lorsque le conteneur traefik et MySQL sera opérationnel.
Créez un nouveau répertoire nommé 'blog' et modifiez le fichier 'docker-compose.yml'.
mkdir -p blog/
vim docker-compose.yml
Collez la configuration ci-dessous.
ghost: image: ghost:1-alpine restart: always ports: - 2368 volumes: - ./blog:/var/lib/ghost/content labels: - "traefik.enabled=true" - "traefik.backend=ghost" - "traefik.frontend.rule=Host:gho.hakase-labs.io" - "traefik.docker.network=traefiknet" - "traefik.port=2368" networks: - internal - traefiknet environment: database__client: mysql database__connection__host: mysql database__connection__user: ghost database__connection__password: ghostdbpass database__connection__database: ghostdb container_name: ghost depends_on: - mysql - traefik
networks: traefiknet: external: true internal: external: false
Enregistrez et quittez.
Et maintenant, nous avons tous les répertoires et configurations comme indiqué ci-dessous.
tree
Étape 5 - Déployer Ghost avec MySQL et Traefik
Pour créer et exécuter tout notre service de pile fantôme, nous pouvons utiliser la commande ci-dessous.
docker-compose up -d
Une fois terminé, vérifiez tous les services en cours d'exécution.
docker-compose ps
Et voici le résultat.
Si vous rencontrez une erreur, vérifiez le journal du conteneur à l'aide des commandes ci-dessous.
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost
La pile fantôme avec MySQL et le proxy inverse Traefik est opérationnel.
Étape 6 - Tester
Ouvrez le tableau de bord Traefik avec son URL, la mienne est http://traef.hakase-labs.io/
Connectez-vous avec l'utilisateur et le mot de passe sur le fichier 'traefik.toml'.
Et voici le tableau de bord Traefik.
Pour l'installation de Ghost, saisissez l'URL fantôme dans la barre d'adresse, la mienne est http://gho.hakase-labs.io/
Et vous obtiendrez la page d'accueil fantôme.
Visitez maintenant la page d'administration pour configurer et configurer un nouvel utilisateur administrateur. Mon URL est : http://gho.hakase-labs.io/admin/
Cliquez sur le bouton vert pour créer un nouvel utilisateur administrateur.
Tapez les détails de l'utilisateur, du mot de passe, de l'e-mail et cliquez à nouveau sur le bouton vert.
Pour inviter un nouveau membre ou utilisateur, cliquez sur le lien "Je le ferai plus tard".
Vous obtiendrez maintenant le tableau de bord Ghost.
Et après avoir créé l'exemple de publication, voici le résultat.
L'installation du blog Ghost avec la base de données MySQL et le proxy inverse Traefik sur l'environnement Docker s'est terminée avec succès.
Références
- https://hub.docker.com/_/ghost/
- https://docs.traefik.io/