Edito : Rétrospective et présentation de l'infrastructure du blog

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.