Déployer un site avec Git

Le 18/10/2012

Dans GIT

Aujourd’hui sur le blog du webdesign, nous allons voir un moyen de déployer votre site directement avec Git, sans avoir à utiliser de client FTP.

Introduction

Connaissez vous Git? Si ce n’est pas le cas, aller voir cette présentation.

J’ai déjà croisé plusieurs fois une situation pas productive du tout : Quelqu’un qui fait son projet avec Git, qui le fournit au client avec Git, mais qui vas le déployer en FTP. Devoir passer par un autre logiciel, alors que l’on travail déjà avec Git, qui est un outil permettant de synchroniser des dossiers, est une perte de temps. Ne serait-il pas plus simple de simplement push notre travail sur le serveur de production ?

Oui mais voila, on ne peut pas push sur la branche courante d’un Dépôt, et on ne va pas laisser notre dossier .git dans un dossier accessible par apache. Nous allons donc devoir régler ces deux problèmes.

Etape 1: Le Dépôt

Le but ici sera de séparer le dossier contenant le code source de notre site, et le dossier de données propre à chaque dépôt git (habituellement dans .git). Pour notre exemple, les dépôts seront dans le dossier /homme/git , et les sites dans /var/www.

 Premièrement, les dépôts. Pour mon exemple j’ai créé un utilisateur Git, avec comme groupe principal www-data, qui me servira à centraliser mes dépôts (pour éviter les soucis de permissions), et ils sont dans le dossier home.

$ mkdir monsite.git
$ cd monsite.git
$ git init –bare 

Voila, notre dépôt est initialisé et bare. Vous pouvez voir dedans que seul les fichiers de git sont présents.

Etape 2 : Le dossier de production

Maintenant, il nous faut préparer le terrain pour les sources du site web : Créons un dossier dans /var/www, et le nommons comme owner git:www-data, de façons à ce que Git puisse écrire dedans. Et c’est tout.

Etape 3 : Le hook

Connaissez vous les hooks Git? Ce sont des fichiers qui sont exécutés à différents moments lors des actions de Git. Celui qui nous intéresse ici est post-receive, qui se lance donc après que git ai reçu des données.

Dans /home/git/hooks, créez un fichier post-receive, contenant :

#!/bin/sh
GIT_WORK_TREE=/var/www/monsite.fr git checkout -f

La première ligne indique que ce script doit être exécuté avec sh, et la seconde définit un dossier worktree pour git et checkout sur notre branche actuelle dedans.

Git logo

Voila, la conf serveur est finit. Il ne vous reste plus qu’a ajouter votre nouveau dépôt comme une remote sur votre dépôt actuel (en la nommant par exemple production) et de push dessus, pour déployer simplement votre site.