# Guía de Migración a Docker - SIDEL ScriptsManager ## Resumen de la Configuración Creada Se ha creado una configuración Docker completa para SIDEL ScriptsManager que incluye: ### ✅ Archivos Creados/Actualizados 1. **Dockerfile** - Imagen base con dos entornos conda 2. **docker-compose.yml** - Orquestación de servicios 3. **docker-manage.sh** - Script de gestión completo 4. **verify-environments.sh** - Script de verificación 5. **.env.example** - Plantilla de variables de entorno 6. **.dockerignore** - Exclusiones para construcción 7. **conda-environments.md** - Documentación de entornos ### 🐍 Entornos Conda Configurados #### Entorno Principal: `scriptsmanager` - **Python**: 3.12 - **Puerto**: 5002 - **Propósito**: Frontend Flask (run_app.py) - **Dependencias**: Flask, SocketIO, SQLAlchemy, Gunicorn #### Entorno TSNet: `tsnet` - **Python**: 3.12 - **Puertos**: 5200-5400 (dinámicos) - **Propósito**: Scripts Water Hammer Simulator - **Dependencias**: TSNet, WNTR, NumPy, Matplotlib, ReportLab ## 🔧 Próximos Pasos para Implementación ### 1. Preparación del Entorno ```bash cd /home/miguefin/scriptmanager/SIDELManagerScripts # Verificar que todos los archivos están presentes ls -la | grep -E "(Dockerfile|docker-compose|docker-manage)" # Dar permisos de ejecución (si no se hizo) chmod +x docker-manage.sh verify-environments.sh ``` ### 2. Configuración Inicial ```bash # Crear archivo de entorno cp .env.example .env # Editar configuraciones específicas nano .env ``` ### 3. Construcción de la Imagen ```bash # Construir la imagen Docker ./docker-manage.sh build # Este proceso: # - Instala miniconda como base # - Crea entorno 'scriptsmanager' con Python 3.12 # - Instala dependencias del requirements.txt principal # - Crea entorno 'tsnet' con Python 3.12 # - Instala dependencias específicas de TSNet # - Configura estructura de directorios ``` ### 4. Primera Ejecución ```bash # Iniciar en modo producción ./docker-manage.sh start # Verificar que todo funciona ./verify-environments.sh ``` ## 🏗️ Arquitectura Implementada ### Estructura de Directorios Docker ``` SIDELManagerScripts/ ├── Dockerfile # ✅ Imagen con 2 entornos conda ├── docker-compose.yml # ✅ Servicios y volúmenes ├── docker-manage.sh # ✅ Script de gestión ├── verify-environments.sh # ✅ Verificación de entornos ├── .env.example # ✅ Variables de entorno ├── .dockerignore # ✅ Exclusiones ├── conda-environments.md # ✅ Documentación └── README-Docker.md # ✅ Guía completa existente ``` ### Volúmenes Persistentes ``` ./data/ → /app/data/ # Base de datos y datos de usuario ./backup/ → /app/backup/ # Backups automáticos ./logs/ → /app/logs/ # Logs de aplicación ./app/backend/ → /app/app/backend/ # Scripts (modo desarrollo) ``` ### Puertos Configurados - **5002**: Frontend principal (producción) - **5003**: Frontend desarrollo (perfil dev) - **5200-5400**: Rango para scripts TSNet dinámicos - **5432**: PostgreSQL (perfil opcional) ## 🔍 Verificaciones Post-Instalación ### 1. Verificar Entornos Conda ```bash # Listar entornos disponibles ./docker-manage.sh envs # Debería mostrar: # scriptsmanager # tsnet ``` ### 2. Verificar Dependencias ```bash # Ejecutar script de verificación completo ./verify-environments.sh # Verificaciones que realiza: # ✓ Contenedor ejecutándose # ✓ Python 3.12 en ambos entornos # ✓ Flask en scriptsmanager # ✓ TSNet en entorno tsnet # ✓ NumPy, Matplotlib, WNTR # ✓ Conectividad del frontend ``` ### 3. Verificar Aplicación ```bash # Verificar salud de la aplicación ./docker-manage.sh health # Acceder a la aplicación curl http://localhost:5002 ``` ## 🛠️ Comandos de Gestión Disponibles ### Gestión Principal ```bash ./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 ./docker-manage.sh status # Estado actual ``` ### Monitoreo y Debug ```bash ./docker-manage.sh logs # Ver logs ./docker-manage.sh logs -f # Seguir logs en tiempo real ./docker-manage.sh shell # Acceder al contenedor ./docker-manage.sh envs # Listar entornos conda ./docker-manage.sh health # Verificar salud ``` ### Gestión de Datos ```bash ./docker-manage.sh backup # Backup manual ./docker-manage.sh init-admin # Crear admin (cuando esté implementado) ./docker-manage.sh init-db # Inicializar BD ``` ## 🚨 Consideraciones Importantes ### 1. Compatibilidad con WSL - La configuración está optimizada para Linux/WSL - Funciona perfectamente en tu entorno WSL actual - Los volúmenes se mapean correctamente al sistema de archivos WSL ### 2. Gestión de Puertos - Puerto 5002 para el frontend (cambio desde el 5002 original de run_app.py) - El ScriptsManager asignará puertos dinámicos 5200-5400 para scripts TSNet - Configuración compatible con la arquitectura multiusuario ### 3. Persistencia de Datos - Todos los datos de usuario se mantienen en `./data/` - Logs organizados por usuario en `./logs/` - Backups automáticos en `./backup/` ### 4. Entornos Conda Isolados - `scriptsmanager`: Solo dependencias del frontend - `tsnet`: Solo dependencias de simulación - Sin conflictos entre bibliotecas ## 🔧 Personalización Avanzada ### Variables de Entorno Clave (.env) ```bash # Configuración de la aplicación DEBUG=false SECRET_KEY=cambiar-en-produccion # Base de datos DATABASE_URL=sqlite:///app/data/scriptsmanager.db # Gestión de puertos PORT_RANGE_START=5200 PORT_RANGE_END=5400 # Entornos conda CONDA_DEFAULT_ENV=scriptsmanager TSNET_ENV=tsnet ``` ### Perfiles Docker Compose Disponibles ```bash # Perfil por defecto (producción) ./docker-manage.sh start # Perfil de desarrollo ./docker-manage.sh start-dev # Con PostgreSQL (en lugar de SQLite) docker-compose --profile postgres up -d # Con backup automático diario docker-compose --profile backup up -d ``` ## 📋 Lista de Verificación Final - [ ] Archivos Docker creados correctamente - [ ] Permisos de ejecución configurados - [ ] Archivo .env configurado - [ ] Imagen Docker construida: `./docker-manage.sh build` - [ ] Aplicación iniciada: `./docker-manage.sh start` - [ ] Entornos verificados: `./verify-environments.sh` - [ ] Frontend accesible en http://localhost:5002 - [ ] Logs funcionando: `./docker-manage.sh logs` ## ⚡ Comando de Inicio Rápido Para usuarios experimentados, secuencia completa de inicio: ```bash cd /home/miguefin/scriptmanager/SIDELManagerScripts cp .env.example .env ./docker-manage.sh build ./docker-manage.sh start ./verify-environments.sh ``` --- **🎯 Resultado Esperado**: - SIDEL ScriptsManager ejecutándose en http://localhost:5002 - Dos entornos conda funcionales (scriptsmanager, tsnet) - Gestión completa a través de `./docker-manage.sh` - Datos persistentes en volúmenes Docker