A la découverte de vagrant
ZINSOU Trinité

ZINSOU Trinité @trinitezinsou

About: Software builder into clean architecture, automation & clear docs. Bilingual (EN/FR). Open to collabs, tech writing & job opportunities.

Location:
Remote
Joined:
Jun 1, 2022

A la découverte de vagrant

Publish Date: Sep 14 '25
0 0

🧠 Introduction

"Et si tu pouvais faire apparaître autant de machines comme par magie, autant que tu en voudrais pour tes environnementes tests? Pas de baguette, juste Vagrant."

Les environnements de test peuvent vite virer au cauchemar : installation foireuse, conflits de versions, etc. Et si on changeait ça avec un outil qui te fait sentir comme un DevOps sorcier ? 🎩✨

Dans cet article, on va :

  • Découvrir ce qu’est Vagrant (sans s’endormir) 😴❌

  • L’utiliser pour créer deux VMs Ubuntu 🖥️🖥️ et préparer un environnement de test pour notre série sur les sauvegardes incrémentales avec Postgre+Barman

  • Et tester notre setup comme des pros 🧪

🪄 Vagrant, c’est quoi ce truc ?

"Vagrant, c’est un peu comme Docker, mais pour les VM. C’est ton chef d’orchestre pour VirtualBox, VMware, Hyper-V, et autres joyeusetés. C’est un outil ultra fiable pour gérer des environnements complets avec de vraies machines virtuelles de manière simple et automatisée."

Il s’agit d’un outil développé par Hashicorp permettant de gérer facilement des VMs avec une isolation totale des dépendances et des configurations, tout ceci dans un environement unique et jetable.

Tu lui écris un Vagrantfile, tu tapes vagrant up, et boum 💥 : ta(tes) machine(s) est(sont) là, toute prête à etre utilisée(s). Pas besoin de cliquer sur 27 boutons dans VirtualBox ou te battre avec Hyper-V.

Vagrant t’évite de :

❌ Aller télécharger une ISO

❌ Suivre l’installateur à la main

❌ Galérer avec le réseau et les scripts

✅ Il te permet de tout faire automatiquement, et de réinitialiser ton environnement quand tu veux, comme une sauvegarde rapide de ta vie de dev.

🔍 Pourquoi c’est pratique ?

  • 🔄 Test facile : tu veux tester une config Postgres ? SSH ? Un cluster ? Un lab réseau? Boom, tu spin une VM.

  • 💥 Sans risque : tu peux facilement préparer des démos ou tutoriels sans polluer ta machine principale. Si tu casses tout, tu fais vagrant destroy && vagrant up et ça repart.

  • 🤝 Partageable : tu bosses en équipe ? Tu commits ton Vagrantfile et tout le monde a le même environnement.

  • 🧪 Proche de la prod : tu peux créer des environnements qui imitent vraiment un serveur réel (contrairement à Docker qui fait du container). Tu as désormais donc tout pour apprendre l’admin système ou le DevOps.

🛠️ Comment ça fonctionne ?

Vagrant repose sur :

  • Un provider (généralement VirtualBox ou Hyper-V) pour faire tourner les machines

  • Les boxes : ce sont des images de systèmes déployables au sein de tout environnement Vagrant. Il s'agit en pratique d'une façon de packager une distribution afin de permettre un déploiement uniforme quel que soit le système d'exploitation ou l'hyperviseur utilisé. Tu peux consulter le depot officiel des boxes de vagrant ici

  • Un Vagrantfile (ta recette): le fichier dans lequel toute la magie se définie.

  • Des scripts ou outils pour provisionner la machine (installer des logiciels, configurer les services de base)

Vagrant va provisioner la machine en fonction de ce qui est décrit dans le fichier Vagrantfile (souvent à la racine du projet). Un fichier Vagrantfile est un fichier Ruby, dont le contenu ne nécessite pas une grande connaisance de Ruby. Il sert à décrire toutes les caractéristiques de la machine cible (stockages, Ram, réseaux, etc) et aussi à préparer tous les utilitaires de base nécessaire au bon fonctionnement de la machine.

🎓 Premiers pas avec vagrant

Dans la suite nous allons prendre en main vagrant et mettre en place un lab pour la série à propos des sauvegardes incrémentales avec postgres. On mettra dans la suite notre lab en place sur une machine Ubuntu.

Il s’agira à la fin de pouvoir démarrer deux VM sur lequelles nous allons installer respectivement barman et postgres.

🚀 Installation de Vagrant

Tu peux installer vagrant soit en ligne de commande soit avec un executable disponible sur la documentation officielle ici.

Il faudra aussi VirtualBox fonctionnel pour la suite, c’est le provider vagrant que nous allons utiliser dans la suite

🛠️ Manipulation de Vagrant

Pour démarrer nous allons simplement écrire notre premier Vagrantfile, on y mettra le minimum d’information pour faire tourner une VM. Il faudra créer un dossier qui contiendra un fichier Vagrantfile dont le contenu pourra être le suivant

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
end
Enter fullscreen mode Exit fullscreen mode

