Vagrant + Berkshelf

L'une des fonctionnalités les plus intéressantes de vagrant est son système d'approvisement de la machine. Le principe est de partager une simple configuration avec votre équipe et de laisser vagrant mettre à jour le contenu de votre VM. Vous pouvez ainsi créer une box avec tous les binaires nécessaires à votre projet en une seule commande. Nous allons voir comment préparer un environnement de développement avec Node et Nginx après avoir suivi ce tuto vidéo.

Prérequis

Il vous faut tout d'abord installer VirtualBox et Vagrant.

On va commencer par créer notre dossier pour notre VM :

$ mkdir ~/Documents/monprojet
$ cd ~/Documents/monprojet
$ vagrant init monprojet https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.2.0-amd64.box

Un fichier VagrantFile est créé.

Provisionning

Il est possible d'utiliser le système d'approvisionnement de votre choix : Puppet, Chef-solo… Ici, nous allons utiliser Berkshelf car c'est clairement plus simple à utiliser. Il nous faudra alors installer le plugin berkshelf pour vagrant. Tapez donc dans votre terminal :

$ vagrant plugin install vagrant-berkshelf

Nous allons ensuite configurer Berkshelf pour lui indiquer la liste des recettes à installer. Pour cela, nous allons d'abord trouver la liste des recettes qui nous intéresse. Puis nous allons créer un fichier Berksfile aux cotés du fichier VagrantFile contenant :

site :opscode

cookbook 'apt'
cookbook 'nodejs'
cookbook 'nginx'

Puis nous allons rajouter le bloc dédié à chef_solo dans le VagrantFile :

config.berkshelf.enabled = true
config.vm.provision :chef_solo do |chef|
    chef.add_recipe "apt"
    chef.add_recipe "nodejs"
    chef.add_recipe "nginx"
  end

Ce qui nous donnera une configuration globale comme ceci :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef-test"
  config.vm.box_url = "https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.2.0-amd64.box"
  config.vm.network :private_network, ip: "192.168.33.42"
  config.vm.network :public_network
  config.berkshelf.enabled = true
  config.vm.provision :chef_solo do |chef|
    chef.add_recipe "apt"
    chef.add_recipe "nodejs"
    chef.add_recipe "nginx"
  end
end

Vous pouvez maintenant lancer votre VM d'un :

$ vagrant up

Ça va prendre pas mal de temps car vagrant va d'abord télécharger la box, puis Chef va installer les différents packages demandés. Une fois fait, vous pouvez vous connecter à la VM et constater que node est bien là :

$ vagrant ssh
$ node -v

Node -v in Vagrant ssh

Vous pouvez à tout moment modifier les fichiers VagrantFile et Berksfile pour ajouter de nouvelles recettes. Vous n'aurez qu'à ensuite mettre à jour votre VM, soit en la redémarrant avec :

$ vagrant reload

Soit en l'approvisionnant à l'aide de :

$ vagrant provision

Et donc, évidemment, vous pouvez partager votre configuration avec vos collègues simplement en leur diffusant vos fichiers VagrantFile et Berksfile afin qu'ils travaillent sur le même environnement que le votre.

Hadrien

Hi, I'm a french Javascript Lead Developer, Web Architect from Toulouse, France. I've worked for 12 years for many projects with YUI, AngularJS, Aurelia.io and now React and React native.

Toulouse, France https://hadrien.eu