INTRODUCCIÓN A VAGRANT, CÓMO INSTALAR “LAMP” EN CENTOS 7

vagrantEl siguiente post es un extracto y traducción de la pagina de documentación de Vagrant:

https://docs.vagrantup.com/v2/

El tutorial está escrito usando el siguiente entorno para el “LAB”:

 

  • Hardware: Portátil MacBook Pro.
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.8.
  • Vagrant versión 1.7.4
  • VirtualBOX versión 4.3.28
  • Box de CentOS 7

 

¿Qué es Vagrant?

“Vagrant” es un software que te ayuda a crear y gestionar “entornos virtuales”, por el cual puedes ejecutar una imagen de una distribución de “GNU/Linux” o cualquier otro Sistema Operativo (MS Windows, BSD, etc.), llamada “box” dentro de tu sistema anfitrión y ejecutar una aplicación y sus dependencias fácilmente en el interior de la misma. También te permite empaquetar la máquina configurada y compartirla con los demás, o simplemente compartir tus archivos de configuración y replicar el mismo entorno en diferentes máquinas. Vamos a ver un poco de la terminología antes de empezar:

  • “Box”: Un paquete que contiene la imagen del sistema operativo y los metadatos.
  • “Host” y Máquina “Guest”: “Host” ó anfitrión es aquel que inicializa “Vagrant” mientras que el sistema “Guest” es el virtualizado.
  • “Providers”: Software que maneja el proceso de virtualización (por ejemplo “VirtualBox”).
  • “VagrantFile”: Contiene la descripción de la máquina (está programado en Ruby).
  • “Shared Folder”: Permite editar los archivos en el “Host” compartiendo una carpeta con el “Guest”.

La instalación de Vagrant es bastante sencilla, podemos encontrar los binarios para casi todos los sistemas. Antes de instalar “vagrant”, se debe instalar el proveedor (“Provider”) que desees utilizar (Virtualbox, VMware, Hyper-V, Docker, entre otros). En mi caso, VirtualBox

 

Proceso de instalación

Para ello te remito a un post anterior en el que se trato el tema de forma somera:

VIRTUALIZACIÓN CON “VAGRANT” Y “VIRTUALBOX”.

 

Introducción

Una vez que tengas “Vagrant” y un proveedor (Provider) instalado, en este caso “VirtualBOX” ya puedes empezar a experimentar con él. Vamos a probar un ejemplo escribiendo “vagrant init” en una nueva carpeta vacía llamada “centos_7”. Se creará un “VagrantFile” (archivo de configuración de “Vagrant”) con un “set up” mínimo y una gran cantidad de comentarios que documentan las opciones disponibles. Este sería un ejemplo de mi fichero sin comentarios:

 

Vagrant.configure(2) do | config |

config.vm.box = «centos_7»

config.vm.network » forwarded_port » , invitado : 80, host: 8001

config.vm.network «public_network»

config.ssh.forward_agent = true

config.vm.synced_folder “/Users/usuario/VirtualBox VMs/VAGRANT/centos_7/”, » /vagrant»

config.vm.provision :shell, :path => «lamp.sh»

end

 

Con la primera opción le estamos diciendo a “Vagrant” que queremos utilizar una “Box” de CentOS 7 para crear la máquina virtual, puedes encontrar más “Boxes” en:

http://www.vagrantbox.es

A continuación, re-direccionaremos el puerto 80 en el equipo invitado “Guest” al 8001 de nuestro anfitrión “Host”. Posteriormente, hacemos pública en la red local nuestra máquina invitada para que sea accesible desde nuestro equipo anfitrión y accesible para todos los equipos en nuestra red local. En la siguiente entrada, le estamos diciendo a “vagrant” que queremos reenviar nuestro agente “ssh” al host y sincronizar una carpeta llamada “/Users/usuario/VirtualBox VMs/VAGRANT/centos_7/” en mi equipo “Host” (MacBook Pro) a una carpeta llamada “/vagrant” en el invitado. La última entrada hace referencia a un “script” de Shell a través del cual haremos el provisionamiento de la máquina CentOS 7 para instalar “LAMP”

El siguiente paso es ejecutar:

$ vagrant box add centos_7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

Esto nos descargará el “Box” de CentOS 7 en menos de 5 minutos.

 

Usando el box

Por ahora sólo hemos descargado el “box” en nuestro ordenador, ahora tenemos que decirle a nuestro proyecto que se base en él para crear la máquina virtual. Para ello editamos el fichero “Vagrantfile”, y buscamos la línea:

   config.vm.box = «base»

y la cambiamos por:

   config.vm.box = » centos_7″

Tal como se puede ver en el fichero “VagrantFile” de ejemplo de más arriba, indicando así que queremos usar como base el “Box” de nombre “centos_7”.

