Ansible y Vagrant para desplegar una app web
Development
- Curso
- Especialización en Python (EOI)
- Módulo
- Sysadmin & DevOps
- Tecnologías
- Vagrant, Ansible y YAML
Cómo hacer un despliegue usando Ansible y Vagrant
Despliegue de nuestra aplicación Shield en Django, usando Ansible y Vagrant.
Ansible es una plataforma que permite configurar y administrar ordenadores a distancia. Hemos creado un “playbook” para darle una serie de órdenes específicas a una máquina a través de SSH para instalar y desplegar correctamente nuestro proyecto.

Puedes ver el código fuente del playbook y el vagrantfile en mi repositorio de Github.
Instrucciones para el proyecto Ansible y Vagrant:
Descripción
La tarea consiste en preparar un playbook de Ansible que automatice los pasos necesarios para desplegar la aplicación de Shield en una máquina virtual Debian 10.
A tener en cuenta
Al usuario no privilegiado de la máquina—por defecto debian
y normalmente creado durante la instalación—se le debe añadir la capacidad de usar el comando sudo
modificando los grupos a los que pertenece dicho usuario. En el playbook se tienen diversas opciones para lidiar con esto:
- Confeccionar el playbook asumiendo que el usuario
debian
ya existe y tiene correctamente configurados los permisos para ejecutar comandos consudo
, así como las claves ssh de la máquina host (desde la que se ejecuta Ansible). Es la opción más sencilla, aunque menos “meritoria” técnicamente. - Crear el usuario (si no estuviese creado ya) y asignarle el grupo
sudo
usando el módulouser
(atención al parámetrogroups
); opcionalmente también se puede modificar la configuración del fichero/etc/sudoers
desde Ansible como se explica aquí. Hay que tener en cuenta que esta parte tiene que ser ejecutada porroot
ya que el usuario no privilegiado aún no tiene permisos para usarsudo
; se recomienda leer detenidamente la documentación al respecto, con especial atención abecome_method
y evaluar la opciónsu
. - Gestionar toda la creación del usuario y su pertenencia al grupo
sudo
desde Vagrant, como paso previo a lanzar el playbook que partiría asumiendo la misma situación que en el primer punto.
Criterios de evaluación
En orden de importancia, se evaluará la entrega acorde a los siguientes puntos:
- Funcionalidad: Después de ser ejecutado, se probará la efectividad del playbook abriendo un navegador local y dirigiéndolo a la IP de la máquina virtual en el puerto 80 (por ejemplo,
192.168.122.10:80
). Si el portal de Shield se muestra con la base de datos cargada y todos los componentes funcionando adecuadamente, este punto se considerará completo. - Eficiencia: Se valorará el utilizar módulos específicos de Ansible allá donde sea posible, por encima de comandos ad-hoc usando módulos como shell o command. Por ejemplo, si queremos instalar una librería con
pip install <librería>
, es mejor utilizar el módulo pip que invocar el comando correspondiente con los mencionadosshell
ocommand
- Limpieza: Se debe intentar que las tasks de Ansible sean claras, directas, eviten redundancias y tengan un campo
name
descriptivo. Asimismo, el/los ficheros YAML deben seguir las reglas del formato y mantener la consistencia en cuanto a espaciado, etc. - Extra-mile: Agregar funcionalidades de Ansible que no hayan sido vistas en clase, allá donde tengan sentido: handlers, variables, roles, etc.
Tarea opcional
Crear un Vagrantfile que automatice también la creación e instalación de una máquina virtual Debian 10