Le déploiement d'applications, c'est pas toujours facile et rébarbatif surtout quand on travaille sur un parc de machines.
Imaginons que j'utilise un serveur de version, du genre Subversion ou Mercurial et que j'utilise un ou deux serveurs (test, production 1, production 2, ...) pour héberger mon ou mes applications.
Le déroulement est le suivant :
- Développement en local.
- Propagation des modifications.
- Connection SSH sur les serveurs.
- Rapatriement les dernières modifications
- On redémarre le soft.
Vous me direz que cela n'est pas forcément très long, mais quand vous devez le faire souvent et plusieurs fois par jour, on en a vite pleins le dos et cela est source d'erreur.
Heureusement l'informatique étant un sport où celui qui est le plus fainéant gagne, il existe un solution pour se simplifier ces tâches de déploiements à distance.
Son nom ? Fabric
En quelques lignes de Python, définissant des règles, un peu à la manière d'un Makefile, il est possible d'automatiser ce genre d'opération.
Voici un exemple basique pour le déployement d'un projet Django avec Mercurial :
"""Fabric Rules for MyProject"""
config.production = ['server.domain.com']
config.app_dir = '/home/dev/djangos/myproject'
def publish():
"""Publish the content by pushing it"""
local('hg push')
def apache_reload():
"""Reload the apache process"""
sudo('/etc/init.d/apache2 reload')
@roles('production')
def update():
"""Update the code source"""
run('cd $(app_dir); hg pull; hg update')
run('cd $(app_dir); python manage.py syncdb')
run('cd ...