# SIDEL ScriptsManager - Docker Setup ![SIDEL ScriptsManager](https://img.shields.io/badge/SIDEL-ScriptsManager-blue) ![Docker](https://img.shields.io/badge/docker-ready-green) ![Python](https://img.shields.io/badge/python-3.12-blue) Sistema de gestión de scripts multiusuario con entornos conda aislados, desarrollado para SIDEL. ## 🏗️ Arquitectura del Sistema ### Componentes Principales - **Frontend Flask**: Puerto 5002 (entorno `scriptsmanager`) - **Scripts TSNet**: Puertos 5200-5400 (entorno `tsnet`) - **Base de datos**: SQLite con esquema multiusuario completo - **Persistencia**: Volúmenes Docker para datos, logs y backups ### Entornos Conda | Entorno | Propósito | Puerto | Dependencias Principales | |---------|-----------|--------|--------------------------| | `scriptsmanager` | Frontend Flask multiusuario | 5002 | Flask 3.0+, SQLAlchemy, SocketIO | | `tsnet` | Water Hammer Simulator | 5200-5400 | TSNet, WNTR, NumPy, Matplotlib | ## 🚀 Inicio Rápido ### 1. Construcción e Inicio ```bash # Dar permisos de ejecución chmod +x docker-manage.sh # Construir la imagen ./docker-manage.sh build # Inicializar base de datos ./docker-manage.sh init-db # Iniciar en producción ./docker-manage.sh start ``` **Acceso**: http://localhost:5002 **Credenciales por defecto**: - Usuario: `admin` - Contraseña: `admin123` ⚠️ **IMPORTANTE**: Cambiar estas credenciales en producción. ### 2. Desarrollo ```bash # Iniciar en modo desarrollo ./docker-manage.sh start-dev ``` **Acceso desarrollo**: http://localhost:5003 ## 📋 Comandos Principales ### Gestión de Contenedores ```bash # Construcción e inicio ./docker-manage.sh build # Construir imagen ./docker-manage.sh start # Iniciar producción ./docker-manage.sh start-dev # Iniciar desarrollo ./docker-manage.sh stop # Detener contenedores ./docker-manage.sh restart # Reiniciar principal # Estado y monitoreo ./docker-manage.sh status # Estado de contenedores ./docker-manage.sh health # Verificar salud de la app ./docker-manage.sh verify # Verificación completa ./docker-manage.sh ports # Estado de puertos ``` ### Gestión de Datos ```bash # Base de datos ./docker-manage.sh init-db # Inicializar BD SIDEL ./docker-manage.sh backup # Backup manual ./docker-manage.sh users # Gestión de usuarios # Logs y depuración ./docker-manage.sh logs # Logs de producción ./docker-manage.sh logs-dev # Logs de desarrollo ./docker-manage.sh shell # Shell en contenedor ./docker-manage.sh envs # Listar entornos conda ``` ### Servicios Adicionales ```bash # Servicios opcionales ./docker-manage.sh start-backup # Backup automático diario ./docker-manage.sh start-monitoring # Monitoreo de logs # Limpieza y mantenimiento ./docker-manage.sh clean # Limpiar imágenes no usadas ./docker-manage.sh reset # Reset completo (¡PELIGROSO!) ``` ## 📁 Estructura de Datos ### Directorios Principales ``` 📁 data/ ├── 📁 script_groups/ # Datos por usuario/proyecto │ ├── 📁 group_hammer/ │ │ ├── 📁 user_1/ │ │ │ ├── 📁 project_default/ │ │ │ └── 📁 project_simulation_a/ │ │ └── 📁 user_2/ │ └── 📁 group_analytics/ ├── 📄 scriptsmanager.db # Base de datos SQLite └── 📁 system/ # Configuración del sistema 📁 logs/ ├── 📁 executions/ # Logs de ejecución por usuario ├── 📁 system/ # Logs del sistema └── 📁 audit/ # Logs de auditoría 📁 backup/ └── 📁 daily/ # Backups automáticos diarios 📁 app/backend/script_groups/ # Scripts del sistema ├── 📁 hammer/ # Scripts TSNet ├── 📁 data_processing/ # Scripts de análisis └── 📁 system_utilities/ # Utilidades de sistema ``` ## 🔧 Configuración ### Variables de Entorno Archivo `.env` (copia desde `.env.example`): ```bash # Aplicación DEBUG=false SECRET_KEY=tu-clave-secreta-de-produccion DATABASE_URL=sqlite:///app/data/scriptsmanager.db # Multiusuario BASE_DATA_PATH=/app/data MAX_PROJECTS_PER_USER=50 PORT_RANGE_START=5200 PORT_RANGE_END=5400 # Internacionalización DEFAULT_LANGUAGE=en SUPPORTED_LANGUAGES=en,es,it,fr DEFAULT_THEME=light # SIDEL Branding SIDEL_LOGO_PATH=/app/app/static/images/SIDEL.png CORPORATE_BRANDING=true # Backup BACKUP_ENABLED=true ``` ### Docker Compose Profiles ```bash # Desarrollo con hot-reload docker-compose --profile dev up -d # Backup automático docker-compose --profile backup up -d # Monitoreo de logs docker-compose --profile monitoring up -d # Todos los servicios docker-compose --profile dev --profile backup --profile monitoring up -d ``` ## 👥 Gestión de Usuarios ### Niveles de Usuario | Nivel | Permisos | Descripción | |-------|----------|-------------| | `admin` | Completos | Gestión total del sistema | | `developer` | Desarrollo | Edición de metadatos y scripts | | `operator` | Operación | Ejecución de scripts de producción | | `viewer` | Solo lectura | Consulta de logs y documentación | ### Crear Usuarios ```bash # Acceder al shell del contenedor ./docker-manage.sh shell # Crear usuario administrador python scripts/create_admin.py --username miusuario --password mipassword --email mi@email.com # Crear usuario operador python scripts/create_user.py --username operador1 --password pass123 --level operator # Listar usuarios python scripts/list_users.py ``` ## 🔍 Verificación y Depuración ### Verificación Completa ```bash ./docker-manage.sh verify ``` Esto verifica: - ✅ Estructura de directorios correcta - ✅ Entornos conda funcionando - ✅ Dependencias instaladas - ✅ Puertos accesibles - ✅ Base de datos inicializada ### Depuración Común #### Error: "app/backend/script_groups not found" ```bash # Crear estructura correcta mkdir -p app/backend/script_groups/hammer mkdir -p app/backend/script_groups/data_processing mkdir -p app/backend/script_groups/system_utilities # Verificar que NO exista backend/script_groups/ ls -la backend/ # No debería existir ``` #### Error: "Port 5002 already in use" ```bash # Verificar puertos en uso ./docker-manage.sh ports # Detener otros servicios ./docker-manage.sh stop sudo lsof -ti:5002 | xargs kill -9 # Solo si es necesario ``` #### Error: "Conda environment not found" ```bash # Verificar entornos en contenedor ./docker-manage.sh shell conda env list conda activate scriptsmanager conda activate tsnet ``` ## 📊 Monitoreo y Logs ### Logs en Tiempo Real ```bash # Logs de producción ./docker-manage.sh logs -f # Logs de desarrollo ./docker-manage.sh logs-dev -f # Logs de servicios específicos docker-compose logs -f backup docker-compose logs -f log-monitor ``` ### Acceso a Logs de Usuario Los logs de ejecución están disponibles en la interfaz web: - **URL**: http://localhost:5002/logs - **Filtros**: Por usuario, script, proyecto, fecha - **Tiempo Real**: WebSocket para actualizaciones en vivo - **Exportación**: Descarga en varios formatos ## 🔄 Backup y Recuperación ### Backup Automático ```bash # Activar servicio de backup ./docker-manage.sh start-backup # El backup se ejecuta diariamente y guarda: # - Base de datos SQLite completa # - Todos los datos de usuario # - Configuraciones del sistema ``` ### Backup Manual ```bash # Backup inmediato ./docker-manage.sh backup # Los backups se guardan en: # backup/daily/data_backup_YYYYMMDD_HHMMSS.tar.gz ``` ### Recuperación ```bash # 1. Detener servicios ./docker-manage.sh stop # 2. Restaurar desde backup cd backup/daily/ tar -xzf data_backup_YYYYMMDD_HHMMSS.tar.gz -C ../../ # 3. Reiniciar servicios ./docker-manage.sh start ``` ## 🚨 Troubleshooting ### Problemas Comunes 1. **Contenedor no inicia** ```bash ./docker-manage.sh verify docker-compose logs scriptsmanager ``` 2. **Base de datos corrupta** ```bash ./docker-manage.sh stop cp data/scriptsmanager.db data/scriptsmanager.db.backup ./docker-manage.sh init-db ./docker-manage.sh start ``` 3. **Permisos de archivos** ```bash sudo chown -R $USER:$USER data/ logs/ backup/ chmod -R 755 data/ logs/ backup/ ``` 4. **Reset completo** (⚠️ Borra todos los datos) ```bash ./docker-manage.sh reset ``` ### Obtener Ayuda ```bash # Ver todos los comandos disponibles ./docker-manage.sh help # Verificar configuración ./docker-manage.sh verify # Estado del sistema ./docker-manage.sh status ``` ## 📄 Documentación Adicional - **Especificaciones**: `.doc/Application_Specification.md` - **Entornos Conda**: `conda-environments.yml` - **Configuración**: `.env.example` - **API**: Documentación en la aplicación web --- **SIDEL ScriptsManager** - Sistema de gestión de scripts multiusuario con Docker y conda Versión: 1.0.0 | Soporte: [Issues](../../issues)