Uso de Vagrant para desarrolladores

Home  >>  DevOps  >>  Uso de Vagrant para desarrolladores

Uso de Vagrant para desarrolladores

On octubre 6, 2015, Posted by , In DevOps,Programación,Sistemas,Vagrant, With No Comments

vagrant

 

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 dcirle 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.

Links y recursos

Documentación Vagrant

Fernando Aparicio
Full Stack Developer. Entusiasta del Open Source, métodos de organización y colaboración ágiles.

Actualmente estoy en busca de otras formas de mejorar en mi trabajo. Aprovechar el talento innato y la colaboración en equipo.

Lean, Kanban, Scrum ... Descubrir las pequeñas cosas que dan calidad al proceso a través de las personas usando PNL. Renovar los esquemas para motivar la colaboración.

Nuevos tiempos, nuevas soluciones.
Comments are closed.