Vous retrouvez-vous souvent à devoir transférer un site via FTP à la main vers l’hébergement mutualisé d’un client ? C’était mon cas, jusqu’à ce que je me rappelle qu’OVH (et d’autres) proposent un accès SSH avec rsync et git.

J’ai donc regroupé quelques commandes en un seul script Bash : gitDeployer. La configuration prend quelques secondes, et chaque export se fait en deux étapes simples, avec un minimum d’installation sur votre machine en local, ce qui permet également à votre client de transmettre aisément le projet à un autre prestataire par la suite.
Edit : le script permet désormais de n’avoir qu’une étape.
 

Fonctionnement

git permet d’avoir plusieurs repository d’origine, et de pusher indépendamment vers l’un ou l’autre. Dans un parallèle au modèle gitflow, je pousse la branche master vers le repository installé sur l’hébergement de preprod, puis via SSH, je lance le script de déploiement.
Le lancement en SSH peut-être automatisé en configuration grâce à un hook, mais je préfère personnellement la garder comme fail-safe 🙂

Le script de déploiement a deux étapes (automatisées)  :

  • il tire dans un repository installé sur le serveur la dernière version du code
  • il synchronise avec rsync vers le dossier public en excluant les fichiers indésirables (sources Sass, etc), et sans détruire des anciens fichiers.

 

Installer le script

Commencer par récupérer la dernière version de mon script via git ou autre, et obtenez les accès SSH à votre environnement ( Comment faire chez OVH )

Sur le serveur

  • Ouvrir votre client FTP favori (pour la dernière fois)
  • Copier le fichier deploy.sh dans le dossier au dessus de votre www, puis éditer les deux premières variables avec l’id du projet et le dossier de destination (www en principe)
  • Copier éventuellement le fichier exclude-list.txt, et ajouter les fichiers qui vous plairont.
  • Via SSH, lancer une première fois le script, afin qu’il installe les pré-requis :
    . deploy.sh

Sur votre machine locale

Votre repository distant est normalement installé sur votreusername@hebergement:nomduprojet.git

  • Si vous avez déjà un repository local :
    • Ajoutez une remote avec cette commande :
      git remote add production votreusername@hebergement:nomduprojet.git
  • Si vous n’en avez pas :
    • Clonez l’hébergement distant et commencez à travailler :
      git clone votreusername@hebergement:nomduprojet.git

 

Premier export

  • Sur votre machine : Pushez votre projet :
    git push production master
  • (Si vous n’êtes pas en mode ONESTEPDEPLOY)
    Sur la machine de prod : Lancez le script :
    . deploy.sh

 

En conclusion

J’ai conscience qu’avec la multiplication des outils de déploiement comme Capistrano, cette méthode peut sembler désuette, mais j’ai vraiment un fort attachement à certaines valeurs :

  • Laisser au client une copie avec historique de son code source à portée de main.
  • Une fois l’installation initiale faite, laisser la main pour mettre en production à tout moment à une personne ayant un accès SSH.
  • Gestion des clefs SSH simplifiées : pas de clefs de déploiement à mettre dans github/bitbucket
  • Utiliser un minimum de code, et des technologies simples comme Bash et rsync.

Sinon, c’est comme toujours en licence MIT, donc n’hésitez pas à forker, à refaire à votre sauce, et je suis toujours preneur de remontée de bugs 🙂
 
 
→ Retrouver gitDeployer sur Github