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 :
- On regarde les releases du projet (problème : DockerHub n'a pas de flux RSS...)
- 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...)
- Si plus récent, on déploie (problème : j'aimerai bien garder le contrôle et approuver avant...)
- 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..