Aller au contenu

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

Informations sur l'encadré

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

État et information du MV

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

Optimisation des performances

  1. ** Affectation des ressources**: Allouer le processeur et la mémoire appropriés
  2. Dossiers synchronisés: Utilisez NFS pour une meilleure performance sur macOS/Linux
  3. Sélection de boîte: Choisissez des boîtes de base minimales
  4. Gestion des instantanés: Utiliser des instantanés pour les retours rapides
  5. ** Optimisation du fournisseur**: Configurer les optimisations spécifiques au fournisseur

Sécurité

  1. SSH Clés: Utilisez les touches SSH au lieu des mots de passe
  2. Isolement du réseau: Utiliser des réseaux privés si possible
  3. Pare-feu : Configurer les règles appropriées
  4. Mise à jour : tenir à jour les boîtes et les parfums
  5. Secrets: Ne pas commettre de secrets au contrôle des versions

Développement Flux de travail

  1. Contrôle de la version: Inclure Vagrantfile dans le contrôle de la version
  2. Documentation: Configuration et utilisation du document
  3. Consistance: Utiliser le même environnement dans toute l'équipe
  4. Tests: scripts de provisionnement d'essai
  5. Nettoyage: Nettoyer régulièrement les VM et les boîtes inutilisées

Dépannage

  1. Logs: Vérifiez les journaux Vagrant et fournisseur
  2. SSH: Utilisez vagrant ssh-config pour le débogage
  3. Réseau: Tester la connectivité réseau
  4. Provisionnement: Scénarios de provisionnement des essais séparément
  5. Ressources: Surveiller les ressources du système hôte