5 minute read

Usar una capa de abstracción para programar es una práctica recomendada en cualquier situación.

  1. Puedes montarte un escenario lo más fiel al servidor donde se usará.
  2. Todo el equipo comparte el mismo escenario al usar la misma máquina virtual.
  3. Existen máquinas preconfiguradas, con lo que te ahorras bajarte ISOs, instalar sistema base…
  4. El código se mantiene en tu máquina y se comparte en la virtual, con lo que puedes…
    1. Probar tu desarrollo en varios escenarios
    2. Borrar la máquina virtual cuando ya no lo necesitas y ahorrar espacio
  5. Algunos proveedores permiten que puedas subir tu máquina que usas con Vagrant, con lo que te ahorras trabajo si al final esa máquina acaba siendo la solución perfecta.

Cómo funciona

El funcionamiento es bastante simple. Vagrant usa un software de virtualización (VirtualBox por defecto) sobre una plantilla de una máquina virtual empaquetada (llamada box), que te puedes bajar de VagrantBox.

Las imágenes que te puedes bajar de VagrantBox vienen preparadas para que puedas personalizar la instalación usando herramientas de automatización como Chef , Puppet , Ansible .

Inicio rápido

Lo único que necesitas para arrancar una máquina virtual con vagrant son estos tres comandos.

vagrant box add {title} {url}
vagrant init {title}
vagrant up

Como ejemplo, para arrancar una máquina Centos 7 x64 el comando sería así:

vagrant box add centos7_x64 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
vagrant init centos7_x64
vagrant up

Breve explicación

Bajando la máquina virtual

El primer comando vagrant box add, Indica a vagrant que se baje una máquina virtual de github y la llamaremos centos7_x64. De esta forma, podremos usarla en más de un desarrollo.

¿Dónde se ha metido?

Las máquina virtuales que bajamos con Vagrant se guardan en una carpeta oculta dentro de nuestra área de usuario..vagrant.d/boxes

Inicializando máquina

En nuestro directorio de desarrollo, ejecutar vagrant init centos7_x64 genera un fichero de configuración llamado Vagrantfile, el cual contiene la configuración mínima que necesita para lanzar la máquima virtual con vagrant up.

Arrancando la máquina… ¿ya…?

Pues si… vagrant up levanta la máquina y nos da información relevante sobre cómo acceder a ella.

Bringing machine 'default' up with 'virtualbox' provider...
== default: Importing base box 'centos7_x64'...
== default: Matching MAC address for NAT networking...
== default: Setting the name of the VM: _Servers_default_1433410626659_98973
== default: Clearing any previously set forwarded ports...
== default: Clearing any previously set network interfaces...
== default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
== default: Forwarding ports...
default: 22 = 2222 (adapter 1)
== default: Booting VM...
== default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
== default: Machine booted and ready!
== default: Checking for guest additions in VM...
== default: Mounting shared folders...
default: /vagrant = /home/user/Desarrollos/test_vagrant

¿Qué nos dicen estas líneas?

Básicamente…

  1. Nos da un punto de entrada 127.0.0.1:2222 Más adelante veremos cómo abrir más puertos.
  2. Nos dice la carpeta compartida entre nuestra máquina y la virtual que ha levantado. /home/user/Desarrollos/test_vagrant

Más adelante ya lo personalizaremos un poco.

Comandos básicos

  • vagrant ssh – Entras en la máquina que has levantado
  • vagrant suspend – Hiberna la máquina. No es necesario apagarla.
  • vagrant resume – Despierta la máquina después de hibernarla.
  • vagrant halt – Apaga la máquina
  • vagrant reload – Vuelve a reconfigurar la máquina sin destruirla (apaga y arranca con la nueva configuración)
  • vagrant package – Crea tu propia versión empaquetada de máquina virtual para compartir con tu equipo, aunque usando la configuración te ahorras muchos bytes….

Modificando la configuración

Probando la instalación de un Pentaho 5.3 en un Centos 7. Nos damos cuenta que entre otras cosas… el puerto 8080 no está redireccionado y que va corto de RAM y procesador. Editando el Vagrantfile podemos encontrar ejemplos de cómo configurar la redirección de puertos del host al invitado y asignarle más RAM y CPU.También está documentado la página de VagrantDocs. En este caso es agregar las siguientes líneas:

config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
end

De esta forma podemos decirle a Vagrant que vuelta a levantar la máquina con la nueva configuración.

vagrant reload

Ahora veremos que ha incorporado la redirección que hemos agregado a la configuración.

== default: Attempting graceful shutdown of VM...
== default: Clearing any previously set forwarded ports...
== default: Clearing any previously set network interfaces...
== default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
== default: Forwarding ports...
default: 8080 = 8080 (adapter 1)
default: 22 = 2222 (adapter 1)
== default: Booting VM...

¿Dónde está el código fuente?

Lo interesante de esta manera de levantar servidores es que podemos crear y destruir las máquinas virtuales sin perder el código fuente.

Dentro del fichero de configuración de vagrant, podemos poner mapeos a nuestras carpetas donde tenemos el código fuente. Por ejemplo, para mapear nuestro directorio data, de nuestra máquina real en el directorio /vagrant_data de la virtual, agregaríamos la siguiente línea:

config.vm.synced_folder "data", "/vagrant_data"  ## Mapea

Conclusiones

Es una forma ideal para poder desarrollar sin complicaciones, homogeneizar los equipos y sus posibles escenarios. Se pueden hacer muchas más cosas… os animo a que echéis un vistazo a su documentación.

Documentación Vagrant

comments powered by Disqus