Automatización del despliegue y administración de servicios en contenedores — reproducible, monitorizado y listo para producción.
Proyecto TFG de ASIR desarrollado por Ian Gutiérrez Guertsen y Jaime Ferrari Zamorano, centrado en diseñar un entorno de infraestructura reproducible sobre Ubuntu que automatiza desde la preparación del host hasta el despliegue y monitorización de servicios en contenedores.
Un solo comando prepara el sistema, despliega los servicios y arranca la monitorización completa. Sin pasos manuales, sin configuraciones ocultas.
El despliegue manual de infraestructura es lento, propenso a errores y difícil de replicar. IJ Systems resuelve exactamente eso.
| IJ Systems Automation | Despliegue manual | |
|---|---|---|
| Preparación del host automatizada | ✅ | ❌ |
| Entorno 100% reproducible | ✅ | ❌ |
| Monitorización de contenedores incluida | ✅ | ❌ |
| Copias de seguridad automáticas | ✅ | ❌ |
| Separación de redes por función | ✅ | Raro |
| Healthchecks integrados | ✅ | Manual |
| Preparado para migración a AWS | ✅ | ❌ |
| Código abierto | ✅ | — |
- Preparación automática del host — El script
instalar.shdetecta el entorno, instala Docker desde el repositorio oficial y configura los permisos necesarios sin intervención manual. - Orquestación con Ansible — El playbook gestiona la configuración del servidor, instalación de paquetes base e inicialización del servicio Docker de forma idempotente.
- Servicios en red segmentada — Tres redes Docker aisladas (
frontend,backend,monitoring) con IPs estáticas para cada contenedor. - Monitorización completa — Stack Prometheus + Node Exporter + cAdvisor captura métricas del sistema operativo y de cada contenedor en tiempo real.
- Disponibilidad con Uptime Kuma — Panel visual para supervisar el estado de los servicios con alertas configurables.
- Base de datos persistente — MariaDB con volumen Docker, healthcheck integrado y variables de entorno separadas del código via
.env. - Backups y restauración — Scripts
backup.shyrestore.shpara copias de seguridad y recuperación de datos. - Comprobaciones de integridad —
checks.shverifica el estado del entorno antes y después del despliegue.
| Capa | Tecnología |
|---|---|
| Automatización de host | Bash 5, Ansible 2.x |
| Orquestación de contenedores | Docker Compose |
| Servidor web | Nginx 1.27 |
| Base de datos | MariaDB 11.4 |
| Métricas del sistema | Prometheus v3.11, Node Exporter v1.11 |
| Métricas de contenedores | cAdvisor v0.55 |
| Monitorización de disponibilidad | Uptime Kuma 1.23 |
| SO objetivo | Ubuntu 22.04 LTS |
IJ-Systems-Automation/
├── scripts/ # Automatización Bash
│ ├── instalar.sh # Instala Docker, Ansible y herramientas base
│ ├── checks.sh # Comprobaciones de integridad del entorno
│ ├── backup.sh # Copia de seguridad de volúmenes y configuración
│ └── restore.sh # Restauración desde backup
│
├── ansible/ # Gestión de configuración
│ ├── inventory.ini # Hosts objetivo
│ ├── group_vars/
│ │ └── all.yml # Variables globales (usuario, paquetes…)
│ └── playbook.yml # Preparación completa del servidor
│
├── docker/ # Definición de servicios
│ ├── docker-compose.yml # 6 servicios, 3 redes, 2 volúmenes persistentes
│ ├── .env.example # Plantilla de variables de entorno
│ └── nginx/
│ └── index.html # Página web servida por Nginx
│
├── monitoring/
│ └── prometheus/
│ └── prometheus.yml # Configuración de scraping de métricas
│
├── docs/
│ └── pruebas/
│ └── casos-prueba.md # Resultados y casos de prueba documentados
│
└── backups/ # Almacenamiento de copias de seguridad
| Servicio | Puerto | Red | Descripción |
|---|---|---|---|
| Nginx | 80 |
frontend | Servidor web principal |
| Uptime Kuma | 3001 |
frontend | Panel de monitorización de disponibilidad |
| MariaDB | — | backend | Base de datos (sin exposición externa) |
| Prometheus | 9090 |
monitoring | Recolección y consulta de métricas |
| cAdvisor | 8080 |
monitoring | Métricas en tiempo real de contenedores |
| Node Exporter | — | monitoring | Métricas del sistema operativo del host |
| Componente | Requisito |
|---|---|
| Sistema operativo | Ubuntu 22.04 LTS |
| RAM mínima | 2 GB |
| Disco libre | 10 GB |
| Acceso | Usuario con privilegios sudo |
| Conectividad | Acceso a internet para descarga de imágenes |
Note
Docker y Ansible se instalan automáticamente con instalar.sh. No es necesario preinstalar nada más allá de un Ubuntu base.
git clone https://github.com/Quontyx/IJ-Systems-Automation.git
cd IJ-Systems-Automationchmod +x scripts/instalar.sh
./scripts/instalar.shTip
Si Docker muestra un error de permisos tras la instalación, cierra sesión y vuelve a entrar para que el grupo docker surta efecto.
cp docker/.env.example docker/.env
# Edita docker/.env con tus credenciales
nano docker/.env# Edita ansible/inventory.ini con la IP o hostname del servidor objetivo
nano ansible/inventory.iniansible-playbook -i ansible/inventory.ini ansible/playbook.yml --ask-become-passdocker compose -f docker/docker-compose.yml up -dchmod +x scripts/checks.sh
./scripts/checks.sh# Crear copia de seguridad
chmod +x scripts/backup.sh
./scripts/backup.sh
# Restaurar desde backup
chmod +x scripts/restore.sh
./scripts/restore.shWarning
Los backups se almacenan en backups/. Asegúrate de mover o copiar estas copias a un almacenamiento externo de forma regular.
Las siguientes mejoras están planificadas como trabajo futuro:
- Migración a AWS — Adaptar la infraestructura para despliegue en EC2 con Terraform.
- Alertas de Prometheus — Configurar Alertmanager con notificaciones por correo o Slack.
- Dashboard Grafana — Visualización avanzada de métricas sobre Prometheus.
- CI/CD básico — Pipeline con GitHub Actions para validación automática de playbooks y compose.
- Gestión de secretos — Integrar Ansible Vault para cifrar credenciales sensibles en el repositorio.
- Soporte multi-host — Escalar el inventario Ansible para gestionar varios nodos simultáneamente.
Hecho con ☕ y demasiadas horas de terminal y Word
