RousselTMLEARNING

Automatisation

Bonnes pratiques Vagrant : des environnements reproductibles et rapides

Bonnes pratiques Vagrant : Vagrantfile versionné, boxes épinglées, provisioning idempotent, multi-machines, réseaux, dossiers synchronisés, snapshots, performances et nettoyage.

1. Principes #

Reproductible, jetable, versionné.

Les règles d'or #

Cycle de vie Vagrant
Un environnement qu'on ne peut pas détruire et recréer sereinement n'est pas reproductible.
  • Versionnez le Vagrantfile et les scripts de provisioning avec le code du projet.
  • Épinglez la version de la box (config.vm.box_version) pour que toute l'équipe ait le même socle.
  • Provisionnez de façon idempotente (Ansible, scripts rejouables) : vagrant provision doit pouvoir être relancé.
  • Ne stockez aucune donnée précieuse dans la VM : elle doit pouvoir être détruite à tout moment.

2. Un Vagrantfile propre #

Variables, boxes épinglées et ressources.

Exemple multi-machines #

# Vagrantfile
Vagrant.require_version ">= 2.4.0"

NODES = {
  "web" => { ip: "192.168.56.11", cpus: 1, memory: 1024 },
  "db"  => { ip: "192.168.56.12", cpus: 2, memory: 2048 },
}

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-24.04"
  config.vm.box_version = "202407.22.0"
  config.vm.box_check_update = false
  config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/", "node_modules/"]

  NODES.each do |name, cfg|
    config.vm.define name do |node|
      node.vm.hostname = "#{name}.lab"
      node.vm.network "private_network", ip: cfg[:ip]
      node.vm.provider "virtualbox" do |vb|
        vb.name = "lab-#{name}"
        vb.cpus = cfg[:cpus]
        vb.memory = cfg[:memory]
        vb.linked_clone = true            # démarrage plus rapide, moins d'espace disque
      end
    end
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provision/site.yml"
    ansible.groups = { "webservers" => ["web"], "dbservers" => ["db"] }
  end
end

3. Commandes du quotidien #

Travailler efficacement.

Cycle de travail #

vagrant validate                               # vérifier le Vagrantfile
vagrant up --provider=virtualbox                # créer et démarrer
vagrant up web --no-provision                   # une seule machine, sans re-provisionner
vagrant status && vagrant global-status --prune
vagrant ssh web -c "systemctl status nginx"
vagrant provision web                           # rejouer le provisioning
vagrant reload --provision                      # redémarrer en réappliquant la config
vagrant snapshot save web avant-migration       # point de restauration
vagrant snapshot restore web avant-migration
vagrant halt / vagrant suspend / vagrant destroy -f
vagrant box list && vagrant box outdated && vagrant box prune
Bonne Pratique : Prenez un snapshot avant toute opération risquante : restaurer prend quelques secondes, bien moins que reconstruire.

Performance et alternatives #

  • Utilisez linked clones et des boxes légères (bento, generic).
  • Préférez rsync ou nfs à vboxsf pour les gros dossiers partagés.
  • Sur Linux, le provider libvirt (KVM) est plus performant que VirtualBox.
vagrant plugin list
vagrant plugin install vagrant-libvirt vagrant-hostmanager
VAGRANT_DEFAULT_PROVIDER=libvirt vagrant up
VAGRANT_LOG=debug vagrant up 2> vagrant.log          # diagnostic
Erreur Courante : Ne laissez pas des VM oubliées consommer de la RAM : vagrant global-status liste toutes les machines, quel que soit le dossier.

Schéma de référence et vérification rapide #

Visualiser le principe et le contrôler en ligne de commande.

Schéma de référence #

Architecture Vagrant
Le Vagrantfile est la seule source de vérité.
vagrant status
vagrant ssh-config web
vagrant box list

Articles liés

Vagrant : vue d'ensemble et vocabulaire (box, provider, provisioner, Vagrantfile)

Les notions indispensables pour suivre la formation Vagrant : à quoi sert Vagrant, le cycle de vie d'un envir…

Vagrant multi-machines : déployer un cluster Docker Swarm prêt à l'emploi

Construire avec un seul Vagrantfile un cluster Docker Swarm de trois nœuds (un manager, deux workers) dont la…

Les plugins Vagrant : étendre providers, provisioners et commandes

Comprendre le système de plugins de Vagrant : ce qu'un plugin peut ajouter (provider, provisioner, commande, …

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !