Déployer comme un pro avec Git

Editer

Déployer un site en utilisant un système de versioning peut sembler un peu tordu mais contrairement à ce que vous pensez cette façon de faire peut vous sortir de pas mal de situation. Par exemple, vous modifiez une trentaine (voir plus) de fichiers sur votre machine locale et puis au moment de mettre en lignes vos modifications vous sondez votre mémoire pour vous souvenir des fichiers à uploader...

Evidemment certains logiciels de FTP essaie de simplifier le problème en vous proposant un système de "synchronisation" entre 2 dossiers mais c'est souvent assez hasardeux avec des automatismes qui peuvent être meurtriers pour votre site.

Comment ça marche ?

Avant d'aller plus loin je tiens à préciser que cette méthode n'est utilisable que si vous utilisez déjà git pour "versionner" vos fichiers et que vous disposez d'un serveur dédié avec des accès SSH.

Etape 1 : Préparer le serveur

Pour commencer il faut préparer le serveur, on se connecte en SSH (si vous êtes sur windows vous pouvez ajouter le dossier bin de msysgit à votre path, il contient la commande ssh)

ssh user@monserveur.fr

Si vous ne l'avez pas vous

sudo apt-get install git

Ensuite on va créer le dépot qui servira de "hub" ce dépôt servira de dépôt distant et permettra de lancer le déploiement lorsqu'il recevra une modification.

mkdir /home/user/MonProjet.git

Etape 2 : Premier push

Maintenant vous revenez sur votre ordinateur et on va envoyer nos première modificiation sur le serveur, je part du principe que vous versionnez déjà votre projet avec git et que vous avez déjà fait quelques commit.

On ajoute donc le dépôt distant et on le nomme "origin"

git remote add origin ssh://user@monserveur.fr/home/user/MonProjet.git

On push nos modifications en ligne et on push la branch master

git push origin master

Etape 3 : Créer le dossier accessible par Apache

Donc vous avez votre depot qui est bien remplie mais votre site n'est toujours pas visible. On va donc cloner le dépôt dans le dossier www d'apache et on va nommer notre site Production.

git clone /home/user/MonProjet.git /var/www/Production

Et là votre site fonctionne ! Mais maintenant il faut automatiser un peu tout ça pour qu'au prochain push votre site se mette à jour tout seul comme un grand. Il faut détecter les push qui seront fait sur le dépôt git afin de déployer automatiquement le modifications. Pour cela on va créer un *hook * au niveau de notre dépôt.

vi /home/user/MonProjet.git/hooks/post-update

Et on ajoute le code suivant :

#!/bin/bash
echo "********** mise en production *********" 
cd /var/www/Production 
unset GIT_DIR
git pull origin master

Et on s'assure que ce fichier est éxécutable :

chmod +x /home/user/MonProjet.git/hooks/post-update

C'est relativement simple. Dès qu'on a une modification du depôt on va se placer dans le dossier contenant notre site et demander un pull de la branche master. Si vous souhaitez publier une autre branche dans un dossier séparé il vous suffit de refaire cette étape en créant un autre dossier dans www et d'ajouter une autre routine dans le hook post-update.