Vagrant mets à disposition une large variété de commande pour manipuler les différentes composantes de l’ecosystème vagrant comme vagrant box list ou vagrand box add box_name pour respectivement lister les box disponibles localement, et ajouter une box à la collection locale.

$ vagrant box add ubuntu/focal64
==> box: Loading metadata for box 'ubuntu/focal64'
    box: URL: https://vagrantcloud.com/api/v2/vagrant/ubuntu/focal64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'ubuntu/focal64' (v2004.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/ubuntu/boxes/focal64/versions/20240821.0.1/providers/virtualbox/unknown/vagrant.box
Enter fullscreen mode Exit fullscreen mode
$ vagrant box list             
ubuntu/bionic64 (virtualbox, 20230607.0.0)
ubuntu/focal64  (virtualbox, 20240220.0.0)
Enter fullscreen mode Exit fullscreen mode

Plus d’information sur la gestion des box vagrant ici.

Vérifions ensuite que la syntaxe du fichier est correcte avec vagrant validate. S’il n’y a aucune erreur tu verras le message suivant Vagrantfile validated successfully.

A ce stade s’il n’y a aucune erreur, on peut lancer notre vm avec la commande vagrant up

$ vagrant up             
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/focal64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/focal64' version '20240220.0.0' is up to date...
==> default: A newer version of the box 'ubuntu/focal64' for provider 'virtualbox' is
==> default: available! You currently have version '20240220.0.0'. The latest is version
==> default: '20240821.0.1'. Run `vagrant box update` to update.
==> default: Setting the name of the VM: ocr_default_1749933808776_2967
==> default: Clearing any previously set network interfaces...
[...]

$ vagrant status
Current machine states:

default                   running (virtualbox)
[...]
Enter fullscreen mode Exit fullscreen mode

Une fois la VM lancée, on pourra s’y connecter par ssh pour effectuer nos différentes manipulations avec la commande vagrant ssh nom_machine.

Vagrant peut etre bien aussi utilisé dans un context pour répondre à un schéma d’architecture multi-tiers ie plusieurs machines(parfois avec différents OS) à la fois comme c’est souvent le cas en production; il suffi juste d’alligner autant de description de VM qu’il nous faut.

Connectons nous à présent à notre machine jusqu’ici préparée

$ vagrant ssh default             
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-172-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
[...]
vagrant@vagrantbox:~$
Enter fullscreen mode Exit fullscreen mode

Le diagramme ci-dessous illustre le parcours typique d'une machine virtuelle Vagrant, depuis son initialisation jusqu'à sa suppression complète.

Cycle de vie VM Vagrant

Étapes principales

  1. vagrant init

    Initialise un projet Vagrant en créant un Vagrantfile.

  2. Configured vagrantfile

    Etape importante pour la mise en place du Vagrantfile. On y mettre le necessaire pour la préparation de la machine(provisonnement et autre). Ensuite grace à la commande vagrant up on démarre la machine virtuelle. Si elle n’existe pas, elle est créée et provisionnée.

  3. Running

    La machine est en cours d'exécution. À partir de là, plusieurs options s’offrent à toi :

* `vagrant reload` : redémarre la VM avec la config à jour

* `vagrant suspend` / `vagrant resume` : suspend et reprend l’exécution

* `vagrant halt` : éteint la VM proprement

* `vagrant provision` : réexécute les scripts de provisioning
Enter fullscreen mode Exit fullscreen mode
  1. Destroy Avec vagrant destroy, la VM est complètement supprimée. Tu reviens alors à un état propre.

🚀 Provisionner les VM vagrant

Maintenant que notre environnement de base est défini dans le Vagrantfile, il est temps de préparer chaque machine pour qu’elles soient prêtes à l’emploi ie installer le nécessaire qu’il faut pour les utiliser; c’est l’etape du provisionnement.

Vagrant met à disposition plusieurs interfaces pour provisionner nos VM: les provisionneur de type shell, fichier, chef, docker, ansible, etc. Dans la suite, nous allons découvrir quelques un de ces provisonneurs et préparer le nécessaire pour provisonner nos VM pour le lab sur postgres et vagrant.

  1. Provisionner Shell

Il permet de spécifier une suite d’instruction à exécuter pour provisionner la machine. Cette interface supporte par defaut deux options inline et path pour respectivement spécifier une commande à directement saisir dans le vagranfile ou le chemin vers un script bash deja pret à l’emploi pour préparer notre machine comme le montre l’exemple ci dessous

Vagrant.configure("2") do |config|
  # ... autre configuration
  config.vm.provision "shell",
    inline: "echo Hello, World"
end

Vagrant.configure("2") do |config|
  # ... autre configuration
  config.vm.provision "shell", path: /path/to/my/bash/script
end
Enter fullscreen mode Exit fullscreen mode
  1. Provisionner fichier

Il permet de monter un fichier ou un dossier depuis la machine hôte vers la machine virtuelle.

Ce mécanisme est particulièrement utile lorsqu’il s’agit de partager des scripts de provisionnement, des fichiers de configuration ou des jeux de données entre l’hôte et la VM, sans avoir à les copier manuellement à chaque fois. Pour copier par exemple un fichier vers la machine hote, la syntaxe est la suivante:

