Premiers pas avec Vagrant

Utilisateurs (ou futurs) de Vagrant, cette documentation vous permet de prendre en main rapidement l'outil et de comprendre son utilité.

Si vous êtes un sysops ou un devops, vous savez à quel point la création de machines virtuelles peut être fastidieuse et répétitive. C’est là qu’intervient Vagrant , un outil open-source qui permet de créer et de gérer facilement des environnements de développement et de test.

L’intérêt de Vagrant#

L’intérêt de Vagrant est de générer des VM reproductibles et éphémères, avec une configuration spécifiée dans un fichier Vagrantfile. Cela permet aux développeurs de rapidement tester leurs applications sur différents environnements, tout en garantissant la cohérence des VM utilisées.

En tant que sysops, cet outil est particulièrement intéressant pour tester des mises à jour ou des outils dans un contexte de préprod.

Quelques éléments de compréhension#

Les “boxes” sont des images prêtes à l’emploi que Vagrant utilise pour créer des VM. Vous pouvez trouver des boxes pour de nombreuses distributions Linux, ainsi que pour Windows. Il est également possible de créer des boxes personnalisées.

Vous pouvez chercher des images à cette adresse : https://app.vagrantup.com/boxes/search .

Pour utiliser Vagrant, vous devez d’abord installer les prérequis, tels que libvirt, VirtualBox et les librairies nécessaires. Vous devrez aussi ajouter votre utilisateur local au groupe “libvirt” ou “vbox” (en fonction de votre outil de virtualisation) pour avoir les droits de création de VM.

Pour déployer vos premières VM avec Vagrant, vous pouvez créer un environnement de test dans un dossier nommé “Vagrant”. Ensuite, vous pouvez éditer le fichier Vagrantfile pour spécifier la configuration de la VM, comme la distribution Linux, la quantité de RAM, etc.

💡N’utilisez pas Vagrant pour vos environnements de production !Dans cet article, j’utiliserai uniquement Virtualbox.

Pré-requis d’installation sous Linux Debian 11#

Installons libvirt (et ses dépendances), VirtualBox et les librairies nécessaires. Nous ajouterons l’utilisateur local de la machine au groupe “libvirt” pour avoir les droits de création de VM.

bash
sudo apt update && sudo apt upgrade

sudo echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian bullseye contrib" > /etc/apt/sources.list.d/virtualbox.list

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

sudo apt update && sudo apt install gcc make perl linux-headers-amd64 qemu-kvm libvirt-clients libvirt-daemon-system virtualbox-6.0

sudo usermod -aG libvirt <username>

Environnement de test Vagrant#

Avant de se lancer dans la génération de machines virtuelles avec Vagrant, nous allons générer un premier environnement de tests, dans le répertoire local de l’utilisateur et dans un dossier que je nommerai “Vagrant”.

bash
mkdir ~/Vagrant
touch ~/Vagrant/Vagrantfile

Création d’une machine virtuelle Ubuntu 22.04 (Jammy) pour VirtualBox#

Par défaut, la première carte réseau générée est de type NAT, pour que Vagrant puisse communiquer avec l’hôte (vous). La ligne “config.vm.post_up_message” spécifiera un message personnalisé une fois la VM construite et fonctionnelle/démarrée.

Éditons le fichier “Vagrantfile” (il n’y a pas d’extension de fichier) : $ sudo nano Vagrantfile.

Vagrantfile
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.define "vag-ubuntu2204" do |config|
  config.vm.hostname = "vag-ubuntu2204"
  config.vm.box = "generic/ubuntu2204"
  config.vm.post_up_message = "VM Ok"
  end
end

Ce fichier Vagrantfile est vraiment simple : génération d’une VM Ubuntu 22.04 (sans interface graphique), affichage d’un message de configuration une fois la machine lancée, rien de plus !

Pour avoir une seconde carte réseau dans la VM et la connecter dans le réseau privé hôte VirtualBox (permet la communication entre les VM et l’hôte), ajoutez cette ligne juste après le “config.vm.define…” :

