Vagrant – la virtualisation des environnements de développement facile
Ne vous est-il jamais arrivé de ne pas être capable de reproduire, sur votre environnement de développement, un bug rencontré en production ? Vous êtes sûrement sous MS Windows ou Mac OS X alors que la production tourne sous GNU/Linux… Ou ne vous est-il pas arrivé de pester pour écrire ou suivre un guide d’installation d’un environnement de développement ?
Depuis quelques années, les VMs sont là pour répondre à ces problématiques. Néanmoins, ces outils ne sont pas toujours simple à mettre en place. C’est à cet instant que Vagrant entre en scène.
Sommaire
Présentation
Vagrant est un outil en ligne de commande pour créer et configurer des machines virtuelles. Il encapsule un logiciel de virtualisation (tel que VirtualBox ou VMware) et un logiciel de gestion de configuration (au sens provisionning de l’environnement tel que Chef, Puppet, Salt, Docker, etc…).
Les intérêts sont multiples :
- disposer d’un environnement de développement sur un système d’exploitation différent de sa propre machine
- avoir plusieurs environnements de développement sans modifier la configuration de son propre système (certains projets nécessitent des configurations système qui les rendent incompatibles entre eux)
- monter rapidement un environnement de développement complet
- certains outils sont plus faciles à installer sous GNU/Linux
- etc…
L’avantage principal de Vagrant est qu’il ne repose que sur un simple fichier de configuration qui définit le système à utiliser et la configuration à appliquer. Les autres avantages sont :
- outils très simple
- les VMs sont portables
- moins lourd que les VMs classiques
- facilité à dupliquer et/ou reproduire un environnement autant de fois qu’on le souhaite
Installation
Prérequis
Pour pouvoir utiliser Vagrant, il faut simplement disposer de VirtualBox et de Vagrant aussi ! Il est possible de trouver beaucoup de tutoriels sur Internet pour Mac OS X ou GNU/Linux. Pour ma part, j’ai installé VirtualBox 4.3.10 et Vagrant 1.5.4 sur MS Windows 8.
VirtualBox et Vagrant
Télécharger la dernière version de VirtualBox et la dernière version de Vagrant, puis les installer.
La VM : une box
Vagrant repose sur des boxes. Ce sont les images des OS qui sont utilisées pour la virtualisation (ici par VirtualBox). Voici les commandes pour gérer les boxes :
# ajouter une box (l'URL est optionnelle pour les boxes officielle
$ vagrant box add nom_de_ma_box url_de_la_box
# supprimer une box
$ vagrant box remove nom_de_ma_box
# lister les boxes installées
$ vagrant box list
Un des autres intérêts de Vagrant est qu’il existe déjà de nombreuses boxes toutes prêtes à être utilisées (sur vagrantbox.es ou vagrantcloud.com) mais également de nombreux projets Vagrant proposant des boxes et/ou des configurations pour différents environnements de développement (Java EE, monitoring, PHP, etc…).
Il est également possible de créer sa propre box. Il est possible de trouver un exemple de création de box sur GitHub.
Ici, nous allons simplement réutiliser une box officielle avec la commande suivante :
$ vagrant box add hashicorp/precise32
Cette commande va prendre un peu de temps car elle va télécharger l’image de l’OS :
==> box: Loading metadata for box 'hashicorp/precise32'
box: URL: https://vagrantcloud.com/hashicorp/precise32
==> box: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/hashicorp/precise32/version/1/provider/virtualbox.box
←[0m←[0m Progress: 100% (Rate: 609k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'hashicorp/precise32' (v1.0.0) for 'virtualbox'!
Une fois l’image téléchargée, elle est utilisable. Pour cela, il faut créer un répertoire pour votre projet et s’y placer dedans et enfin initialiser Vagrant avec la commande suivante :
$ vagrant init hashicorp/precise32
Cette commande va simplement créer le fichier de configuration Vagrant pour votre projet :
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Utilisation
Instance de la VM
Une fois l’environnement initialisé (et éventuellement configuré), il existe quelques commandes pour manipuler l’instance de la VM :
# démarrer et configurer la VM
$ vagrant up
# se connecter en SSH à la VM
$ vagrant ssh
# vérifier l'état des VM
$ vagrant status
# mettre en pause la VM
$ vagrant suspend
# sortir de pause la VM
$ vagrant resume
# arrêter la VM
$ vagrant halt
Au premier lancement, Vagrant va construire à l’instance de la VM en fonction du fichier de configuration Vagrantfile
:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise32' is up to date...
==> default: Setting the name of the VM: virtualisation_default_1398468142891_45569
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.2.0
default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
default: /vagrant => C:/projects/virtualisation
La VM est lancée. Il est possible de s’y connecter en SSH et de vérifier l’OS de la VM avec la commande suivante :
vagrant@precise32:~$ uname -a
Linux precise32 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
Facile ! Non ?
Provisionning
Vous savez maintenant déclarer et utiliser une VM. Il est maintenant temps de s’intéresser au provisionning… Il y a au moins 4 façons de provisionner votre environnement :
- Chef : déclaration dans le fichier
Vagrantfile
des cookbooks, receipes ainsi que des éléments de configuration tels que les mots de passe (documentation de Chef Solo dans Vagrant) - Puppet : déclaration dans le fichier Vagrantfile des manifests (documentation de Puppet dans Vagrant)
- Shell : déclaration dans le fichier Vagrantfile des scripts ou directement des lignes de commandes (documentation du Shell dans Vagrant)
- Manuel : connexion en SSH sur la VM, puis configuration manuelle comme vous le feriez avec un environnement quelconque et enfin repackaging de la box (un exemple par Nicolas)
C’est un sujet assez vaste que je ne vais pas détailler ici (des exemples très simples par Alexandre).
Conclusion
Nous avons là tous les éléments pour créer facilement, rapidement, de façon sûre et reproductible des environnements. Le champ d’application qui s’ouvre à nous est énorme !
- tester des outils seulement disponibles sur un OS différent de notre machine
- monter des environnements « types »
- faire des tests de configuration système « jetables »
- monter des environnements à la demande (pour l’intégration continue ou les tests de charge en continue)
- etc…
Personnellement, dans un premier temps, je pense essayer de configurer un environnement d’intégration continue (avec Jenkins et Sonar comme l’a fait Olivier) mais surtout un environnement de monitoring (avec jmxtrans, collectd, graphite, etc…).
Ensuite, si ces tests sont concluant, je regarderai pour créer un environnement de développement complet (cad avec un environnement graphique, un IDE de développement, pré-configuration de tous les outils, etc…).
Je vous souhaite une bonne virtualisation !
https://blog.lecacheur.com/2014/04/28/vagrant-la-virtualisation-des-environnements-de-developpement-facile/https://blog.lecacheur.com/wp-content/uploads/2014/04/Vagrant-839x1024.pnghttps://blog.lecacheur.com/wp-content/uploads/2014/04/Vagrant-150x150.pngDéveloppementLinuxvagrant,virtualbox,virtualisation,vmNe vous est-il jamais arrivé de ne pas être capable de reproduire, sur votre environnement de développement, un bug rencontré en production ? Vous êtes sûrement sous MS Windows ou Mac OS X alors que la production tourne sous GNU/Linux... Ou ne vous est-il pas arrivé de pester pour...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Merci Seb pour l’info !
Je vais tester et sûrement adopter !
A+
Alors ? L’as-tu testé ? Qu’en penses-tu ?
Tiens tiens enfin un blog qui traite correctement ce sujet. Je vais tester cette solution sur mac pour voir ce que ça donne 😉
merci pour ce tutoriel
Moi j’ai acquis mes connaissance sur la virtualisation rien qu’en me basant sur des tutoriels en vidéo sur http://www.alphorm.com/formations/virtualisation. J’ai employé certains outils de virtualisation pour créer des machines virtuelles. Cependant, je dois dire que Vragrant est fort intéressant aussi. Je vais essayer d’assimiler ce tutoriel ci. Merci pour ce partage.