Vagrant – Environnement de développement léger et reproductible

Vagrant est un outil qui permet de construire rapidement et simplement des environnements de développement. Il permet de déployer et de configurer des machines virtuelles en s'appuyant sur les logiciels de virtualisation existants (Virtualbox, Vmware, AWS, ….).

Vagrant permet aussi de personnaliser chaque instance de machine virtuelle à l'aide d'un système de provisionning (exécution de commandes shell, chef, puppet, …) exécuté lors du premier démarrage de la machine virtuelle.

Vagrant peut s'exécuter sur tous les systèmes d'exploitation existants.

 

Pourquoi utiliser Vagrant

Au sein de notre équipe OMNILOG chez FTVEN, l'installation de l'environnement de développement était extrêmement longue et fastidieuse :

  1. Installation des logiciels Apache, php, mysql, memcached, …
  2. Configuration des logiciels (vhost, ….)
  3. Clonage de l'ensemble de dépôts Git utilisés
  4. Remontée des dumps de base de données,

Ces opérations sont répétitives, ont peu d'intérêt pour le développeur et sont souvent non documentées.

De plus le turnover chez FTVEN étant important, l'opération était réalisée plusieurs fois par an et les installations « custom » de chaque développeur sont différentes des composants utilisés sur nos serveurs de production. Enfin, il fallait systématiquement plus d'une journée pour obtenir un environnement complet et fonctionnel.

Avec Vagrant, nous avons rationalisé les environnements de développement : tous les développeurs utilisent la même version des applicatifs et toute la procédure de configuration spécifique au projet est scriptée dans Vagrant.

En 2h00 (le temps de téléchargement et de remontée des dumps étant incompressible), nous avons un environnement de développement complet et opérationnel : le gain de temps et de productivité est considérable.

 

Exemple de déploiement d'une machine virtuelle

Une fois les logiciels requis installés (ex : Virtualbox et Vagrant), la mise en place d'une machine virtuelle consiste en la rédaction d'un fichier de configuration nommé Vagrantfile et si besoin d'un script de provisionning (il se charge de faire les traitements custom).

Exemple de fichier Vagrantfile utilisé chez FTVEN par l'équipe OMNILOG

# -*- mode: ruby -*-

# vi: set ft=ruby :

 

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!

VAGRANTFILE_API_VERSION = "2"

 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

     config.vm.box = "chef/debian-7.4-i386"

     config.vm.network "private_network", ip: "192.168.56.101"

 

     config.vm.provider :virtualbox do |vb|

        vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]

        vb.customize ["modifyvm", :id, "--memory", 512]

        vb.customize ["modifyvm", :id, "--cpus", 1]

     end

     config.vm.synced_folder "../ftven", "/ftven", owner:"sivideo", group:"www-data"

 

     config.vm.provision "shell", path: "provision.sh"

end

Détails de la configuration

config.vm.box : le nom de la machine virtuelle à télécharger. Vagrant fournit un service sur le web (https://atlas.hashicorp.com/boxes/search) permettant de résoudre l'url d'une machine virtuelle à partir de son nom. Au premier démarrage la machine virtuelle est téléchargée.

config.vm.network : configuration du réseau entre la machine virtuelle et l'hôte.

config.vm.synced_folder : définition du répertoire partagé entre la machine virtuelle et l'hôte. Les fichiers sont physiquement stockés dans l'hôte et un montage les rend accessibles dans la machine virtuelle. L'avantage réside dans le fait que les fichiers sont disponibles et éditables même avec la machine virtuelle éteinte.

config.vm.provision : définition du système de provisionning (dans notre exemple script Shell) et de son path. Le provisionning sera invoqué lors du premier démarrage de la machine virtuelle ou à chaque invocation de la commande « vagrant provision ».

Démarrage et arrêt d'une machine virtuelle

Une fois le fichier Vagrantfile rédigé, il suffit d'appeler la commande « vagrant up »  et la machine virtuelle démarre.

Le premier démarrage est un peu particulier car Vagrant doit télécharger et installer la machine virtuelle puis exécuter le script de provisionning afin de configurer la machine virtuelle. Ces opérations peuvent être longues.

Au second démarrage, ces traitements ne sont pas requis et le démarrage est instantané.

Il est possible de redémarrer une machine virtuelle via la commande « vagrant reload » et d'éteindre une machine virtuelle via la commande « vagrant halt ».

 

Plus d’info :

Arnaud G

Commentaires

Yves
vagrant rulz !

Ajouter un commentaire

Tags: