Configuración de múltiples máquinas en un solo Vagrantfile


Configuración de múltiples máquinas en un solo Vagrantfile por medio de config.vm.define

Configuración de múltiples máquinas en un solo Vagrantfile
oscar Escrito por oscar 27 April 2025 95 0

Vagrant permite definir múltiples máquinas en un solo Vagrantfile, lo que es ideal para simular redes, arquitecturas cliente-servidor, clústeres, etc.

🛠️Crear un proyecto

Procedemos a crear un proyecto en vagrant como lo explico en primeros pasos con vagrant, creamos un directorio llamado proyecto-vagrant y ejecutamos:

vagrant init

Esto creara en el directorio el archivo proyecto-vagrant vagrantfile el cual vamos a agregar el box "ubuntu/bionic64" de momento, nos deberá quedar de la siguiente forma:

Vagrant.configure("2") do |config| 
  config.vm.box = "ubuntu/bionic64"
end

Iniciamos vagrant

vagrant up

Vemos que ha creado la maquina virtual en virtualbox y vemos que por defecto a dejado las siguientes caracteristicas en esta máquina virtual.

⚙️ ¿Cómo configurar múltiples máquinas en un solo Vagrantfile?

Se hace usando el método config.vm.define dentro del Vagrantfile. Cada máquina tiene su propia configuración aislada.

configurar múltiples máquinas
configurar múltiples máquinas

🧱 Ejemplo básico de múltiples máquinas

Vamos a modificar el archivo vagrantfile creado en el ejemplo del proyecto inicial, donde vamos a colocar el siguiente código:

Vagrant.configure("2") do |config| 
  config.vm.define "web" do |web| 
    web.vm.box = "hashicorp/bionic64" 
    web.vm.hostname = "webserver" 
    web.vm.network "private_network", ip: "192.168.56.10" 
  end 
  config.vm.define "db" do |db| 
    db.vm.box = "hashicorp/bionic64" 
    db.vm.hostname = "database" 
    db.vm.network "private_network", ip: "192.168.56.11" 
  end
end

🧩 ¿Qué pasa aquí?

  • config.vm.define "nombre" define una máquina llamada "nombre".
  • Dentro de cada bloque (web, db) puedes hacer configuraciones individuales:

🎯 ¿Cómo levantar las máquinas?

Levantar todas las máquinas:

vagrant up

Levantar solo una máquina:

vagrant up web

Conectar vía SSH a una máquina específica:

vagrant ssh db

🛠️ Ejemplo avanzado (con aprovisionamiento)

Supongamos que quieres que una máquina instale Apache automáticamente:

Vagrant.configure("2") do |config| 
  config.vm.define "web" do |web| 
    web.vm.box = "hashicorp/bionic64" 
    web.vm.network "private_network", ip: "192.168.56.10" 
    web.vm.provision "shell", inline: <<-SHELL sudo apt update sudo apt install -y apache2 SHELL 
  end 
  config.vm.define "db" do |db| 
    db.vm.box = "hashicorp/bionic64" 
    db.vm.network "private_network", ip: "192.168.56.11" 
    db.vm.provision "shell", inline: <<-SHELL sudo apt update sudo apt install -y mysql-server SHELL 
  end 
end

👉 Así cuando haces vagrant up, automáticamente tendrás un servidor web y una base de datos configurados.

⚡ Resumen rápido

Comando Función
vagrant up Levanta todas las máquinas
vagrant up nombre Levanta solo una
vagrant ssh nombre Conecta por SSH a una
vagrant halt Apaga todas
vagrant halt nombre Apaga una específica

Comentario

Debe aceptar antes de enviar