← Retour à l'accueil

Déploiement zéro coupure, avec rollback instantané

Un script bash qui construit, déploie et permet de revenir en arrière sans jamais interrompre le site.

Ce site n’a pas de CI/CD ni de serveur applicatif à redémarrer, il est servi tel quel par Caddy. Ça ne veut pas dire que le déploiement doit être artisanal : bin/deploy.sh construit le site en local, envoie le résultat dans un nouveau dossier de release horodaté sur le serveur, vérifie que l’upload est complet, puis ne bascule le lien symbolique current que si tout est en ordre. Le trafic en cours n’est jamais touché tant que cette dernière étape n’a pas eu lieu, et cette étape elle-même est un seul appel rename(2), donc atomique : il n’existe aucun instant où l’URL pointerait vers un chemin invalide.

Comme les trois dernières releases sont conservées sur le serveur, bin/rollback.sh peut repointer current vers la précédente instantanément, sans reconstruire ni ré-uploader quoi que ce soit.

Le point le plus délicat n’était pas le mécanisme de release lui-même mais l’authentification SSH : la machine de développement porte l’agent SSH par défaut avec une demi-douzaine de clés pour d’autres projets, et ce serveur ferme la connexion avec “too many authentication failures” si toutes sont proposées avant la bonne. Les deux scripts chargent donc explicitement la clé attendue et l’épinglent avec IdentitiesOnly=yes sur chaque appel ssh/rsync, plutôt que de laisser l’agent négocier.