Cómo Implementar Servidores Web con Ansible

Previamente necesario tener instalado Ansible y sshpass en nuestro ordenador.

Crear estructura de archivos de nuestro proyecto de Ansible

Primero vamos a crear una estructura base de nuestro proyecto que contiene:

  • Archivo de inventario llamado hosts con los equipos donde vamos a desplegar
  • Archivo ansible.cfg que le dice a Ansible donde encontrar el archivo de inventario.
  • Archivo un archivo de playbook llamado site.yml con instrucciones para ejecutar la implementación
  • Estructura de carpeta de roles para contener el rol webservers
Contenido de ansible.cfg
Crear archivo hosts

Definimos un grupo llamado webservers en el archivo hosts con el nombre de host o IP de la maquina o máquinas destino.

Verificar comunicación con el servidor

Con el módulo ping de Ansible comprobamos que hay conexión.

Con el módulo command le pedimos que nos conteste con ‘Test exitoso’

Crear archivo de playbook

En este paso creamos el contenido de site.yml con las instrucciones necesarias para instalar un servidor web Apache en nuestro servidor.

  • hosts: webservers hace referencia al grupo de servidores en el archivo hosts.
  • become: yes activa la ejecución del comando sudo para permitir instalar aplicaciones.
  • handlers o controladores son llamados por las tareas, en este caso la tarea ‘Habilitar MOD_REWRITE’ llama al controlador ‘RESTART APACHE2’
Ejecutar archivo de playbook

Ejecutamos el archivo site.yml para desplegar la tarea con la instrucción:

sudo ansible-playbook -v site.yml

Verificamos que se ha instalado el servidor Apache2 en el destino.

Personalizar playbook con algunas opciones

Vamos a decirle a Apache que escuche por otro puerto, por ejemplo el 8081. Creamos un archivo site81.yml para el ejemplo.

Ejecutamos ansible-playbook y comprobamos que escucha por el puerto solicitado.

Crear playbook y definir roles

Otra manera de desplegar la infraestructura es mediante roles, al principio creamos una estructura en la carpeta roles con el rol webservers. Vamos a crear un nuevo playbook que llame a este rol, lo vamos a llamar siteByRol.yml

El código para el rol esta en el archivo main.yml de la carpeta task

El rol tiene dos tareas:

  1. Desplegar Apache2.
  2. Copiar un archivo index.html en la raiz de Apache2 reemplazando al original. El archivo lo creamos en la carpeta files

Ejecutamos el playbook y comprobamos que se ha desplegado correctamente.