cli-tool
intermediate
utility
Vagabond
Copier toutes les commandes
Générer PDF
Commandes et flux de travail complets HashiCorp Vagrant pour la gestion de l'environnement de développement et la fourniture de machines virtuelles.
Installation et configuration
Command
Description
vagrant version
Show Vagrant version
vagrant -h
Show help information
vagrant init
Initialize new Vagrantfile
vagrant init ubuntu/jammy64
Initialize with specific box
Gestion des boîtes
Encadré Opérations
Command
Description
vagrant box list
List installed boxes
vagrant box add ubuntu/jammy64
Add box
vagrant box add --name mybox /path/to/box.box
Add local box
vagrant box remove ubuntu/jammy64
Remove box
vagrant box update
Update all boxes
vagrant box update --box ubuntu/jammy64
Update specific box
Command
Description
vagrant box outdated
Check for outdated boxes
vagrant box prune
Remove old box versions
vagrant box repackage ubuntu/jammy64
Repackage box
VM Gestion du cycle de vie
Opérations de base
Command
Description
vagrant up
Start and provision VM
vagrant halt
Shutdown VM
vagrant reload
Restart VM
vagrant destroy
Destroy VM
vagrant suspend
Suspend VM
vagrant resume
Resume suspended VM
Command
Description
vagrant status
Show VM status
vagrant global-status
Show all VMs status
vagrant global-status --prune
Clean up invalid entries
SSH et accès
Opérations SSH
Command
Description
vagrant ssh
SSH into VM
vagrant ssh-config
Show SSH configuration
vagrant ssh -- -L 8080:localhost:80
SSH with port forwarding
Fourniture
Commandes de fourniture
Command
Description
vagrant provision
Run provisioners
vagrant provision --provision-with shell
Run specific provisioner
vagrant up --provision
Start and provision
vagrant reload --provision
Restart and provision
Environnements multimachines
Commandes multimachines
Command
Description
vagrant up web
Start specific machine
vagrant ssh web
SSH to specific machine
vagrant halt db
Halt specific machine
vagrant destroy --force
Destroy all without confirmation
Coups de vue
Gestion des instantanés
Command
Description
vagrant snapshot save snapshot_name
Save snapshot
vagrant snapshot list
List snapshots
vagrant snapshot restore snapshot_name
Restore snapshot
vagrant snapshot delete snapshot_name
Delete snapshot
Gestion des greffons
Opérations de greffon
Command
Description
vagrant plugin list
List installed plugins
vagrant plugin install vagrant-vbguest
Install plugin
vagrant plugin uninstall vagrant-vbguest
Uninstall plugin
vagrant plugin update
Update all plugins
Exemples de fichiers vagabonds
Fichier de base des vagabonds
Vagrant.configure("2") do|config|
config.vm.box = "ubuntu/jammy64"
config.vm.hostname = "myserver"
# Network configuration
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "forwarded_port", guest: 80, host: 8080
# Provider configuration
config.vm.provider "virtualbox" do|vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "MyVM"
end
# Provisioning
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx
SHELL
end
Configuration multimachines
Vagrant.configure("2") do|config|
# Web server
config.vm.define "web" do|web|
web.vm.box = "ubuntu/jammy64"
web.vm.hostname = "web"
web.vm.network "private_network", ip: "192.168.56.10"
web.vm.provider "virtualbox" do|vb|
vb.memory = "1024"
vb.cpus = 1
end
web.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
# Database server
config.vm.define "db" do|db|
db.vm.box = "ubuntu/jammy64"
db.vm.hostname = "database"
db.vm.network "private_network", ip: "192.168.56.11"
db.vm.provider "virtualbox" do|vb|
vb.memory = "2048"
vb.cpus = 2
end
db.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y mysql-server
SHELL
end
end
```_
### Configuration avancée
```ruby
Vagrant.configure("2") do|config|
config.vm.box = "ubuntu/jammy64"
config.vm.box_version = "20230607.0.0"
# Synced folders
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "./app", "/var/www/html",
owner: "www-data", group: "www-data"
# Network configuration
config.vm.network "private_network",
ip: "192.168.56.10",
netmask: "255.255.255.0"
config.vm.network "public_network",
bridge: "en0: Wi-Fi (AirPort)"
# Port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
# Provider-specific configuration
config.vm.provider "virtualbox" do|vb|
vb.gui = false
vb.memory = "4096"
vb.cpus = 4
vb.name = "Development Server"
# VirtualBox specific settings
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
# Multiple provisioners
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get upgrade -y
SHELL
config.vm.provision "file",
source: "./configs/nginx.conf",
destination: "/tmp/nginx.conf"
config.vm.provision "shell", path: "scripts/setup.sh"
config.vm.provision "ansible" do|ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory"
end
end
```_
## Méthodes de fourniture
### Fourniture de réservoirs
```ruby
# Inline shell commands
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y docker.io
usermod -aG docker vagrant
SHELL
# External script
config.vm.provision "shell", path: "scripts/bootstrap.sh"
# Privileged and non-privileged
config.vm.provision "shell", privileged: false, inline: <<-SHELL
echo "Running as vagrant user"
SHELL
# Environment variables
config.vm.provision "shell", env: \\\\{"DEBIAN_FRONTEND" => "noninteractive"\\\\}, inline: <<-SHELL
apt-get install -y mysql-server
SHELL
Fourniture de fichiers
config.vm.provision "file",
source: "~/.ssh/id_rsa.pub",
destination: "~/.ssh/authorized_keys"
config.vm.provision "file",
source: "./configs/",
destination: "/tmp/configs"
Fournitures non durables
config.vm.provision "ansible" do|ansible|
ansible.playbook = "site.yml"
ansible.inventory_path = "inventory/vagrant"
ansible.limit = "all"
ansible.verbose = "v"
ansible.extra_vars = \\\\{
nginx_port: 80,
database_name: "myapp"
\\\\}
end
Fournitures Docker
config.vm.provision "docker" do|d|
d.pull_images "nginx"
d.pull_images "mysql:8.0"
d.run "nginx",
args: "-p 80:80 -v /vagrant/html:/usr/share/nginx/html"
d.run "mysql",
args: "-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306"
end
Configuration du réseau
Réseaux privés
# Static IP
config.vm.network "private_network", ip: "192.168.56.10"
# DHCP
config.vm.network "private_network", type: "dhcp"
# Multiple interfaces
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "private_network", ip: "10.0.0.10"
Réseaux publics
# Bridge to default interface
config.vm.network "public_network"
# Bridge to specific interface
config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)"
# Static IP on public network
config.vm.network "public_network", ip: "192.168.1.100"
Transfert de port
# Basic port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080
# Multiple ports
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
config.vm.network "forwarded_port", guest: 3306, host: 3306
# Auto-correct port conflicts
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
Configuration du fournisseur
Fournisseur VirtualBox
config.vm.provider "virtualbox" do|vb|
vb.gui = true
vb.memory = "4096"
vb.cpus = 4
vb.name = "MyVM"
# Advanced settings
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
Fournisseur VMware
config.vm.provider "vmware_desktop" do|vmware|
vmware.vmx["memsize"] = "4096"
vmware.vmx["numvcpus"] = "4"
vmware.vmx["displayName"] = "MyVM"
end
Fournisseur hyper-V
config.vm.provider "hyperv" do|hv|
hv.memory = 4096
hv.cpus = 4
hv.vmname = "MyVM"
end
Dossiers fusionnés
Dossiers synthés de base
# Default synced folder (disabled)
config.vm.synced_folder ".", "/vagrant", disabled: true
# Custom synced folder
config.vm.synced_folder "./src", "/var/www/html"
# With options
config.vm.synced_folder "./app", "/var/www/html",
owner: "www-data",
group: "www-data",
mount_options: ["dmode=775,fmode=664"]
Dossiers synchronisés NFS
config.vm.synced_folder "./", "/vagrant",
type: "nfs",
nfs_udp: false,
nfs_version: 4
Dossiers fusionnés SMB (Windows)
config.vm.synced_folder "./", "/vagrant",
type: "smb",
smb_username: "username",
smb_password: "password"
Meilleures pratiques
** Affectation des ressources**: Allouer le processeur et la mémoire appropriés
Dossiers synchronisés : Utilisez NFS pour une meilleure performance sur macOS/Linux
Sélection de boîte : Choisissez des boîtes de base minimales
Gestion des instantanés : Utiliser des instantanés pour les retours rapides
** Optimisation du fournisseur**: Configurer les optimisations spécifiques au fournisseur
Sécurité
SSH Clés : Utilisez les touches SSH au lieu des mots de passe
Isolement du réseau : Utiliser des réseaux privés si possible
Pare-feu : Configurer les règles appropriées
Mise à jour : tenir à jour les boîtes et les parfums
Secrets : Ne pas commettre de secrets au contrôle des versions
Développement Flux de travail
Contrôle de la version : Inclure Vagrantfile dans le contrôle de la version
Documentation : Configuration et utilisation du document
Consistance : Utiliser le même environnement dans toute l'équipe
Tests : scripts de provisionnement d'essai
Nettoyage : Nettoyer régulièrement les VM et les boîtes inutilisées
Dépannage
Logs : Vérifiez les journaux Vagrant et fournisseur
SSH : Utilisez vagrant ssh-config
pour le débogage
Réseau : Tester la connectivité réseau
Provisionnement : Scénarios de provisionnement des essais séparément
Ressources : Surveiller les ressources du système hôte