Cómo crear un playbook Ansible para deployment
Clase 22 de 22 • Curso de Despliegue de Aplicaciones Python en la Nube
Contenido del curso
Configuración de Servidores en la Nube para Despliegue
- 6

Cómo elegir recursos de servidor en AWS
03:33 min - 7

Cómo crear cuenta AWS con free tier
07:17 min - 8

Crear una instancia EC2 con Ubuntu en AWS
12:44 min - 9

SSH con llave .pem en Ubuntu AWS
08:41 min - 10

Cómo gestionar Ubuntu con apt y sudo
10:13 min - 11

Cómo DNS convierte tu IP en dominio memorable
13:55 min - 12

Cómo instalar certificados SSL con Certbot
05:16 min
Administración y Optimización de Servidores para Producción
- 13

Cómo clonar Django en servidor con SSH y Deploy Keys
14:41 min - 14

Configurar uWSGI como servicio para Django
14:34 min - 15

Conectar NGINX con uWSGI por proxy reverso
04:33 min - 16

Logs específicos por aplicación en Python
11:49 min - 17

Cómo configurar Sentry en Django
08:54 min - 18

Variables de entorno Django en servidor
04:28 min
Integración de Servicios Complementarios para Aplicaciones Python
Automatización y CI/CD para Despliegues Python
Automatiza con confianza el deployment de aplicaciones en la nube: con Ansible y archivos YAML reduces errores, ahorras tiempo y obtienes procesos repetibles. Aquí verás cómo pasar de comandos manuales a un playbook idempotente que actualiza paquetes, instala dependencias y clona tu repositorio con Git.
¿Por qué Ansible acelera el deployment en YAML?
La premisa es clara: recordar todos los comandos y archivos modificados en cada cambio es inviable. Ansible centraliza el proceso en un único playbook en YAML que define un conjunto de tareas a ejecutar en uno o varios servidores.
¿Cómo instalar y ejecutar ansible playbook?
- Instala Ansible con pip en tu equipo local.
pip install ansible
- Ejecuta el playbook indicando el inventario de hosts y el archivo YAML.
ansible-playbook -i hosts deploy.yml
¿Qué significa idempotencia y el reporte ok vs changed?
- Idempotencia: si algo ya está en el estado deseado, no cambia.
- Reporte de Ansible: muestra tareas en estado ok si no hubo cambios y changed si aplicó modificaciones.
- Beneficio clave: puedes re-ejecutar el playbook con seguridad y consistencia.
¿Cómo definir el inventario hosts y variables seguras?
Primero configura un archivo llamado hosts. Allí listas los servidores de destino y sus parámetros de conexión: IP pública, usuario y llave privada. También puedes declarar variables para el grupo.
¿Cómo estructurar el archivo hosts?
- Define un grupo, por ejemplo: web servers.
- Especifica IP, usuario y llave de SSH.
[web servers]
IP_PUBLICA ansible_user=USUARIO ansible_ssh_private_key_file=RUTA/LLAVE.pem
- Puedes gestionar múltiples hosts o aplicaciones en el mismo inventario.
¿Cómo declarar variables de grupo con vars?
- Añade variables para rutas y llaves de deployment.
[web servers:vars]
app_directory=/ruta/de/la/app
deploy_key=/ruta/en/el/servidor/llave_deployment
- Estas variables se referencian en el playbook con la sintaxis de Jinja2: "{{ variable }}".
¿Cómo crear un playbook idempotente con apt y git?
Crea un archivo llamado deploy.yml. Define el nombre, los hosts objetivo y activa become: yes para ejecutar con privilegios de sudo cuando sea necesario. Luego agrega las tasks en orden.
¿Cómo actualizar e instalar paquetes con apt?
- Actualiza la caché de paquetes con apt.
- Instala dependencias como nginx mediante listas.
---
- name: Despliegue básico
hosts: web servers
become: yes
tasks:
- name: Actualizar paquetes apt
apt:
update_cache: yes
- name: Instalar paquetes necesarios
apt:
name:
- nginx
# agrega más paquetes si lo necesitas
state: present
- Al re-ejecutar, si ya están instalados, verás ok en lugar de changed gracias a la idempotencia.
¿Cómo clonar el repositorio con git y keyfile?
- Usa la tarea git para clonar el proyecto en tu directorio de aplicación.
- Controla la rama con el parámetro version.
- Autentica con tu keyfile de deployment.
- name: Clon repo
git:
repo: "REPO_DEL_PROYECTO"
dest: "{{ app_directory }}"
version: "RAMA_O_COMMIT"
key_file: "{{ deploy_key }}"
- Si cambias la rama (por ejemplo, de develop a una feature), Ansible marcará la tarea como changed cuando actualice el directorio.
- Nota práctica mencionada: puede haber verificaciones de host al clonar con llaves. Asegura que la llave esté correctamente instalada y autorizada en el servidor.
¿Cómo usar become para sudo en tareas?
- Agrega
become: yesen el nivel del playbook para aplicar sudo a todas las tareas. - Evitas escribir sudo comando por comando y garantizas permisos adecuados.
Habilidades y conceptos aplicados:
- Automatización de deployment con Ansible y YAML.
- Inventario de hosts con IP pública, usuario y llave privada.
- Variables de grupo con :vars y referencia con "{{ variable }}".
- Tareas con módulos apt y git para actualización, instalación y clonación.
- Idempotencia: reporte ok vs changed y re-ejecución segura.
- Uso de become para permisos de sudo.
- Consideraciones de SSH y verificación de host al clonar.
¿Te gustaría que ampliemos el playbook para Django, Flask o FastAPI, o que integremos Ansible con GitHub Actions? Cuéntame en los comentarios qué stack quieres automatizar y en qué parte te gustaría profundizar.