Mon infra se met à jour toute seule

(avec n8n, Docker et... des flux RSS.)

n8n

  • n8n = nodemation
  • Moteur de workflow (successeur spirituel de iFTTT)
  • Le principe est simple : on branche des blocs prédéfinis les uns à la suite des autres.
  • Fourni avec des milliers de composants pour...
    • ... se connecter un peu partout (GitLab, Telegram, etc)...
    • ... et effectuer des actions (dédupliquer, envoyer une requête HTTP, etc)...
    • ... Et on peut aussi ajouter du code personnalisé (en JS).
    • n8n peut être utilisé pour automatiser des actions du quotidien, et même éviter de coder pour des cas basiques.
    • Et nous, on va... automatiser la mise à jour de notre infra.

Pourquoi faire une mise à jour auto ?

  • Problème sur mon infra @ home : les softs "sur l'étagère" ne sont jamais mis à jour
    • Car pas le temps / la motivation / l'envie, etc...
    • => Risque de sécurité majeur, car j'ai des softs assez critiques ! (VaultWarden, Nextcloud, etc)
  • Pourtant, j'ai une "belle" infra : mono-cluster Swarm, tout déployé en Ansible et versionné sur un GitLab...
  • Hey, mais.... Y'aurait pas un coup à jouer avec n8n ? 👀

Mise à jour automatique

  • Principe général :
    1. On regarde les releases du projet (problème : DockerHub n'a pas de flux RSS...)
    2. On compare les nouveaux tags, et on compare avec ceux qu'on a sur l'infra (ça tombe bien, on a déjà une CI/CD, avec des releases...)
    3. Si plus récent, on déploie (problème : j'aimerai bien garder le contrôle et approuver avant...)
    4. Problème additionnel : je veux du feedback sur mon déploiement !

Problème : où récupérer la data ?

  • Les softs sur l'étagère que j'utilise sont Open-Source => Le code est dispo sur une forge publique (GitHub, GitLab, etc)
  • Et les mainteneurs utilisent la fonction de Releases de ladite forge pour informer les gens
  • Ça tombe bien, GitHub et GitLab ont des flux RSS sur les releases d'un projet ! On va utiliser ça.

Problème : J'aimerai garder le contrôle

  • Si ma mise à jour automatique casse le système un jour où j'ai pas de temps pour rattraper, c'est relou !
    • (à tout hasard, un jour de conférences où j'utilise mon n8n en démo ? 👀)
  • Et j'ai des softs "sensibles" (oui Nextcloud, je parle de toi, avec tes ./occ à lancer à chaque upgrade...)
  • Mais j'utilise plein d'outils de communication qui ont des APIs ! Peut-être que je peux utiliser l'un d'entre eux ?
  • => n8n propose un "Send and Wait Response" sur Discord. C'est pile ce que je veux, parfait !

Problème : je veux du feeedback !

  • Je pourrai me baser sur le résultat de la CI, mais c'est pas ouf...
  • Mais comme je suis sur Docker Swarm, j'ai des services et des états de déploiement !
  • ... Je peux coder un mini-bout d'API, pour donner le state d'un déploiement d'après la socket Docker.
    • Et comme c'est que pour n8n, je ne l'expose pas hors du cluster car ça sert à rien !

Bon, nos problèmes sont résolus...

... It's showtime !



On va tenter d'automatiser la mise à jour d'un serveur VaultWarden !

Conclusion

  • n8n c'est super, et ça nous simplifie beaucoup la vie
  • Beaucoup d'autres cas pas abordés (veille techno, etc)
  • Et notre workflow, on aurait pu le rendre bien plus générique ! Toute la partie "check gitlab / discord / swarm API" c'est généralisable.
  • Le workflow n8n est à disposition, le connecteur swarm est aussi dispo..

Merci !