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.