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
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.
🧱 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:- Asignar diferente box
- Configurar IPs privadas
- Asignar hostname
- Provisionar (instalar software automáticamente)
🎯 ¿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 |