Saltar a contenido

Vagabundos

"Clase de la hoja"

########################################################################################################################################################################################################################################################## Copiar todos los comandos
########################################################################################################################################################################################################################################################## Generar PDF seleccionado/button

■/div titulada

Completo HashiCorp Vagrant comandos y flujos de trabajo para la gestión del entorno de desarrollo y el suministro de máquinas virtuales.

Instalación

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

Box Management

Operaciones en caja

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

Información del recuadro

Command Description
vagrant box outdated Check for outdated boxes
vagrant box prune Remove old box versions
vagrant box repackage ubuntu/jammy64 Repackage box

VM Gestión del ciclo de vida

Operaciones básicas

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

VM Status and Information

Command Description
vagrant status Show VM status
vagrant global-status Show all VMs status
vagrant global-status --prune Clean up invalid entries

SSH y Access

SSH Operations

Command Description
vagrant ssh SSH into VM
vagrant ssh-config Show SSH configuration
vagrant ssh -- -L 8080:localhost:80 SSH with port forwarding

Provisioning

Comandos de provisión

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

Multi-Machine Environments

Comandos Multi-Machine

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

Juegos de rol

Gestión de instantáneas

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

Gestión de plugins

Operaciones de enchufe

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

Ejemplos de perfil de vagabundeo

Basic Vagrantfile

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

Multi-Machine Setup

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

Configuración avanzada

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étodos de disposición

Shell Provisioning

# 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

Suministro de archivos

config.vm.provision "file",
  source: "~/.ssh/id_rsa.pub",
  destination: "~/.ssh/authorized_keys"

config.vm.provision "file",
  source: "./configs/",
  destination: "/tmp/configs"

Ansible Provisioning

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

Docker Provisioning

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

Configuración de red

Redes privadas

# 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"

Redes públicas

# 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"

Port Forwarding

# 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

Configuración del proveedor

Proveedor 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

VMware Proveedor

config.vm.provider "vmware_desktop" do|vmware|
  vmware.vmx["memsize"] = "4096"
  vmware.vmx["numvcpus"] = "4"
  vmware.vmx["displayName"] = "MyVM"
end

Proveedor Hyper-V

config.vm.provider "hyperv" do|hv|
  hv.memory = 4096
  hv.cpus = 4
  hv.vmname = "MyVM"
end

Carpetas sincronizadas

Carpetas básicas sincronizadas

# 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"]

NFS Sinced Folders

config.vm.synced_folder "./", "/vagrant",
  type: "nfs",
  nfs_udp: false,
  nfs_version: 4

SMB Sinced Folders (Windows)

config.vm.synced_folder "./", "/vagrant",
  type: "smb",
  smb_username: "username",
  smb_password: "password"

Buenas prácticas

Optimización del rendimiento

  1. Asignación de recursos: Asignar la CPU apropiada y la memoria
  2. Carpetas sincronizadas: Use NFS para un mejor rendimiento en macOS/Linux
  3. ** Selección de bloques**: Elija cajas base mínimas
  4. Snapshot Management: Use instantáneas para retrocesos rápidos
  5. ** Optimización del proveedor**: Configurar optimizaciones específicas del proveedor

Seguridad

  1. SSH Keys: Utilice las teclas SSH en lugar de contraseñas
  2. Isolación de red: Use redes privadas cuando sea posible
  3. Firewall: Configurar reglas apropiadas de cortafuegos
  4. Actualizaciones: Mantener cajas y Vagrant actualizado
  5. Secrets: No cometas secretos al control de versiones

Development Workflow

  1. Version Control: Include Vagrantfile en control de versiones
  2. Documentación: Configuración de documentos y uso
  3. Consistencia: Use el mismo entorno en equipo
  4. Testing: Test provisioning scripts
  5. Cleanup: Limpiar regularmente VM y cajas sin usar

Solución de problemas

  1. Logs: Revisar los registros de Vagrant y proveedores
  2. SSH: Use vagrant ssh-config_ para depurar
  3. Networking: Comprobar conectividad de red
  4. Provisioning: Probando scripts por separado
  5. Recursos: Supervisar los recursos del sistema anfitrión