Vagrantfile


Vagrantfile permite describir y configurar la máquina virtual que se creará en el sistema

oscar Escrito por oscar 10 April 2025 181 0

Como podemos encontrar en la documentación oficial de vagrantfile permite describir y configurar la máquina virtual que se creará en el sistema. Vagrant está diseñado para ejecutarse a partir de este archivo, lo que facilita el control de versiones y la portabilidad del entorno. Aunque la sintaxis del Vagrantfile está basada en Ruby, no es necesario dominar este lenguaje, ya que su configuración se realiza principalmente mediante variables y opciones predefinidas.

Antes de empezar

Se han creado varios post en donde puede encontrar documentación basica que le ayudara a comprender menor el contenido descrito en este post:

🔹 ¿Qué es el Vagrantfile?

El archivo Vagrantfile es el archivo principal de configuración de Vagrant. Define todo el entorno de tu máquina virtual (VM), incluyendo el sistema operativo, la red, el proveedor (como VirtualBox), carpetas sincronizadas, aprovisionamiento, y más.

🔹 ¿Cómo funciona?

Cuando ejecutas vagrant up, Vagrant busca un archivo llamado Vagrantfile en el directorio actual. Este archivo contiene instrucciones en Ruby DSL (lenguaje de dominio específico) para:

  • Especificar el sistema operativo (la box)

  • Definir cuántas VMs quieres levantar

  • Configurar la red, carpetas compartidas, puertos, etc.

  • Indicar scripts o herramientas para el aprovisionamiento (como shell, Ansible, Puppet, etc.)

🔹 ¿Cómo crear un Vagrantfile?

Puedes crear uno fácilmente ejecutando:

vagrant init 

Esto generará un archivo básico Vagrantfile con comentarios. Lo puedes editar según tus necesidades.

🔹 Estructura básica de un Vagrantfile

Aquí te dejo un ejemplo básico y bien comentado:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  
  # Nombre de la box base (una imagen preconfigurada del SO)
  config.vm.box = "ubuntu/bionic64"

  # Configurar red privada
  config.vm.network "private_network", ip: "192.168.56.10"

  # Carpetas sincronizadas entre host y guest
  config.vm.synced_folder "./codigo", "/home/vagrant/codigo"

  # Configuración del proveedor (por ejemplo VirtualBox)
  config.vm.provider "virtualbox" do |vb|
    vb.name = "MiMaquinaVagrant"
    vb.memory = "1024"
    vb.cpus = 2
  end

  # Script de aprovisionamiento (shell)
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
  SHELL
end

🔹 Explicación de cada parte

Sección Descripción
config.vm.box Define el sistema operativo base. Puedes buscar boxes en https://app.vagrantup.com/boxes/search
config.vm.network Define si es red NAT, privada o pública. Puedes asignar una IP fija.
config.vm.synced_folder Sincroniza carpetas entre tu máquina host y la VM.
config.vm.provider Configura el proveedor (VirtualBox, VMware, etc.). Puedes asignar RAM, CPU, nombre, etc.
config.vm.provision Define el aprovisionamiento (shell script, Ansible, etc.). Se ejecuta al levantar la VM por primera vez o al usar vagrant provision.

🔹 Comandos útiles de Vagrant

Comando Descripción
vagrant init Crea un Vagrantfile básico
vagrant up Levanta la VM según el Vagrantfile
vagrant ssh Conecta a la VM por SSH
vagrant halt Detiene la VM
vagrant reload Reinicia la VM (aplica cambios)
vagrant provision Reaplica el script de aprovisionamiento
vagrant destroy Elimina la VM completamente

🔹 Buenas prácticas

  • Usa carpetas sincronizadas para mantener tu código fuera de la VM.

  • Aísla cada proyecto en una carpeta con su propio Vagrantfile.

  • Usa aprovisionamiento para evitar tener que configurar manualmente cada vez.

  • Usa variables de entorno o archivos YAML para manejar configuraciones más avanzadas.


Comentario

Debe aceptar antes de enviar