Get it on Google Play
Mas de 21 años en el mundo del IT corporativo

Despliegue automático DevOps de aplicaciones con Ansible y Clouding.io

13-06-2019

Muchos me habéis preguntado como lo hago para desplegar aplicaciones reales, por ejemplo con un proceso de DevOps. Hoy vamos a ver como podemos hacerlo para desplegar una aplicación escrita usando Java y Spring Framework sobre servidores reales. Además podréis probar vosotros mismos lo que haremos en este post porque Clouding.io nos regala 5 Euros de saldo para las primeras pruebas!

La aplicación que vamos ha desplegar ya la conocéis(Los que seguís el blog y el canal de Youtube), se trata de la aplicación que tenéis disponible en Github(https://github.com/acoronadoc/spring-security-dashboard-sample) y se trata de una aplicación que despliega un pequeño dashboard usando Google Charts, Spring Boot, se conecta a una base de datos MariaDB y utiliza Spring Security para la seguridad.

El proceso de despliegue automático tendrá dos pasos: En el primer paso instalaremos todas las máquinas de nuestra aplicación(En este caso, una máquina con la base de datos y otra con el front) y el segundo paso que ejecutará el deploy de nuestra aplicación. De esta manera, podremos ejecutar el primer paso cada vez que queramos crear un entorno nuevo(desarrollo, test, preproducción, producción, etc.) y cada vez que tengamos una actualización ejecutaremos el deploy. Un proceso corto pero ideal para ver como funciona Ansible, los procesos de DevOps y los servidores en la nube de Clouding.io.

Todos los ficheros de Ansible que vamos a utilizar en este artículo están disponibles en Github(https://github.com/acoronadoc/ansible-deploy-app-sample).

Registro en Clouding.io

Para desplegar los servidores lo primero que necesitamos son los servidores, en esta ocasión contrataremos dos servidores Cloud a la empresa Clouding.io. Clouding.io es una empresa, con sede en Barcelona, y con mucha experiencia y solvencia en el mundo Cloud. Tienen, además, un proceso de contratación de servidores fácil, ágil y a muy buen precio.

Para contratar los servidores empezaremos registrándolos en la plataforma de Clouding.io rellenando el formulario de su página home:

Ansible Clouding.io 1

Ansible Clouding.io 1

Después se nos pedirá que validemos nuestros datos de eMail, teléfono y tarjeta de crédito.

Ansible Clouding.io 2

Ansible Clouding.io 2

Después de estos dos pasos ya podremos acceder a nuestra cuenta y empezar a trastear con los servidores en la nube gracias a nuestros 5 Euros gratuitos.

Contratar servidores

Para contratar los servidores lo haremos haciendo click en “HAZ CLICK AQUÍ PARA CREAR TU PRIMER SERVIDOR”:

Ansible Clouding.io 3

Ansible Clouding.io 3

Contrataremos dos máquinas, cada una de ellas con “Debian 9” como sistema operativo, 2Gb de memoria RAM y 1 vCore. A la primera máquina la llamaremos “bbdd” y a la segunda “front”:

Ansible Clouding.io 4

Ansible Clouding.io 4

Si todo ha ido bien, en el panel de control deberíamos estar viendo los dos servidores:

Ansible Clouding.io 5

Ansible Clouding.io 5

Podemos ver la IP de cada servidor en el listado y para conocer el usuario(root) y la contraseña para acceder a cada servidor vía SSH lo encontraremos al hacer click en cada servidor:

Ansible Clouding.io 6

Ansible Clouding.io 6

Habilitar Firewall

Por temas de seguridad, en los servidores de Clouding.io viene habilitado un firewall donde deberemos habilitar el acceso al servidor MySql. Hacer esto es muy fácil ya que utilizaremos una plantilla que ya nos provee el servidor de Cloud:

Nos situamos en la pestaña de “MIS FIREWALLS” y le damos al botón de editar el firewall que viene por defecto. Después, hacemos click en Agregar(Añadir regla):

Ansible Clouding.io 7

Ansible Clouding.io 7

Seleccionamos “Norma de plantilla” igual a “Permitir MySQL” y pulsamos el botón “ENVIAR” y ya lo tenemos:

Ansible Clouding.io 8

Ansible Clouding.io 8

Configuración de los certificados de seguridad en los servidores

Tal como vimos en el post “Formación Ansible: Instalación y primeros pasos” lo primero que tendremos que hacer es configurar los certificados de seguridad y el inventario de los servidores.

Ansible se comunica con los otros servidores vía SSH(No utiliza agentes) y para no tener que andar poniendo usuario y password cada vez se configura una llave SSH, que no es mas que un certificado de seguridad. Ahora toca crear este certificado de seguridad y copiarlo en los servidores:

Creamos el par de llaves una sola vez con la siguiente instrucción:

ssh-keygen

Nos pedirá en que fichero se generará la llave y dejaremos el que ya viene por defecto. También nos pedirá una frase de paso(passphrase), deberemos dejarlo en blanco para que no nos la esté pidiendo cada vez que ejecutemos un comando con Ansible.

Después copiamos la llave a cada uno de los servidores:

ssh-copy-id <user-ssh>@<servidor-X>

Por ejemplo, si nuestro usuario para conectarnos al servidor es ‘root’ y la IP del servidor es 172.17.0.4 copiaríamos el certificado usando la siguiente instrucción:

ssh-copy-id [email protected]

Después de ejecutar la instrucción se nos pedirá el password para poder copiar el id.

Configuración del inventario

Lo siguiente será configurar nuestro inventario de servidores, para ello, crearemos un fichero llamado ‘inventario_produccion’ y configuraremos los servidores de la siguiente manera:

[bbdd]
172.17.0.2 ansible_ssh_user=root 

[front]
172.17.0.3 ansible_ssh_user=root

En el fichero de inventario tenemos dos grupos de servidores, el de ‘bbdd’, donde encontramos el servidor de base de datos y el de ‘front’ donde encontramos el servidor con la aplicación Spring/Java.

En cada servidor ponemos la variable ‘ansible_ssh_user’, que indica con que usuario debe Ansible conectarse a esta máquina. Esta variable solo es necesaria si el usuario con el que nos conectamos a la máquina es distinto al usuario con el que estamos conectados en la máquina donde se ejecuta Ansible.

Si todo está bien podemos probar la conexión con los servidores con la siguiente instrucción:

ansible -i inventario-produccion all -m ping

Donde “-i inventario-produccion” le indica a Ansible que utilice el inventario configurado en el fichero “inventario-produccion”. “all” se refiere a que ejecute la acción sobre todas las máquinas y “-m ping” indica que ejecute el módulo ping.

Y deberíamos ver algo parecido a esto:

Ansible 9

Ansible 9

Creación del playbook para instalar los servidores e instalación de los servidores

La idea es crear dos playbooks, uno que se encargará de inicializar los servidores y otro que hará el deploy de la aplicación cada vez que se requiera. Creamos el primer playbook en el fichero ‘install.yml’:

Una vez que tengamos nuestro playbook configurado ya podremos ejecutar el proceso de instalación de los servidores:

ansible-playbook -i inventario-produccion install.yml

Donde “-i inventario-produccion” le indica a Ansible que utilice el inventario configurado en el fichero “inventario-produccion” e “install.yml” le indica que ejecutemos este playbook.

En el fichero “install.yml”(https://github.com/acoronadoc/ansible-deploy-app-sample/blob/master/install.yml) se encuentran todas las instrucciones para instalar los servidores. Es un poco extenso, pero inicializa e instala las dependencias en ambos servidores(MySql y JDK 1.8), configura la base de datos y configura la aplicación.

Creación del playbook para hacer los deploys y despliegue de la aplicación

Así como el playbook de instalación lo ejecutaremos solo cuando queramos crear nuevos entornos(Por ejemplo, cuando queramos crear un entorno de desarrollo o de test) el playbook de deploy lo ejecutaremos cada vez que tengamos una versión nueva de la aplicación.

Una vez que tengamos nuestro playbook configurado ya podremos ejecutar el proceso de despliegue de la aplicación:

ansible-playbook -i inventario-produccion deploy.yml

Y ya tenemos nuestra aplicación disponible:

Ansible 10

Ansible 10

En el fichero “deploy.yml”(https://github.com/acoronadoc/ansible-deploy-app-sample/blob/master/deploy.yml) se encuentran todos los pasos a seguir para instalar la aplicación. Este, es un script mucho mas corto que el de instalación: Básicamente, descarga la aplicación de Github, copia el script de arranque y resetea el servidor.

Y llegados ha este punto ya hemos hecho el despliegue de nuestra aplicación y tenemos nuestro sistema de despliegue automático terminado. A partir de ahora, cuando tengamos modificaciones en nuestro proyecto de Github podremos desplegarlas sin problemas simplemente ejecutando una instrucción.

Conclusiones

Clouding.io es un proveedor de cloud ideal para gran cantidad de proyectos grandes y pequeños. La contratación de servidores es muy ágil e incorpora funcionalidades muy interesantes como el Firewall por defecto en todas las máquinas que contratas. También, el coste es mas que competitivo, sobretodo teniendo en cuenta que cumple con los requerimientos de la ley de protección de datos(Los servidores están en España) y la calidad de las máquinas, que responden muy bien.

En el ejemplo hemos podido implementar un proceso de despliegue automático sin ningún tipo de problema(No con todos los proveedores es así) y con todas las garantías.

Si te ha servido, por favor comparte
 

Leave a Reply