1. Principes #
Reproductible, jetable, versionné.
Les règles d'or #
- Versionnez le
Vagrantfileet 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 provisiondoit 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
end3. 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 pruneBonne 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
rsyncounfsàvboxsfpour 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 # diagnosticErreur 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 #
vagrant status
vagrant ssh-config web
vagrant box listMon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Articles recommandés
Linux vs Unix : Le Guide Complet des Commandes et Distributions
Comprenez les différences entre Linux et Unix, explorez les distributions (serveur, desktop, ligh...
Ansible : l'inventaire (statique, dynamique, groupes et variables)
Comprendre et maîtriser l'inventaire Ansible : fichiers INI et YAML, groupes, variables d'hôte et...
Ansible : les commandes Ad-Hoc
Exécuter des actions immédiates sur un parc de serveurs avec ansible : modules ping, command, she...
Ansible : structurer son code avec les rôles
Créer, organiser et réutiliser des rôles Ansible : arborescence, defaults, tasks, handlers, templ...
Ansible : générer des fichiers dynamiques avec Jinja2 et les facts
Créer des fichiers de configuration dynamiques : templates Jinja2, variables, facts, filtres, bou...
Ansible : gérer la sécurité (Vault, SSH, privilèges et secrets)
Sécuriser Ansible : Ansible Vault, authentification SSH par clés, become et sudo, no_log, durciss...
Ansible : gérer son infrastructure avec des playbooks (Infrastructure as Code)
Écrire des playbooks de production : structure d'un projet, plays, handlers, tags, strategy seria...
Ansible : piloter ses automatisations avec une interface graphique (AWX, Semaphore, AAP)
Comparer et installer les interfaces graphiques d'Ansible : AWX, Ansible Automation Platform, Sem...
Ansible : aller plus loin (tests, qualité, CI/CD et performance)
Industrialiser Ansible : ansible-lint, yamllint, Molecule, intégration continue, collections, exe...