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