Vagrant.configure("2") do |config|
  # ... autre configuration

  config.vm.provision "file", source: "~/path/to/host/folder", destination: "$HOME/remote/newfolder"
end
Enter fullscreen mode Exit fullscreen mode

Cette copie est ponctuelle et ne synchronise pas l’etat des fichiers. Pour synchroniser l’etat des fichiers entre l’hote et la VM, la configuration doit se présenter comme suit:

Vagrant.configure("2") do |config|
  # ... autre configuration

  config.vm.synced_folder "src/", "/srv/website"
end
Enter fullscreen mode Exit fullscreen mode

Pour plus d’informations sur la sychronisation consulter la documentation officielle ici.

  1. Provisionner ansible

Contrairement aux scripts shell classiques, le provisionneur Ansible permet de décrire l’état attendu d’un système de manière déclarative. Cela signifie que tu écris des "playbooks" (fichiers YAML) qui définissent ce que tu veux obtenir (ex. : PostgreSQL installé, un utilisateur créé, un service démarré), et Ansible s’occupe de faire le nécessaire pour atteindre cet état, sans répéter inutilement les tâches déjà effectuées.

🔍 Avantages d’utiliser Ansible avec Vagrant :

  • ✅ Code plus lisible, structuré et réutilisable.

  • 🔁 Idempotence : rejouer un playbook ne modifie rien si tout est déjà en place.

  • ⚙️ Facile à maintenir, surtout pour des environnements complexes ou multi-machines.

Vagrant peut exécuter Ansible en tant que provisionneur local ou distant, selon que Ansible est installé sur l’hôte ou sur la VM elle-même.

Voici un exemple minimal dans un Vagrantfile :

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "playbook.yml"
  ansible.inventory_path = "inventory.ini"
end
Enter fullscreen mode Exit fullscreen mode

🧪 Phase pratique : mise en place du lab PostgreSQL + Barman

Il est temps de passer à la pratique et de construire notre environnement de test.

L’objectif de cette phase est de créer deux machines virtuelles à l’aide de Vagrant :

  • 🐘 Une première VM avec PostgreSQL installé; elle simulera notre base de données source,

  • 📦 Une seconde VM avec barman installé; elle représentera un poste administrateur ou une machine de contrôle depuis laquelle on pourra gérer nos sauvegardes.

Nous allons automatiser l’installation de chaque composant à l’aide de scripts de provisionnement Bash. Le Vagrantfile définira l’architecture de notre lab et exécutera les scripts automatiquement au démarrage des machines.

Commençons par créer le fichier Vagrantfile et les scripts nécessaires à l’installation de postgres et barman.

Vagranfile:

# Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.define "vm1_postgres" do |vm1|
    vm1.vm.box = "ubuntu/jammy64"
    vm1.vm.hostname = "postgres"
    vm1.vm.network "private_network", ip: "192.168.56.10"
    vm1.vm.provision "shell", path: "scripts/setup_postgres.sh"
  end

  config.vm.define "vm2_vagrant" do |vm2|
    vm2.vm.box = "ubuntu/jammy64"
    vm2.vm.hostname = "vagrant"
    vm2.vm.network "private_network", ip: "192.168.56.11"
    vm2.vm.provision "shell", path: "scripts/setup_vagrant.sh"
  end
end
Enter fullscreen mode Exit fullscreen mode

scripts/setup_postgres.sh

#!/bin/bash
set -e

echo "[INFO] Installation de PostgreSQL..."

# Mise à jour des paquets
sudo apt-get update

# Installation de PostgreSQL
sudo apt-get install -y postgresql postgresql-contrib

# Vérification
psql --version && echo "[OK] PostgreSQL installé"
Enter fullscreen mode Exit fullscreen mode

scripts/setup_barman.sh

#!/bin/bash
set -e

echo "[INFO] Installation de Barman..."

# Mise à jour des paquets
sudo apt-get update

# Installation de Barman (et dépendances)
sudo apt-get install -y barman

# Vérification
barman --version && echo "[OK] Barman installé"
Enter fullscreen mode Exit fullscreen mode

🧩 Conclusion

Nous venons de découvrir Vagrant et en application poser les bases d’un environnement de test en mettant en place deux machines virtuelles : l'une avec PostgreSQL installé, et l'autre avec Barman, notre outil de sauvegarde dans la série sur les sauvegardes incrémentales.

Grâce à Vagrant et aux scripts de provisionnement, nous avons automatisé le déploiement de cet environnement, ce qui nous permettra de reproduire facilement nos tests, de gagner du temps, et d’éviter les erreurs manuelles.

Ce que nous avons mis en place ici ne se limite pas au contexte de postgres et de barman : ce type de lab peut servir de base générique pour toutes sortes de pratiques DevOps, d’expérimentations systèmes ou de tests techniques en environnement isolé.

🧰 Un socle simple, reproductible et extensible idéal pour apprendre, tester, casser… et recommencer !

À très bientôt pour le prochain article de ce blog

Comments 0 total

    Add comment