Interfaz visual basada en nodos para gestionar y ejecutar playbooks de Ansible en aulas informáticas. Escanea la red, detecta equipos Windows y Linux, y permite ejecutar tareas de automatización con un simple arrastrar y soltar.
| Capa | Tecnología |
|---|---|
| Frontend | HTML5 + jQuery + AdminLTE 3 + Drawflow |
| Backend | Python 3.12 + FastAPI + Uvicorn/Gunicorn |
| Proxy | Nginx (con HTTPS y headers de seguridad) |
| Automatización | Ansible Core + WinRM + SSH |
| Escaneo | Nmap |
| Contenedores | Docker + Docker Compose |
| Seguridad | JWT + bcrypt + Fernet + HTTPS |
flowchart TD
%% Título General
Titulo["Arquitectura Completa del Sistema Visual/\nsible"]
%% --------------------------------------------------------
%% 1. CAPA PROXY
%% --------------------------------------------------------
subgraph CapaProxy ["1. CAPA PROXY (Puerta de Entrada)"]
direction TB
Nginx["Nginx (Reverse Proxy)"]
Seguridad["Escudo: Rate Limiting & SSL/TLS"]
Nginx --- Seguridad
end
%% --------------------------------------------------------
%% 2. CAPA LÓGICA
%% --------------------------------------------------------
subgraph CapaLogica ["2. CAPA LÓGICA (Orquestación y API)"]
direction TB
Backend["Backend FastAPI (Privilegios NET_RAW)"]
Motores["Motores de Ejecución: Ansible + Nmap"]
Creds["Inyección de Clave Maestra (KeePass)"]
Backend --- Motores
Backend --- Creds
end
%% --------------------------------------------------------
%% 3. CAPA DE PERSISTENCIA
%% --------------------------------------------------------
subgraph CapaDatos ["3. CAPA DE PERSISTENCIA (Volúmenes Host)"]
direction TB
Carpetas["Directorios Físicos: /data, /config, /ansible"]
BasesDatos["Bases de Datos: usuarios.db e inventory.json"]
Carpetas --- BasesDatos
end
%% --------------------------------------------------------
%% 4. CAPA DE CONTINUIDAD
%% --------------------------------------------------------
subgraph CapaContinuidad ["4. CAPA DE CONTINUIDAD (Protección DRP)"]
direction TB
Alpine["Servicio Alpine (Aislado)"]
Scripts["Ejecución Cron: backup.sh + Exportación SCP"]
Alpine --- Scripts
end
%% ========================================================
%% RELACIONES VERTICALES (Fuerzan el diseño de Arriba a Abajo)
%% ========================================================
CapaProxy == "Enruta peticiones seguras hacia la API" ==> CapaLogica
CapaLogica == "Actualiza inventarios y lee credenciales" ==> CapaDatos
CapaContinuidad -. "Comprime datos en modo Solo Lectura" .-> CapaDatos
%% ========================================================
%% ESTILOS VISUALES (Optimizados para GitHub)
%% ========================================================
style CapaProxy fill:#e0f2fe,stroke:#0284c7,stroke-width:3px,color:#0f172a
style CapaLogica fill:#ede9fe,stroke:#7c3aed,stroke-width:3px,color:#0f172a
style CapaDatos fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
style CapaContinuidad fill:#fef9c3,stroke:#ca8a04,stroke-width:3px,color:#0f172a
style Titulo fill:none,stroke:none,font-size:22px,font-weight:bold
- Escaneo de red: Detección automática de equipos Windows y Linux via Nmap
- Playbooks predefinidos: 10 plantillas listas para usar (instalación de software, firewall, usuarios, Docker, XAMPP, etc.)
- Ejecución drag and drop: Arrastra un playbook sobre un host y se ejecuta al instante
- Streaming en tiempo real: La salida de Ansible se muestra en el navegador mientras se ejecuta
- Playbooks personalizados: Crea y guarda tus propios playbooks desde la interfaz
- Multiplataforma: Soporta hosts Windows (WinRM) y Linux (SSH) simultaneamente
- Logs de auditoría: Historial completo de todas las ejecuciones
- Autenticación JWT: Dos roles:
admin(control total) yoperador(solo lectura) - HTTPS obligatorio: Puerto 80 redirige a 443 con certificado SSL
- Credenciales cifradas:
credentials.jsonse cifra en disco con Fernet - Headers de seguridad: HSTS, CSP, X-Frame-Options, X-Content-Type-Options
- Contraseñas nunca en cliente: Las contraseñas de los hosts viajan solo del frontend al backend, nunca al reves
- Validación de entrada: Regex en IPs, rutas, nombres de archivo y usuarios
- Tokens efímeros: JWT con expiración de 24 horas
# Clonar repositorio
git clone https://github.com/JuanEntrena18/proyecto_ansible
cd proyecto_ansible/github
# Generar clave de cifrado para credenciales
export CREDENTIALS_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")
# Construir y arrancar
sudo docker compose up -d --buildAccede a https://<IP-del-servidor> con usuario admin y contraseña admin.
| Metodo | Endpoint | Auth | Descripción |
|---|---|---|---|
| POST | /login |
- | Inicio de sesión (devuelve JWT) |
| GET | /me |
JWT | Información del usuario |
| GET | /scan?subnet=X.X.X.X/XX |
JWT | Escanea una subred con Nmap |
| GET | /playbooks |
JWT | Lista los playbooks disponibles |
| GET | /playbooks/{tipo}/{nombre} |
JWT | Lee el contenido de un playbook |
| POST | /playbooks |
Admin | Guarda un playbook personalizado |
| POST | /execute |
Admin | Ejecuta un playbook en uno o varios hosts |
| GET | /credentials |
Admin | Obtiene los usuarios configurados |
| POST | /credentials |
Admin | Guarda credenciales de acceso a hosts |
| GET | /logs |
Admin | Historial de ejecuciones |
| Playbook | SO | Descripción |
|---|---|---|
instalar_software |
Linux + Windows | Instala paquetes desde group_vars |
instalar_docker |
Linux | Instala Docker CE |
instalar_xampp |
Linux + Windows | Instala XAMPP / LAMP |
instalar_libreoffice |
Linux + Windows | Instala LibreOffice |
crear_usuario |
Linux + Windows | Crea usuario alumno |
habilitar_rdp |
Windows | Habilita escritorio remoto (RDP) |
configurar_firewall |
Linux + Windows | Abre puertos en firewall |
actualizar_sistema |
Linux + Windows | Actualiza paquetes del sistema |
renombrar_equipos |
Linux + Windows | Renombra equipos segun IP |
desinstalar_todo |
Linux + Windows | Desinstala todo el software instalado |
github/
+-- backend/
| +-- main.py # API FastAPI (JWT + cifrado)
| +-- requirements.txt # Dependencias Python
| +-- Dockerfile # Imagen del backend
+-- frontend/
| +-- index.html # Interfaz de usuario
+-- config/
| +-- nginx.conf # Proxy HTTPS con seguridad
| +-- ssl/ # Certificados SSL
| +-- credentials.json # Credenciales cifradas
+-- ansible/
| +-- ansible.cfg # Configuracion de Ansible
| +-- inventory/ # Inventarios y group_vars
| +-- playbooks/
| | +-- templates/ # Playbooks predefinidos
| | +-- custom/ # Playbooks del usuario
| +-- roles/ # Roles de Ansible
| +-- logs/ # Historial de ejecuciones
+-- scripts/
| +-- backup.sh # Backup automático diario
+-- docker-compose.yml # Orquestación de contenedores
+-- README.md
| Variable | Descripción | Obligatoria |
|---|---|---|
CREDENTIALS_KEY |
Clave Fernet para cifrar credentials.json | Recomendada (se autogenera si no existe) |
Consulta la Guia de Despliegue para instalación en Ubuntu Server 22.04/24.04 sin Docker.
| Nombre | Rol | GitHub |
|---|---|---|
| Juan Fco. Entrena Garrido | Desarrollo | @JuanEntrena18 |
| Diego Toribio Perea | Desarrollo | @DiegoToribio06 |
| Daniel Palacios Melguizo | Desarrollo | @dpalmel1312 |
| Marina Jimenez Egea | Desarrollo | @Marjieg |
| Felix David Romero Lopez | Desarrollo | @felixdavid28 |