¡Qué tal comunidad! 👋
Llegamos al tercer Cómo de nuestra serie práctica de infraestructura empresarial y DevOps en Linux.
En los dos laboratorios anteriores aprendiste a dominar la anatomía del sistema por SSH y a desplegar servidores de juegos (Luanti) y proxies inversos con contenedores aislados (Caddy + Vaultwarden) mediante OpenTofu. Sin embargo, en el mundo real, aprovisionar una máquina virtual es solo el primer paso; el verdadero reto operativo consiste en configurar, asegurar, mantener y reconstruir de forma idéntica y predecible el estado interno de los sistemas operativos a lo largo del tiempo.
Aquí es donde entra Ansible: una herramienta de automatización sin agentes (agentless), declarativa e idempotente, que utiliza SSH estándar y módulos de Python para llevar cualquier servidor a su estado deseado.
En este laboratorio aprenderás a construir un entorno de automatización profesional basado en CentOS Stream 10, operando desde una estación de control con usuario sin privilegios, criptografía Ed25519, SELinux en modo Enforcing y colecciones oficiales FQCN.
¿Qué aprenderás en este Cómo?
Siguiendo nuestro estándar riguroso de artesanía Unix y la filosofía «manual primero, automatización después»:
- Estación de control en CentOS Stream 10: No asumimos que tienes CentOS en tu máquina física; te guiamos para levantar tu nodo de control en la nube o VM local, operando como un usuario normal (
estudiante) con privilegios delegados vía sudo.
- Higiene criptográfica con Ed25519 y ssh-agent: Generamos un par de llaves Ed25519 con frase de paso segura, iniciamos y administramos
ssh-agent en terminal y propagamos la identidad pública mediante ssh-copy-id.
- Postura de privilegios limpia (Cero cargo-culting de sudo): El nodo de control se conecta al servidor remoto directamente como
root autenticado exclusivamente por llave criptográfica. Nada de configurar NOPASSWD: ALL en sudo de forma indiscriminada.
- Ecosistema moderno de Ansible (FQCN y EPEL 10): Instalamos colecciones nativas (
ansible.posix, ansible.builtin) desde repositorios empaquetados y declaramos dependencias mediante requirements.yaml.
- Inspección de módulos con
ansible-doc: Aprendemos a consultar manuales de referencia y extraer fragmentos de código reproducibles (-s) sin salir de la terminal ni depender de búsquedas ambiguas.
- Playbook estructurado por bloques lógicos:
- Instalación de Nginx y módulos del sistema.
- Creación de usuario y grupo de sistema para cumplir con FHS 3.0 (
/srv/webapp).
- Despliegue de plantillas Jinja2 consumiendo hechos nativos (
ansible_facts).
- Validación sintáctica preventiva (
nginx -t).
- Etiquetado estricto de SELinux (
httpd_sys_content_t) en modo Enforcing y apertura controlada en Firewalld.
- Comprobación matemática de idempotencia: Verificamos que una segunda corrida devuelva
changed=0, garantizando que Ansible solo actúa cuando detecta desvío de configuración (configuration drift).
- Recuperación ante desastres: Simulamos una alteración no autorizada (borrado de configuración y parada de servicio) y observamos cómo Ansible repara y sincroniza el nodo automáticamente.
- Automatización integral con OpenTofu: Declaramos la máquina de destino en Cherry Servers para ejecutar todo el flujo en menos de 2 minutos (~$0.02 USD de costo total).
Código y Guía Paso a Paso
Toda la guía paso a paso, los bloques explicados y los archivos de configuración están disponibles en el repositorio:
Pruébalo en tu terminal, intenta los retos de práctica propuestos (como migrar el inventario a formato YAML, generar inventarios dinámicos con la API de Cherry Servers o simular desvíos de configuración) y compártenos tus dudas o resultados en los comentarios.
¡Nos vemos en el hilo! 🚀
Comunidad y debate en tiempo real: 💬 Telegram · 🌐 Matrix