SIDEL_ScriptsManager/MIGRATION-GUIDE.md

7.1 KiB

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

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

# Crear archivo de entorno
cp .env.example .env

# Editar configuraciones específicas
nano .env

3. Construcción de la Imagen

# 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

# 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

# Listar entornos disponibles
./docker-manage.sh envs

# Debería mostrar:
# scriptsmanager
# tsnet

2. Verificar Dependencias

# 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

# 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

./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

./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

./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)

# 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

# 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:

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