Tecnología que te entiende
Vagrant: entornos de desarrollo reproducibles con un comando
Virtualización

Vagrant: entornos de desarrollo reproducibles con un comando

25 Apr 2026 2 min de lectura 879 vistas

"En mi máquina funciona" es la frase más costosa del desarrollo de software. Vagrant resuelve ese problema creando entornos de desarrollo reproducibles con un solo archivo de configuración. Un comando y tienes una VM idéntica a la de producción.

¿Qué es Vagrant?

Vagrant es una herramienta de HashiCorp que automatiza la creación y configuración de máquinas virtuales. Define el entorno de desarrollo en un archivo Vagrantfile (Ruby) que se versiona con Git — cualquier miembro del equipo ejecuta vagrant up y obtiene exactamente el mismo ambiente en minutos.

Vagrant no es un hypervisor — trabaja sobre VirtualBox, VMware, Hyper-V o libvirt. Es la capa de automatización encima del hypervisor.

Instalación

# Descargar desde developer.hashicorp.com/vagrant/downloads

# Vagrant necesita un hypervisor — VirtualBox es el más común
# (instalar VirtualBox primero)

# Verificar instalación
vagrant version
vagrant global-status  # ver todas las VMs administradas por Vagrant

Tu primer Vagrantfile

# Vagrantfile

Vagrant.configure("2") do |config|
  # Box base (imagen del OS — se descarga de app.vagrantup.com)
  config.vm.box = "ubuntu/jammy64"  # Ubuntu 22.04 LTS

  # Nombre y hostname de la VM
  config.vm.hostname = "solutions-dev"

  # Red privada — la VM obtiene esta IP accesible desde el host
  config.vm.network "private_network", ip: "192.168.56.10"

  # Carpeta sincronizada: tu código local disponible en la VM
  config.vm.synced_folder ".", "/var/www/html", type: "virtualbox"

  # Recursos del hypervisor (VirtualBox)
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
    vb.name = "solutions-dev"
  end

  # Provisioning: comandos que corren la primera vez
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2 php8.1 php8.1-mysql mariadb-server
    systemctl enable --now apache2
    systemctl enable --now mariadb
    echo "¡Entorno solutions_ listo!" > /var/www/html/status.txt
  SHELL
end

Los comandos esenciales

# Crear e iniciar la VM (primera vez: descarga el box y provisiona)
vagrant up

# Conectar por SSH (sin contraseña, sin clave)
vagrant ssh

# Detener la VM (se puede reiniciar después)
vagrant halt

# Suspender la VM (guardar estado de RAM)
vagrant suspend
vagrant resume

# Destruir la VM (elimina todo, el Vagrantfile se conserva)
vagrant destroy

# Re-ejecutar el provisioning sin destruir la VM
vagrant provision

# Ver el estado de todas las VMs
vagrant global-status

Multi-machine: varios servidores

Vagrant.configure("2") do |config|

  # Servidor web
  config.vm.define "web" do |web|
    web.vm.box = "ubuntu/jammy64"
    web.vm.hostname = "web-server"
    web.vm.network "private_network", ip: "192.168.56.10"
    web.vm.provision "shell", inline: "apt-get install -y nginx"
  end

  # Base de datos
  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/jammy64"
    db.vm.hostname = "db-server"
    db.vm.network "private_network", ip: "192.168.56.20"
    db.vm.provision "shell", inline: "apt-get install -y mariadb-server"
  end

end

# Comandos para multi-machine:
vagrant up            # levanta todas las VMs
vagrant up web        # solo la VM "web"
vagrant ssh db        # SSH a la VM "db"
vagrant halt web      # detener solo "web"

Boxes populares

# Buscar en app.vagrantup.com

# OS más populares:
vagrant box add ubuntu/jammy64      # Ubuntu 22.04
vagrant box add debian/bookworm64   # Debian 12
vagrant box add centos/stream9      # CentOS Stream 9
vagrant box add bento/ubuntu-22.04  # Boxes de Bento (más mantenidos)

# Ver boxes descargados localmente
vagrant box list
✅ Vagrant vs Docker: Vagrant provisiona VMs completas (OS incluido). Docker provisiona contenedores (sin OS separado). Vagrant es ideal para replicar entornos de servidor completos con múltiples servicios. Docker es mejor para despliegue de aplicaciones individuales. Pueden coexistir: Vagrant para la infraestructura, Docker para las apps.
"El Vagrantfile es la documentación ejecutable de tu entorno de desarrollo. Si está en el repositorio, cualquier nuevo colaborador tiene el entorno correcto en 10 minutos."