bash
config.vm.network "private_network", type: "dhcp"

Utiliser libvirt avec Vagrant#

Installez le plugin complémentaire pour permettre à Vagrant d’utiliser libvirt :

bash
vagrant plugin install vagrant-libvirt

Création de trois VM Ubuntu 22.04 en même temps#

Pour créer plusieurs VM avec un seul Vagrantfile, rien de plus simple :

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.define "vag-ubuntu2204-1" do |config|
  config.vm.hostname = "vag-ubuntu2204-1"
  config.vm.box = "generic/ubuntu2204"
  config.vm.post_up_message = "VM 1 Ok"
  end

  config.vm.define "vag-ubuntu2204-2" do |config|
  config.vm.hostname = "vag-ubuntu2204-2"
  config.vm.box = "generic/ubuntu2204"
  config.vm.post_up_message = "VM 2 Ok"
  end

  config.vm.define "vag-ubuntu2204-3" do |config|
  config.vm.hostname = "vag-ubuntu2204-3"
  config.vm.box = "generic/ubuntu2204"
  config.vm.post_up_message = "VM 3 Ok"
  end
end

Par défaut, la machine virtuelle générée ne peut pas accéder au stockage local de la machine hôte.

Vagrant permet de partager des fichiers entre votre machine hôte et vos machines virtuelles. Cela est utile lorsque vous avez besoin d’échanger des fichiers ou de partager des ressources entre vos machines virtuelles. Par exemple, pour partager le dossier “/home/user/shared” de votre machine hôte avec une machine virtuelle, vous pouvez ajouter les lignes suivantes à votre Vagrantfile :

Vagrantfile
config.vm.synced_folder "/home/user/shared", "/vagrant_data"

Cette configuration indique à Vagrant de synchroniser le dossier “/home/user/shared” de votre machine hôte avec le dossier “/vagrant_data” de votre machine virtuelle.

Lignes de commande habituelles avec Vagrant#

Ajouter une box (modèle de VM)#

bash
$ vagrant box add <fournisseur>/<nomBox>
# e.q. "vagrant box add generic/ubuntu2204"

Lister les box (modèle de VM)#

bash
vagrant box list

Générer et lancer les VM#

bash
vagrant up

Se connecter dans une VM#

bash
vagrant ssh <nom-vm.define>

Éteindre gentiment (graceful) toutes les VM/le projet#

bash
vagrant halt

Détruire toutes les VM/le projet#

bash
vagrant destroy

Quelques exemples de Vagrantfile#

J’utilise VirtualBox pour effectuer mes tests, l’outil étant largement répandu et multiplateforme.

Utilisation de Vagrant avec Docker :

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2204"
  config.vm.provision "docker" do |d|
    d.pull_images "nginx", "postgres"
    d.run "web", image: "nginx", ports: ["80:80"]
    d.run "db", image: "postgres", ports: ["5432:5432"]
  end
end

Utilisation de provisionnement avec Ansible pour configurer la VM :

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2204"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

Le fichier playbook.yml doit être dans le même dossier où est le Vagrantfile.


Créer un environnement de développement web : exemple de fichier Vagrantfile qui crée une machine virtuelle avec PHP 7.4, nginx et MySQL :

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'

Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2204"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = "2"
  end
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y nginx mysql-server php7.4 php7.4-mysql
  SHELL
end

Affaire à suivre…

Restez informé

Abonnez-vous au flux RSS ou suivez pour les nouveaux articles.

Articles similaires

Aucune image
#kernel

Compiler et installer le kernel stable 6.12.x

Cette page vous donne une méthode simple pour compiler un kernel Linux, sous Debian, avec les options minimales et fonctionnelles pour tous les systèmes x86_64.

Lire l'article
Aucune image
#linux

SSH via Tor

Tunneliser une connexion SSH au travers de Tor, c'est possible ! Avec cet article, découvrez comment faire en quelques instants.

Lire l'article