En este artículo pondremos en práctica los conceptos de playbooks, roles, templates y handlers para desplegar un stack completo de servidor web: Nginx + PHP-FPM + MariaDB. Utilizaremos roles separados para cada componente, variables por entorno y templates dinámicos para los archivos de configuración. Al final verificaremos el despliegue con curl.
Playbook completo de despliegue
El playbook principal orquesta tres roles: nginx, php-fpm y mariadb. Cada rol es responsable de instalar, configurar y asegurar su servicio correspondiente. Las variables específicas de cada entorno se definen en group_vars/.
El template del sitio virtual de Nginx incluye la integración con PHP-FPM mediante FastCGI, configuración de SSL (cuando aplica), cabeceras de seguridad y reglas de reescritura para WordPress u otras aplicaciones.
Los handlers aseguran que los servicios se reinicien o recarguen solo cuando sus configuraciones cambian, evitando downtime innecesario. Además, incluimos un handler que verifica la sintaxis de configuración antes de aplicar cambios.
Después de ejecutar el playbook, es fundamental verificar que todo funciona correctamente. Podemos hacerlo con comandos ad-hoc y curl directamente desde el nodo controlador o mediante tareas de verificación incluidas en el propio playbook.
```
# Verificación desde el controlador
ansible webservers -i inventory/production.yml -m shell -a "curl -s -o /dev/null -w '%{http_code}' http://localhost/"
# Verificación detallada
ansible webservers -i inventory/production.yml -m shell -a "curl -I http://localhost/"
# Tarea de verificación en el playbook
- name: Verificar que Nginx responde
uri:
url: "http://localhost/"
status_code: 200
return_content: yes
register: health_check
failed_when:
- health_check.status != 200
- name: Mostrar resumen del despliegue
debug:
msg:
- "Nginx: OK ({{ health_check.status }})"
- "PHP-FPM: {{ 'OK' if 'text/html' in health_check.content_type else 'ERROR' }}"
- "Servidor: {{ ansible_hostname }} ({{ ansible_default_ipv4.address }})" ```
Con este playbook ya tienes un stack web completo y automatizado. En el próximo artículo veremos cómo organizar proyectos Ansible a escala, aplicar buenas prácticas, usar ansible-vault para secretos e integrar CI/CD.
Infografía: Ansible: Desplegando servidores web con Nginx y PHP-FPM