Ahora ya se puede ejecutar “vagrant up” para levantar la máquina virtual y “vagrant ssh” para conectarnos mediante “ssh”. Te encontrarás dentro de una máquina virtual logueado como el usuario “vagrant”, sin pedirnos contraseña (la passwd es “vagrant” para este usuario y la misma para el usuario “root”) la instalación de CentOS 7 es mínima y sin entorno gráfico.

NOTA: El “Box” de CentOS 7 viene con la configuración de idioma del sistema en Alemán, para solucionar esto solo hay que ejecutar los siguientes comandos:

$ su –

(nos pedirá la contraseña de “root”, como dijimos es “vagrant” al igual que el usuario “vagrant”). Una vez que somos “root” ejecutamos:

$ yum install system-config-language

$ system-config-language

Al ejecutar el comando anterior nos aparece por consola una TUI de configuración del idioma en el que seleccionaremos Español-España y después de salir de la sesión y volver a loguearnos el sistema estará configurado en Español.

 

¿Cómo instalo “LAMP” de forma que sea visible por todos en la red?

Lo primero que vamos a hacer es crear en el directorio base del proyecto, al lado del fichero “Vagrantfile” en la carpeta “/Users/usuario/VirtualBox VMs/VAGRANT/centos_7/” el script “lamp.sh”, con el siguiente contenido:

 

#!/usr/bin/env bash

echo «INSTALANDO LAMP EN CENTOS 7»

echo

echo «INSTALANDO APACHE WEB SERVER»

yum install -y httpd

echo

echo «INSTALANDO MARIADB»

yum install mariadb-server -y

echo

echo «INSTALANDO PHP»

yum groupinstall -y «PHP Support»

echo

echo «INSTALANDO PHP-MYSQL»

yum install php-mysql -y

echo

echo «ABRIENDO PUERTOS 80 Y 443 EN FIREWALLD PARA APACHE»

firewall-cmd –permanent –add-service=http

firewall-cmd –permanent –add-service=https

firewall-cmd –reload

echo

echo «ACTIVANDO Y EJECUTANDO SERVICIO DE APACHE»

systemctl enable httpd.service

systemctl start httpd.service

echo

echo «ACTIVANDO Y EJECUTANDO EL SERVICIO MARIADB»

systemctl enable mariadb.service

systemctl start mariadb.service

echo

echo «INSTALANDO EL NAVEGADOR DE CONSOLA LINKS»

yum install links -y

 

Se trata de un “script” de GNU/Linux donde estamos diciendo al sistema de paquetes que instale “Apache Web Server”, “MySQL”, “PHP”, el navegador de consola “links” y que haga la apertura de puertos correspondientes en “Firewalld”.

Ahora editamos el fichero “Vagrantfile”, añadimos al final (antes del “end”):

   config.vm.provision :shell, :path => «lamp.sh»

Con esto, estamos indicando que en el arranque de la máquina virtual queremos ejecutar este “script”. Para que este cambio tenga efecto ejecutamos el comando:

$ vagrant up

y arrancamos la máquina, si la máquina virtual ya está arrancada podemos ejecutar el comando:

$ vagrant reload –provision

Cuando termine, para comprobar que todo ha ido bien podemos ejecutar dentro de la máquina virtual (previamente conectados con “vagrant ssh”):

$ links 127.0.0.1

web-apache-links

y deberíamos ver la salida por defecto de la pagina de “Apache”. Para confirmar que “PHP” está activo, solo tenemos que crear el típico fichero con la función “phpinfo()”, en mi caso “test.php” y ubicarlo en el “DocumentRoot” de “Apache” o sea en “/var/www/html”, después ejecutamos:

$ links 127.0.0.1/test.php

web-php-links

Con esto hemos visto una manera sencilla de crear “scripts” de configuración de la máquina virtual, ya que el contenido de estos “scripts” estarán en el repositorio de la distribución, dicho “script” permitirá que cualquier compañero que ejecute “vagrant up” obtenga su propia máquina virtual configurada exactamente igual.

Ahora CentOS se está ejecutando con el paquete “lamp” instalado y atendiendo las conexiones en el puerto 80 y 443 para el servidor “Apache”. Como anteriormente en el fichero de configuración re-direccionamos el puerto 80 del huésped “Guest” al puerto 8001 en el “Host”, podremos escribir en el navegador del “Host” “http://localhost:8001” y veríamos la web de “Apache”.

apache-desde-safari

El mismo proceso para “PHP” y veremos la salida de la función “phpinfo()”

php-desde-safari

Confirmamos que “Mariadb” esta instalado y ejecutándose correctamente

mariadb-ok

 

Otros proveedores

