Déploiement d'application django (1.6.5) en Production avec git

Historique

16/05/2014 : Changement de ‘cleanup’ to ‘clearsessions’, car :

The `cleanup` command has been deprecated in favor of `clearsessions`.

Assumptions

Partons du principe que l’on déploie, en production, dans /var/www/mon_app
Que la gestion des dépôts git à été faite sous gitolite.
L’user de déploiement est publisher.
Enfin dans git, on à deux branches (entre autre), une dans laquelle, master, on verse les modifications à mettre en production, et une production, qui contient les commits avec la configuration de production, que l’on rebase sur master avant de la pousser.

Préparation / Mise en place

On créé initialise donc le dépôt git :

git init

Depuis le poste du déployeur, on ajoute une branche production.

git branch production

On y fait les modifications pour la production (settings.py entre autre) et on commit.
Ensuite quand des modifications seront faite sur le master, il suffira de ce remettre à jour :

git rebase master

Une fois cela fait il faut, initialiser la copie en production.
Pour pouvoir déployer il faut avant tout ajouter la cible de déploiement pour la mise en prod :

git remote add prod publisher@srv1.domain.tld:/var/www/mon_app

Ne pas oublier de ce mettre sur la branche production en … production.

git checkout production

Pour que le commit puisse fonctionner il faut définir :

git config receive.denyCurrentBranch ignore

Puis dans un second temps, mettre en place un hook git pour initialiser l’application django.
On utilise le hook post-update c’est à dire, une fois que le dépôt à reçu la mise à jour du code.

  {% include files/hook_django %}

Références : GitFaq non-bar repo et post-update