Vagrant

Introduction

 

Vagrant est un outil pour gérer des environnements de développement ou de test écrit en Ruby.

Son objectif est de permettre d'avoir des environnements similaires à des serveurs de prod. Compatible avec les 3 plus gros systèmes d'exploitation actuel.

Il est rapide à mettre en place et permet de changer d'environnement selon le projet (dans le fichier de configuration Vagrantfile on peut spécifier et changer le nom de la box (système) souhaité).

Cette solution se base sur la virtualisation, par défaut il utilise VirtualBox (ou libvirt si VirtualBox n'est pas installé ; d’autres providers sont disponibles, notamment des clouds publics).

 

Les concepts sur lesquels repose Vagrant

 

Le Vagrantfile

Le fichier de configuration principal de Vagrant. Ecrit en ruby, il sert à définir le dossier racine du projet qui sera utilisé par les options de configuration de Vagrant. C’est ausssi dans ce fichier que l’on définira le type de machine (la box) souhaité, la configuration réseau, le provider, la méthode de provisionnement ainsi que d’éventuels plugins.

 

Les boxes

Vagrant utilise des boites prêtes à l’emploi pour accélérer la construction de son environnement virtuel. Le principe est similaire aux images sous Docker. Une vagrant box peut contenir une simple installation d’Ubuntu, mais elle peut aussi embarquer d’autres applications pré-installées. Si vous utilisez régulièrement les mêmes briques applicatives pour vos projets, il peut être intéressant de les compiler dans une box que vous pourrez réutiliser par la suite.

Vous trouverez une liste de boxs sur Atlas le catalogue de boxs officiel de Vagrant. A titre d’exemple, voici la box standard que nous utilisons chez Elao pour initier nos projets.

 

Le Provider

Comme vu plus haut, Vagrant ne virtualise pas directement les environnements mais fait appel à un provider pour accomplir cette tache. Vagrant utilise Virtualbox par défaut, mais rien n’empêche d’en utiliser un autre comme VMWare, AWS ou Hyper V.

 

Introduction

 

Installation de VirtualBox

 

Sous Debian 10, VirtualBox n’est pas disponible dans la version stable de Debian. Il faut alors utiliser un backport non-officiel (https://tecadmin.net/install-virtualbox-on-debian-10-buster/)

sudo wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

sudo wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian buster contrib"

sudo apt update && sudo apt install virtualbox-6.1


Sous Debian 9, VirtualBox n’est pas disponible dans la version oldstable de Debian, mais est disponible dans les backports.

Il faut modifier le fichier /etc/apt/sources.list pour ajouter (tout sur la même ligne) :

deb http://deb.debian.org/debian/ stretch-backports main contrib non-free

sudo apt update && sudo apt-get install virtualbox

 

Installation de Vagrant
sudo apt-get update && sudo apt-get install vagrant

 

Utilisation de Vagrant 

 

Il existe de nombreuses "box" sur le site de Vagrant : https://app.vagrantup.com/boxes/search

A l'issue de cela il y a 2 manières pour démarrer une box Vagrant :

  • la démarrer automatiquement et facilement
  • créer le fichier de configuration manuellement (Vagrantfile)

 

Pour démarrer une box automatiquement et facilement, il faut aller rechercher le nom du système qui nous intéresse (voir le portail) :

mkdir nameOftheBox && cd nameOftheBox/
vagrant init nameOftheBox

 

 

 

Commandes utiles de Vagrant

 

vagrant up : récupérer l’image et la démarrer

vagrant ssh : se connecter sur l’image

vagrant halt : arrêter la machine virtuelle

vagrant reload : Redémarre (reboote) la machine virtuelle

vagrant destroy : Détruit (supprime) la machine virtuelle

vagrant box : gestion des box (par exemple vagrant box list)

vagrant provision : reéxécute le provissioning OU vagrant up --provision

 

Par défaut, Vagrant configure un répertoire synchronisé (synced folder) pour que le répertoire contenant le Vagrantfile soit disponible dans la machine virtuelle, dans le répertoire voulu (voir catégorie précédente).

 

Synced folder :

 

Vagrant.configure("2") do |config|
  # other config here

  config.vm.synced_folder "src/", "/srv/website"
end

1er path : path de la machine hôte

2ème path : path de la VM