SIDEL_ScriptsManager/MIGRATION-GUIDE.md

254 lines
7.1 KiB
Markdown

# 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