Comment ce site Web hexo est-il construit et déployé ?

Ansible déployant le blog Hexo avec Docker

This article is available in English

Ce site web est construit avec le framework de blog Hexo et l’élégant thème NexT.
Rien de très exceptionnel pour l’instant… 🥸

Voyons en détail la maintenance du serveur et le déploiement du blog.

🔗Génération des Pages/Articles Asymptote

Toutes les pages Asymptote et les articles Asymptote proviennent des exemples de codes Asymptote et sont générés automatiquement par le générateur d’exemples Asymptote.
Une fois les fichiers markdown Hexo générés, une synchronisation rsync est effectuée via ce simple script.

Grâce à cette organisation, tous les projets autour d’Asymptote sont séparés par concept avec leur signification propre, leur périmètre d’usage propre, et leur fonctionnement spécifique.

🔗Génération de HTML avec Docker

Le déploiement commence par la génération des fichiers statiques html via un Dockerfile NodeJS et un fichier docker-compose.yml, de sorte que la commande make generate fait tout le travail de génération des fichiers html statiques.

🔗Serveur avec Caddy

L’étape suivante du déploiement consiste à servir les fichiers statiques html avec une instance du serveur web Caddy sur le port 4280 via un simple Dockerfile Caddy en utilisant le même docker-compose.yml, de sorte que la commande make serve fait tout le travail de création d’image et de mise en service.
Le port 4280 est défini par la variable d’environnement SERVER_PORT et vous pouvez voir le fichier Caddy utilisé pour mon blog Hexo.

Cependant, il n’est pas suffisant de servir le blog dans un conteneur Docker sur le port 4280, le blog doit être accessible sur les ports 80 et 443 pour le domaine blog.piprime.fr !

🔗Proxy du Port 443 vers 4280 avec Caddy-Docker-Proxy

Sur la machine hôte, nous souhaitons servir plusieurs services web accessible par les ports 80 et 443, et non sur le port 4280.
Pour atteindre cela, j’utilise un Caddy Docker Proxy avec la configuration Docker suivante :

1
2
3
4
5
networks:
- caddy
labels:
caddy_0: blog.piprime.fr
caddy_0.reverse_proxy: "{{upstreams ${SERVER_PORT}}}"

et, pour rediriger temporairement www.piprime.fr vers le blog, les lignes suivantes :

1
2
caddy_1: www.piprime.fr
caddy_1.redir: "https://blog.piprime.fr{uri} temporary"

Bien que la commande make deploy-caddy-docker-proxy réalise tout le processus de déploiement de ce blog, je ne veux pas avoir à me souvenir où cloner le projet, comment le mettre à jour, ni quels sont les logiciels à installer sur l’hôte (git, make, Docker globalement sur la machine hôte).

🔗Déploiement/Maintenance avec Ansible

Lorsqu’il faut utiliser une nouvelle instance de serveur, quelle qu’en soit la raison, c’est vraiment pénible d’installer toutes les dépendances logicielles, de faire toutes les configurations et de réaliser tout le processus de déploiement pour tous les services.
Même pour mettre à jour le blog, j’en ai assez de me connecter via ssh, d’aller dans le bon répertoire, de me rappeler quelle commande lancer, et de m’assurer que tout a été fait correctement sans oublier une commande magique cachée derrière les fagots.

Pour automatiser toute l’installation, la mise à jour et la maintenance du serveur, j’ai choisi le logiciel d’automatisation Ansible.
Ma configuration Ansible est à ce point sécurisée que j’ai confiance de la partager !

Concernant ce blog, la seule chose à faire et à retenir est de lancer la commande make piprimefr-blog ; cela garantira que les logiciels nécessaires sont installés, correctement configurés, et cela clonera le blog ou le mettra à jour si besoin.

  • Pour installer une nouvelle instance de serveur ou la mettre à jour, la seule commande à lancer est make all !
  • Vous pouvez jeter un œil à la tâche Ansible principale pour déployer ce blog Hexo.

🔗Conclusion

Ce blog est partiellement généré par un outil d’automatisme (pages et articles Asymptote), servi par une instance dockerisée d’un serveur web Caddy, elle-même proxyfiée par Caddy Docker Proxy.
Toute la maintenance du serveur et le déploiement du blog sont réalisés grâce au moteur d’automatisation Ansible.