Edito : Rétrospective et présentation de l'infrastructure du blog
Un édito un peu particulier, avec de la nostalgie, des souvenirs, et surtout de la motivation et de belles perspectives pour l'avenir !
Lancé en 2012 avec la sortie du premier Raspberry Pi, ce blog a eu plusieurs vies :
- De mi-2012 à mi-2014, un premier blog voit le jour sous Wordpress, hébergé chez OVH, avec quelques articles qui sont plus de la capitalisation personnelle et un aide-mémoire.
- De mi-2014 à 2018, les articles sont écrits avec le but de partager mes connaissances et mon expérience pour aider les autres, toujours sur le Raspberry Pi, et avec une orientation plus poussée vers la domotique. Le blog est cette fois hébergé sur un VPS (toujours chez OVH) qui tourne sous Debian, et est migré vers le CMS Ghost avec nginx en complément. Je choisis de ne pas migrer les articles de la version précédente du blog, mais de les réécrire en les mettant à jour.
- 2019, une année en berne, avec des soucis techniques sur le blog (qui a presque disparu) et un manque de temps à y consacrer pour le remettre en route.
- De fin 2019 à septembre 2020, le blog revit ! Pour remettre le blog en ligne, je choisis d'arrêter de payer un hébergeur et de l'auto-héberger, une machine virtuelle lui est dédiée sur mon hôte esxi. Je me forme à Docker, technologie montante de conteneurisation, ce qui est source de plusieurs articles. N'ayant que peu de temps à y consacrer, dû à d'importants projets professionnels, j'ai commencé plusieurs brouillons, mais n'arrive pas à les terminer. Les articles récupérés suite au souci majeur de 2019 n'étant plus complets (les images n'ayant pas pu être restaurées) sont archivés.
- Depuis octobre 2020, je me donne plus de temps pour m'occuper du blog, avance dans l'écriture des articles en attente et en rédige de nouveaux, et 2 amis me rejoignent pour m'épauler.
Passons maintenant à l'architecture actuelle du blog, comment il est hébergé, quels outils sont utilisés et quels sont les services en place pour le sécuriser.
La base du blog est composé des logiciels suivants :
- Ghost est l'élément principal, le CMS, le moteur du blog. Ghost est un projet créé en 2013 par John O'Nolan et qui a été financé sur la plateforme de crowdfounding Kickstarter. Ecrit en JavaScript et avec l'aide de Node.js, il est open-source et sa version 4 vient de sortir.
- Après avoir utilisé Disqus (la plateforme de commentaires bien connue) pendant quelques années, j'ai souhaité me recentrer sur l'utilisation d'outils open-source, respectant la vie privée et que je pouvais auto-héberger. J'ai donc cherché une alternative et ai trouvé Commento, qui répond à tous les points cités.
- Le dernier outil utilisé est Umami, en tant que solution d'analyse Web, open-source, auto-hébergée et simple d'utilisation. Contrairement à Google Analytics ou Matomo, Umami ne collecte que les métriques qui peuvent m'être utiles pour connaitre la fréquentation du blog et vos préférences d'articles, aucune information personnelle n'est récupérée.
J'utilise un Nuc, un mini-pc, en tant que serveur, qui tourne sous la distribution Debian et qui n'a que Docker et Docker-Compose installés. Et c'est le reverse-proxy intégré à DSM, le système d'exploitation de mon NAS Synology, qui permet d'exposer le blog à Internet. Voici un schéma représentant ces éléments.
Comme vous pouvez le constater, j'applique la règle 3-2-1 pour les sauvegardes, à savoir 3 copies de sauvegarde, 2 types de support de stockage et 1 copie externalisée. Je m'appuie sur Syncthing pour la synchronisation des sauvegardes. Enfin, il est important de tester l'intégrité de la sauvegarde et de s'assurer qu'on est en mesure de rétablir le service ! Je fais pour cela un test de temps en temps en démarrant le blog et services connexes depuis un autre équipement que le Nuc.
Voici la stack Docker-Compose que j'utilise, complétée par un fichier .env
contenant toutes les variables :
version: '3.8'
services:
ghost:
container_name: ghost_domopi
image: ghost:3.42
restart: always
ports:
- 2368:2368
volumes:
- ./ghost/content/:/var/lib/ghost/content
- ./ghost/config.production.json:/var/lib/ghost/config.production.json
environment:
url : ${GHOST_URL}
commento:
image: caroga/commentoplusplus
container_name: commento_server
ports:
- 8080:8080
environment:
COMMENTO_ORIGIN: ${COMMENTO_URL}
COMMENTO_PORT: ${COMMENTO_PORT}
COMMENTO_POSTGRES: ${COMMENTO_DB_URL}
labels:
- com.centurylinklabs.watchtower.enable=true
depends_on:
- commento_db
restart: always
commento_db:
image: postgres:12-alpine
container_name: commento_db
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./commento/db:/var/lib/postgresql/data
labels:
- com.centurylinklabs.watchtower.enable=true
restart: always
umami:
image: ghcr.io/mikecao/umami:postgresql-latest
container_name: umami_app
ports:
- 3000:3000
environment:
DATABASE_URL: ${UMAMI_DB_URL}
DATABASE_TYPE: postgresql
HASH_SALT: ${UMAMI_HASH_SALT}
labels:
- com.centurylinklabs.watchtower.enable=true
depends_on:
- umami_db
restart: always
umami_db:
image: postgres:12-alpine
container_name: umami_db
environment:
POSTGRES_DB: ${UMAMI_POSTGRES_DB}
POSTGRES_USER: ${UMAMI_POSTGRES_USER}
POSTGRES_PASSWORD: ${UMAMI_POSTGRES_PASSWORD}
volumes:
- ./umami/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
- ./umami/db:/var/lib/postgresql/data
labels:
- com.centurylinklabs.watchtower.enable=true
restart: always
J'espère que cette petite rétrospective de l'existence du blog et la présentation rapide de son architecture technique vous aura intéressés et permis d'y voir un peu plus clair.
Parmi les futures évolutions prévues du blog, il y aura le passage à Traefik pour remplacer le reverse-proxy du NAS Synology, ce qui fera l'objet d'un article dédié sur sa mise en place.
Si vous avez des questions ou simplement souhaitez échanger avec nous, n'hésitez pas à laisser des commentaires ou à venir sur notre groupe Telegram.