Dans le domaine de la consultation dans le web, un des problèmes récurrents est la difficulté associée à la mise en place d’un environnement de développement pour chaque projet. Si on est chanceux et que les instructions textuelles d’installation d’environnement sont toujours à jour, ce n’est qu’une question de minutes pour un développeur expérimenté, mais pour un débutant ou un intégrateur, c’est autre chose. On ne comprend pas toujours bien les instructions, ou notre système est différent de celui du développeur (ici, nos développeurs sont sous Linux, mais nos intégrateurs sont sous Mac OS X). Il n’en faut pas plus pour rapidement perdre plusieurs heures.
Chez SFL, nous avons récemment commencé à intégrer Vagrant à nos projet afin de moderniser nos méthodes de déploiement et les résultats jusqu’ici sont très encourageants.
Qu’est-ce que Vagrant?
Vagrant est un outil de ligne de commande pour contrôler la mise en place de machines virtuelles avec VirtualBox. Elle permet, en une seule commande, la création et la configuration d’une machine virtuelle à partir de rien du tout. Pour la partie configuration, elle est intégrée avec Puppet, un utilitaire de configuration d’environnement souvent utilisé par les administrateurs systèmes pour gérer leurs différentes machines (d’ailleurs, c’est ce que nous utilisions déjà chez SFL).
Avantages
Rapidité de création d’environnements de développement. Ce qui naguère était une liste d’instructions plus ou moins complexes qui prenaient souvent longtemps à executer manuellement est maintenant une seule commande. Par exemple, pour nos projets Django (qui utilisent Fabric), il suffit d’avoir VirtualBox, Vagrant et Fabric d’installé pour pouvoir, à partir de rien, faire rouler le site localement avec cette seule commande:
fab deploy
Exactitude de la configuration de l’environnement. Fini les procédures d’installation qui tombent en désuètude. Si le code Puppet n’est plus à jour, la mise en place automatique ne se fait plus, ce qui est très facile à détecter et à corriger.
Environnements de développement et de production homogène. La communication entre le monde du développement et le monde de l’administration système ne se fait pas toujours parfaitement. Avec un script Puppet pour décrire l’environnement nécessaire pour faire rouler le projet, il est beaucoup plus facile pour l’équipe des administrateurs système de savoir avec exactitude le genre d’environnement qu’ils doivent créer pour accueillir le site de production.
Comment l’utiliser?
La façon d’utiliser Vagrant dépend toujours un peu de la nature du projet. Par exemple, nos projets Django sont déployés avec un amalgame de commandes Fabric et de configuration Puppet. Le côté Puppet s’occupe des virtualhosts, les bases de données et des « .deb » à installer, et le script Fabric s’occupe de pousser le code par SSH, créer le « virtualenv », s’occuper des dépendances Python, faire les migrations South, etc.
Je viens de mettre en ligne sur notre compte Github un exemple de projet Django intégré avec Vagrant pour vous donner une idée de la structure d’un tel projet et aussi faire la démonstration de sa facilité d’installation. Si vous avez Git, VirtualBox, Vagrant et Fabric d’installé sur votre machine, il vous suffit de rouler ceci:
git clone https://github.com/savoirfairelinux/django-vagrant-demo
cd django-vagrant-demo/deploy
fab deploy
Votre mot de passe vous sera demandé car Vagrant a besoin de privilèges administratifs pour modifier le fichier « /etc/hosts ». Le script Fabric aussi d’ailleurs.