Como acabamos de ver, el proveedor más básico es “Shell script”. Si necesitamos más potencia de aprovisionamiento “Vagrant” tiene soporte para múltiples herramientas de automatización, tales como “chef”, “Puppet”, “Ansible” o “Docker”.

La configuración a través de herramientas de automatización es un tema muy amplio, y cada instrumento tiene su propia documentación. En este caso lo mas sencillo es usar “Shell script”.

 

Configuración de la red de la máquina virtual

Todas las opciones de configuración de la red están dentro del fichero “Vagrantfile”, las opciones de configuración son del estilo; “config.vm.network”. Veremos que están todas comentadas (tienen una # delante), solo hay que descomentar y configurar alguna de las tres opciones que tenemos:

  • Port forwarding – hacer un mapeo de puertos desde la máquina “Guest” al “Host”.
  • Private network – crear otra red privada que sólo es accesible desde el «Host”.
  • Bridged network – hacer que el “Guest” se comporte como otra máquina más dentro de la red del “Host”.

En el caso de mi fichero de configuración he optado por la opción 3º, con lo que haremos la máquina virtual accesible desde la red local.

red-publica

Al ejecutar “vagrant up” para levantar nuestra “Box” leerá el fichero de configuración y nos dará la opción de escoger nuestra interfaz de red del equipo “host”.

A continuación unas capturas del proceso de arranque:

cargando-con-provision

apache-provision

mariadb-provision

php-provision

apertura-puerto-provision

Como hemos visto anteriormente, ahora nuestra “Box” de CentOS 7 es accesible desde la red local con una dirección IP 192.168.1.53, cualquier usuario podrá conectarse y descargar la configuración ubicada en el directorio “/vagrant”.

filezilla-1

filezilla-2

Otros comandos de interés

  • “vagrant suspend” – se queda guardado el estado de todos los programas y memoria en ese justo memento, esto conlleva que se consume más espacio en disco de nuestro “Host”.
  • “vagrant resume” – lo ejecutamos y será restaurado el estado de la imagen.
  • “vagrant halt” – apaga la máquina virtual, cuando arrancamos de nuevo todos los servicios se vuelven a arrancar de cero.
  • “vagrant destroy” – borra todo rastro de la máquina virtual de nuestro “Host”, al volver arrancar tiene que hacer todo el proceso de configuración. No se recomienda salvo que no queramos seguir trabajando con dicha máquina

Para arrancar la máquina virtual siempre usaremos el comando, “vagrant up”.

 

Vagrant Share

Hemos visto en el apartado de “configuración de red” las opciones que tenemos para hacer pública nuestra máquina en la red local, pero vagrant dispone de una utilidad que va más allá y que permite que tu entorno de trabajo pueda ser compartido con cualquier persona en cualquier parte del mundo. Sólo voy a mencionar las posibles opciones, ya que todavía no tengo cuenta creada en “Atlas” y no he podido probar personalmente esta opción. A continuación os dejo la introducción que se hace en la página de documentación de vagrant.

“Vagrant Share” te permite compartir tu entorno Vagrant con cualquier persona en el mundo, lo que facilita la colaboración de compañeros en tu proyecto directamente desde casi cualquier entorno de red con un solo comando: “vagrant share”.

Tiene tres formas o características principales de funcionamiento, las cuales no son mutuamente excluyentes, lo que significa que cualquier combinación de ellas puede estar activa en un momento dado, son las siguientes:

  • “HTTP Sharing”, creará una dirección URL que podrás dar a cualquiera, esta URL apunta directamente a tu entorno de Vagrant y además, la persona que utilice esta URL no necesita tener Vagrant instalado en su máquina, por lo que se puede compartir con cualquiera. Esto es útil para probar “WebHooks” o mostrar tu trabajo a los clientes, compañeros de equipo, managers, etc.
  • “SSH Sharing”, permitirá el acceso SSH de forma instantánea a tu entorno de Vagrant por cualquier persona mediante la ejecución del comando “vagrant connect –ssh”. Esto es útil para la programación en equipos o la depuración de problemas en aplicaciones, etc.
  • “General Sharing”, permite que cualquiera pueda acceder a cualquier puerto expuesto en tu máquina vagrant ejecutando “vagrant connect” desde su equipo. Esto es útil si dicha persona quiere acceder a tu entorno de Vagrant como si fuera un ordenador de la LAN.

Esta opción de “Vagrant” requiere tener una cuenta creada en HashiCorp’s Atlas:

https://atlas.hashicorp.com/boxes/search?utm_source=vagrantcloud.com&vagrantcloud=1

En un próximo post, intentaré tratar este último tema de forma más detallada.

 

Saludos cordiales.

 

 

 

Deja un comentario