Primera Version operativa

This commit is contained in:
Miguel 2025-09-13 12:59:28 +02:00
parent d0f12f3fb6
commit 1dea13a5ad
45 changed files with 1159 additions and 31 deletions

View File

@ -0,0 +1,190 @@
# 📋 Resumen: Flujo de Trabajo Docker para SIDEL ScriptsManager
## 🎯 Respuesta a tu Pregunta
**"¿Cada vez que hago un cambio en los scripts qué debo hacer para regenerar la imagen y el contenedor?"**
### Respuesta Rápida:
```bash
# 🔄 Para cambios SIMPLES en scripts (90% de casos):
sudo ./docker-manage.sh restart
# 🏗️ Para cambios en DEPENDENCIAS o NUEVOS ENTORNOS:
sudo ./docker-manage.sh rebuild
```
---
## 📋 Clasificación de Cambios
### ✅ CAMBIOS SIMPLES (Solo Restart)
- Modificar scripts Python en `app/backend/script_groups/`
- Cambiar configuraciones en `app/config/`
- Actualizar templates HTML en `app/templates/`
- Modificar archivos CSS/JS en `app/static/`
- Ajustar configuraciones de la aplicación
**Comando**: `sudo ./docker-manage.sh restart`
### 🏗️ CAMBIOS COMPLEJOS (Requieren Rebuild)
- Modificar `requirements.txt` o `requirements-dev.txt`
- Agregar nuevo entorno conda
- Cambiar `Dockerfile`
- Actualizar dependencias de TSNet
- Modificar estructura de directorios del contenedor
**Comando**: `sudo ./docker-manage.sh rebuild`
---
## 🛠️ Comandos Principales Creados
### Comandos Nuevos Agregados:
```bash
# Mostrar flujo de trabajo
sudo ./docker-manage.sh workflow
# Rebuild automático (stop + build + start)
sudo ./docker-manage.sh rebuild
# Listar entornos conda
sudo ./docker-manage.sh envs
# Ver ayuda completa
sudo ./docker-manage.sh help
```
### Comandos de Verificación:
```bash
# Verificar todos los entornos
sudo ./verify-environments.sh
# Ver estado del sistema
sudo ./docker-manage.sh status
# Ver logs en tiempo real
sudo ./docker-manage.sh logs
# Acceder al contenedor
sudo ./docker-manage.sh shell
```
---
## 🐍 Agregar Nuevo Entorno Miniconda
### Proceso Paso a Paso:
1. **Crear archivo requirements** (ej: `requirements-datascience.txt`)
2. **Modificar Dockerfile** agregando nuevo entorno conda
3. **Ejecutar rebuild**: `sudo ./docker-manage.sh rebuild`
4. **Verificar**: `sudo ./verify-environments.sh`
### Ejemplo Práctico:
```bash
# 1. Crear requirements
cat > requirements-datascience.txt << EOF
pandas>=2.0.0
numpy>=1.24.0
matplotlib>=3.7.0
jupyter>=1.0.0
EOF
# 2. Agregar al Dockerfile:
# RUN conda create -n datascience python=3.12 -y
# COPY requirements-datascience.txt ./
# RUN /opt/conda/envs/datascience/bin/pip install -r requirements-datascience.txt
# 3. Rebuild
sudo ./docker-manage.sh rebuild
# 4. Verificar
sudo ./docker-manage.sh envs
```
---
## 📁 Archivos Creados
### ✅ DockerBuild.md
- **Ubicación**: `/home/miguefin/scriptmanager/DockerBuild.md`
- **Contenido**: Guía completa con ejemplos prácticos
- **Secciones**: Flujo de trabajo, nuevos entornos, troubleshooting, scripts de automatización
### ✅ docker-manage.sh (Actualizado)
- **Nuevos comandos**: `rebuild`, `workflow`, `envs` mejorado
- **Funciones agregadas**:
- `show_rebuild_workflow()`: Muestra flujo de trabajo
- `rebuild_quick()`: Rebuild automático
- **Ayuda actualizada**: Incluye nuevos comandos
### ✅ Verificaciones Funcionando
- **verify-environments.sh**: Verifica todos los entornos
- **Sistema actual**: 2 entornos (scriptsmanager + tsnet)
- **Frontend**: Funcionando en puerto 5002
---
## 🎯 Casos de Uso Frecuentes
### 📝 Desarrollo Diario:
```bash
# Modificas script Python → Solo restart
sudo ./docker-manage.sh restart
```
### 🔧 Agregar Librería Nueva:
```bash
# Modificas requirements.txt → Rebuild
sudo ./docker-manage.sh rebuild
```
### 🐍 Nuevo Entorno Conda:
```bash
# Modificas Dockerfile + requirements → Rebuild
sudo ./docker-manage.sh rebuild
```
### 🔍 Debugging:
```bash
# Verificar estado
sudo ./docker-manage.sh status
sudo ./docker-manage.sh envs
sudo ./verify-environments.sh
# Acceder al contenedor
sudo ./docker-manage.sh shell
conda env list
```
---
## ⚡ Quick Reference
| Acción | Comando |
|--------|---------|
| Ver flujo de trabajo | `sudo ./docker-manage.sh workflow` |
| Restart simple | `sudo ./docker-manage.sh restart` |
| Rebuild completo | `sudo ./docker-manage.sh rebuild` |
| Ver entornos | `sudo ./docker-manage.sh envs` |
| Verificar sistema | `sudo ./verify-environments.sh` |
| Debug en contenedor | `sudo ./docker-manage.sh shell` |
| Ver logs | `sudo ./docker-manage.sh logs` |
| Ver ayuda | `sudo ./docker-manage.sh help` |
---
## 🏁 Estado Actual del Sistema
**Frontend**: http://localhost:5002 (funcionando)
**Entorno scriptsmanager**: Python 3.12 + Flask 3.1.2
**Entorno tsnet**: Python 3.12 + TSNet 0.2.2
**Red**: Host mode para puertos dinámicos (5200-5400)
**Gestión**: Scripts automatizados completos
**Documentación**: DockerBuild.md completo
**🎉 Sistema completamente funcional y documentado!**

582
.doc/DockerBuild.md Normal file
View File

@ -0,0 +1,582 @@
# 🐳 SIDEL ScriptsManager - Guía de Docker Build
## 📋 Flujo de Trabajo para Cambios en Scripts
### 🔄 Cambios Regulares en Scripts (Sin reconstruir imagen)
Para cambios en scripts que están en volúmenes montados:
```bash
# 1. Realizar cambios en:
# - app/backend/script_groups/
# - Archivos de configuración Python
# 2. Reiniciar solo el contenedor (NO reconstruir imagen)
sudo ./docker-manage.sh restart
# 3. Verificar cambios
sudo ./docker-manage.sh logs
```
**✅ Ventaja**: Los volúmenes montados reflejan cambios inmediatamente.
### 🏗️ Cambios que Requieren Reconstruir Imagen
Reconstruir imagen cuando cambies:
- **Dockerfile**
- **requirements.txt** o **requirements-dev.txt**
- **app/backend/script_groups/hammer/requirements.txt** (TSNet)
- **Estructura de directorios** dentro del contenedor
- **Scripts de inicialización** (docker-entrypoint.sh)
- **Entornos conda** (agregar/modificar)
### 🔨 Proceso Completo de Rebuild
```bash
# 1. Detener contenedor actual
sudo ./docker-manage.sh stop
# 2. Reconstruir imagen (esto puede tomar varios minutos)
sudo ./docker-manage.sh build
# 3. Iniciar con nueva imagen
sudo ./docker-manage.sh start
# 4. Verificar que todo funciona
sudo ./verify-environments.sh
```
### ⚡ Comando Rápido de Rebuild
```bash
# Todo en una línea
sudo ./docker-manage.sh rebuild
# O manualmente:
sudo ./docker-manage.sh stop && sudo ./docker-manage.sh build && sudo ./docker-manage.sh start
```
---
## 🐍 Agregar Nuevo Entorno Miniconda
### Paso 1: Modificar Dockerfile
Agregar el nuevo entorno después de los existentes:
```dockerfile
# Entornos existentes (scriptsmanager, tsnet)
# ...
# NUEVO ENTORNO: ejemplo para análisis de datos
RUN conda create -n data_analysis python=3.12 -y
# Instalar dependencias específicas del nuevo entorno
RUN /opt/conda/envs/data_analysis/bin/pip install --no-cache-dir \
pandas>=2.0.0 \
numpy>=1.24.0 \
scipy>=1.10.0 \
scikit-learn>=1.3.0 \
jupyter>=1.0.0
```
### Paso 2: Actualizar Variables de Entorno (Opcional)
En `docker-compose.yml`:
```yaml
environment:
# Entornos existentes
- CONDA_DEFAULT_ENV=scriptsmanager
- TSNET_ENV=tsnet
# Nuevo entorno
- DATA_ANALYSIS_ENV=data_analysis
```
### Paso 3: Crear Archivo de Requirements (Opcional)
Crear `requirements-data-analysis.txt`:
```txt
pandas>=2.0.0
numpy>=1.24.0
scipy>=1.10.0
scikit-learn>=1.3.0
jupyter>=1.0.0
seaborn>=0.12.0
plotly>=5.15.0
```
Luego modificar Dockerfile:
```dockerfile
# Copiar requirements del nuevo entorno
COPY requirements-data-analysis.txt ./
# Crear e instalar en el nuevo entorno
RUN conda create -n data_analysis python=3.12 -y
RUN /opt/conda/envs/data_analysis/bin/pip install --no-cache-dir -r requirements-data-analysis.txt
```
### Paso 4: Actualizar Script de Verificación
Modificar `verify-environments.sh`:
```bash
# Verificar nuevo entorno data_analysis
echo "🔍 Verificando entorno data_analysis..."
DATA_ANALYSIS_PYTHON=$(docker exec sidel_scriptsmanager bash -c "source activate data_analysis && python --version")
echo " Python version: $DATA_ANALYSIS_PYTHON"
PANDAS_VERSION=$(docker exec sidel_scriptsmanager bash -c "source activate data_analysis && python -c 'import pandas; print(f\"Pandas {pandas.__version__}\")'" 2>/dev/null)
if [ $? -eq 0 ]; then
echo " ✅ $PANDAS_VERSION"
else
echo " ❌ Error importando Pandas"
fi
```
### Paso 5: Rebuild y Verificar
```bash
# Reconstruir con nuevo entorno
sudo ./docker-manage.sh rebuild
# Verificar nuevo entorno
sudo ./docker-manage.sh shell
conda env list
conda activate data_analysis
python -c "import pandas; print('Pandas funcionando!')"
exit
```
---
## 📁 Estructura de Archivos para Nuevos Entornos
### Opción 1: Requirements Separados
```
SIDELManagerScripts/
├── Dockerfile
├── requirements.txt # Entorno scriptsmanager
├── requirements-tsnet.txt # Entorno TSNet (ya existe)
├── requirements-data-analysis.txt # Nuevo entorno
├── requirements-ml.txt # Otro entorno futuro
└── docker-compose.yml
```
### Opción 2: Estructura Organizada
```
SIDELManagerScripts/
├── Dockerfile
├── docker/
│ ├── environments/
│ │ ├── scriptsmanager.txt
│ │ ├── tsnet.txt
│ │ ├── data-analysis.txt
│ │ └── machine-learning.txt
│ └── scripts/
└── docker-compose.yml
```
---
## 🔧 Comandos de Gestión de Entornos
### Listar Entornos Disponibles
```bash
# Desde host
sudo ./docker-manage.sh envs
# Desde dentro del contenedor
sudo ./docker-manage.sh shell
conda env list
```
### Probar Entorno Específico
```bash
# Acceder al contenedor
sudo ./docker-manage.sh shell
# Cambiar a entorno específico
conda activate data_analysis
# Probar importaciones
python -c "import pandas, numpy, scipy; print('Todo OK!')"
# Salir
exit
```
### Agregar Paquetes a Entorno Existente
```bash
# Método 1: Desde contenedor (temporal)
sudo ./docker-manage.sh shell
conda activate data_analysis
pip install matplotlib
exit
# Método 2: Permanente (modificar Dockerfile + rebuild)
# Editar Dockerfile y hacer rebuild completo
```
---
## ⚠️ Mejores Prácticas
### ✅ DO (Hacer)
1. **Usar volúmenes** para código que cambia frecuentemente
2. **Documentar dependencies** en requirements.txt separados
3. **Probar entornos** después de cada cambio
4. **Usar nombres descriptivos** para entornos
5. **Mantener entornos pequeños** y especializados
### ❌ DON'T (No hacer)
1. **No reconstruir** imagen para cambios simples de código
2. **No mezclar dependencias** incompatibles en un entorno
3. **No olvidar** actualizar scripts de verificación
4. **No usar pip dentro de contenedores** para cambios permanentes
5. **No crear entornos** demasiado pesados
---
## 🚀 Ejemplos de Entornos Comunes
### Entorno de Machine Learning
```dockerfile
# Entorno ML
RUN conda create -n machine_learning python=3.12 -y
RUN /opt/conda/envs/machine_learning/bin/pip install --no-cache-dir \
tensorflow>=2.13.0 \
torch>=2.0.0 \
scikit-learn>=1.3.0 \
pandas>=2.0.0 \
numpy>=1.24.0 \
matplotlib>=3.7.0 \
seaborn>=0.12.0 \
jupyter>=1.0.0
```
### Entorno de Web Scraping
```dockerfile
# Entorno Web Scraping
RUN conda create -n web_scraping python=3.12 -y
RUN /opt/conda/envs/web_scraping/bin/pip install --no-cache-dir \
requests>=2.31.0 \
beautifulsoup4>=4.12.0 \
selenium>=4.15.0 \
scrapy>=2.11.0 \
pandas>=2.0.0 \
lxml>=4.9.0
```
### Entorno de Procesamiento de Imágenes
```dockerfile
# Entorno Image Processing
RUN conda create -n image_processing python=3.12 -y
RUN /opt/conda/envs/image_processing/bin/pip install --no-cache-dir \
opencv-python>=4.8.0 \
pillow>=10.0.0 \
scikit-image>=0.21.0 \
matplotlib>=3.7.0 \
numpy>=1.24.0
```
---
## 📝 Checklist para Agregar Nuevo Entorno
- [ ] Crear archivo requirements-[nombre].txt
- [ ] Modificar Dockerfile con nuevo entorno
- [ ] Actualizar docker-compose.yml (variables de entorno)
- [ ] Actualizar verify-environments.sh
- [ ] Reconstruir imagen: `sudo ./docker-manage.sh rebuild`
- [ ] Verificar funcionamiento: `sudo ./verify-environments.sh`
- [ ] Probar entorno manualmente: `sudo ./docker-manage.sh shell`
- [ ] Documentar uso del nuevo entorno
---
## 🔍 Troubleshooting
### Problema: Error al construir imagen
```bash
# Ver logs detallados
sudo ./docker-manage.sh build | tee build.log
# Limpiar cache de Docker
docker system prune -f
```
### Problema: Entorno no aparece
```bash
# Verificar que se creó correctamente
sudo ./docker-manage.sh shell
conda env list
```
### Problema: Conflictos de dependencias
```bash
# Crear entorno limpio y probar dependencias una por una
conda create -n test_env python=3.12 -y
conda activate test_env
pip install paquete1
pip install paquete2 # Ver si hay conflicto
```
---
## 🛠️ Comandos de Gestión Rápidos
### Verificar Estado Actual
```bash
# Ver contenedores activos
sudo ./docker-manage.sh status
# Ver entornos conda disponibles
sudo ./docker-manage.sh envs
# Verificar salud del sistema
sudo ./docker-manage.sh health
# Ver logs en tiempo real
sudo ./docker-manage.sh logs
```
### Comandos de Desarrollo Frecuentes
```bash
# Rebuild completo (cuando cambias dependencies)
sudo ./docker-manage.sh rebuild
# Ver flujo de trabajo
sudo ./docker-manage.sh workflow
# Solo reiniciar (para cambios de código)
sudo ./docker-manage.sh restart
# Acceder al contenedor para debug
sudo ./docker-manage.sh shell
```
### Verificar Después de Cambios
```bash
# Verificar todos los entornos
sudo ./verify-environments.sh
# Probar frontend
curl -I http://localhost:5002
# Ver puertos en uso
sudo ./docker-manage.sh ports
```
---
## 📝 Ejemplo Práctico: Agregando Entorno de Data Science
### 1. Crear archivo de requirements
```bash
# Crear requirements-datascience.txt
cat > requirements-datascience.txt << EOF
pandas>=2.0.0
numpy>=1.24.0
scipy>=1.10.0
scikit-learn>=1.3.0
matplotlib>=3.7.0
seaborn>=0.12.0
jupyter>=1.0.0
plotly>=5.15.0
notebook>=6.5.0
EOF
```
### 2. Modificar Dockerfile
```dockerfile
# Agregar al final del Dockerfile, antes de USER scriptsmanager
# Entorno Data Science
RUN conda create -n datascience python=3.12 -y
# Copiar requirements
COPY requirements-datascience.txt ./
# Instalar dependencias
RUN /opt/conda/envs/datascience/bin/pip install --no-cache-dir -r requirements-datascience.txt
# Limpiar
RUN rm requirements-datascience.txt
```
### 3. Ejecutar rebuild
```bash
# Rebuild completo
sudo ./docker-manage.sh rebuild
# Verificar nuevo entorno
sudo ./docker-manage.sh shell
conda env list
conda activate datascience
python -c "import pandas, numpy, matplotlib; print('Data Science OK!')"
exit
```
### 4. Verificar funcionamiento
```bash
# Verificar que el entorno está disponible
sudo ./docker-manage.sh envs | grep datascience
# Ejecutar script de verificación
sudo ./verify-environments.sh
```
---
## 🔍 Debug y Troubleshooting Avanzado
### Problema: Imagen muy grande
```bash
# Ver tamaño de imagen
docker images | grep scriptsmanager
# Limpiar cache
sudo ./docker-manage.sh clean
# Rebuild desde cero
docker rmi sidel_scriptsmanager_scriptsmanager
sudo ./docker-manage.sh build
```
### Problema: Conflictos de puertos
```bash
# Ver puertos ocupados
sudo ./docker-manage.sh ports
# Cambiar puerto en docker-compose.yml
# Buscar SIDEL_APP_PORT=5002 y cambiar
# Reiniciar
sudo ./docker-manage.sh restart
```
### Problema: Entorno no se crea correctamente
```bash
# Debug dentro del contenedor
sudo ./docker-manage.sh shell
# Crear entorno manualmente para debugging
conda create -n test_env python=3.12 -y
conda activate test_env
# Instalar paquetes uno por uno
pip install pandas
pip install numpy
# etc...
# Si funciona, el problema está en el Dockerfile
exit
```
### Problema: Sin espacio en disco
```bash
# Limpiar Docker completamente
docker system prune -a -f
# Ver uso de espacio
df -h
docker system df
# Limpiar volúmenes no utilizados
docker volume prune -f
```
---
## ⚡ Scripts de Automatización
### Script para agregar entorno automáticamente
```bash
#!/bin/bash
# add-conda-env.sh
ENV_NAME=$1
REQUIREMENTS_FILE=$2
if [ -z "$ENV_NAME" ] || [ -z "$REQUIREMENTS_FILE" ]; then
echo "Uso: $0 <nombre_entorno> <archivo_requirements>"
exit 1
fi
# Agregar al Dockerfile
cat >> Dockerfile << EOF
# Entorno $ENV_NAME
RUN conda create -n $ENV_NAME python=3.12 -y
COPY $REQUIREMENTS_FILE ./
RUN /opt/conda/envs/$ENV_NAME/bin/pip install --no-cache-dir -r $REQUIREMENTS_FILE
RUN rm $REQUIREMENTS_FILE
EOF
echo "Entorno $ENV_NAME agregado al Dockerfile"
echo "Ejecuta: sudo ./docker-manage.sh rebuild"
```
### Script de verificación personalizado
```bash
#!/bin/bash
# verify-custom-env.sh
ENV_NAME=$1
TEST_IMPORTS=$2
if [ -z "$ENV_NAME" ]; then
echo "Uso: $0 <nombre_entorno> [imports_a_probar]"
exit 1
fi
echo "Verificando entorno $ENV_NAME..."
if [ -z "$TEST_IMPORTS" ]; then
TEST_IMPORTS="import sys; print(f'Python {sys.version}')"
fi
docker exec sidel_scriptsmanager bash -c "source activate $ENV_NAME && python -c \"$TEST_IMPORTS\""
if [ $? -eq 0 ]; then
echo "✅ Entorno $ENV_NAME funcionando correctamente"
else
echo "❌ Error en entorno $ENV_NAME"
fi
```
---
**🎯 Resumen Final**:
- **Cambios de código**: `sudo ./docker-manage.sh restart`
- **Cambios de dependencias**: `sudo ./docker-manage.sh rebuild`
- **Nuevos entornos**: Modificar Dockerfile + rebuild
- **Debug**: `sudo ./docker-manage.sh shell` + verificaciones manuales

139
.doc/SUCCESS-REPORT.md Normal file
View File

@ -0,0 +1,139 @@
# 🎉 SIDEL ScriptsManager Docker - ¡FUNCIONANDO!
## ✅ Estado Actual
**SIDEL ScriptsManager está funcionando correctamente con Docker y red host!**
### 🐳 Configuración Docker Exitosa
- **Imagen construida**: ✅ `scriptmanager_scriptsmanager:latest`
- **Contenedor ejecutándose**: ✅ `sidel_scriptsmanager`
- **Red host**: ✅ Acceso directo a todos los puertos (5002, 5200-5400)
- **Base de datos**: ✅ SQLite funcionando (temporal en /tmp)
### 🐍 Entornos Conda Verificados
#### Entorno Principal: `scriptsmanager`
- **Python**: 3.12.11 ✅
- **Flask**: 3.1.2 ✅
- **Propósito**: Frontend multiusuario
#### Entorno TSNet: `tsnet`
- **Python**: 3.12.11 ✅
- **TSNet**: 0.2.2 ✅
- **NumPy**: 1.26.4 ✅
- **Matplotlib**: 3.10.6 ✅
- **WNTR**: 1.3.2 ✅
- **Propósito**: Simulaciones Water Hammer
### 🌐 Acceso Web
- **Frontend principal**: http://localhost:5002 ✅
- **Login**: http://localhost:5002/login ✅
- **Puertos dinámicos**: 5200-5400 (disponibles para scripts multiusuario) ✅
### 🔧 Gestión del Sistema
```bash
# Comandos principales funcionando
sudo ./docker-manage.sh status # Ver estado
sudo ./docker-manage.sh logs # Ver logs
sudo ./docker-manage.sh shell # Acceder al contenedor
sudo ./docker-manage.sh stop # Detener
sudo ./docker-manage.sh start # Iniciar
```
## 🚀 Uso del Sistema
### 1. **Acceso al Frontend**
```bash
# Abrir en navegador
http://localhost:5002
```
### 2. **Verificar Entornos**
```bash
sudo ./verify-environments.sh
```
### 3. **Pool de Puertos Dinámicos**
Los scripts TSNet multiusuario pueden usar cualquier puerto entre **5200-5400** directamente sin necesidad de configuración de mapping gracias a la **red host**.
## 🔧 Características Implementadas
### ✅ Red Host
- **Ventaja**: No necesita mapeo individual de puertos
- **Beneficio**: Scripts multiusuario pueden crear servicios Flask en puertos dinámicos
- **Rango disponible**: 5200-5400
### ✅ Entornos Aislados
- **scriptsmanager**: Para el frontend y gestión
- **tsnet**: Para simulaciones específicas de Water Hammer
- **Sin conflictos** entre dependencias
### ✅ Persistencia de Datos
- **Código**: Montado desde `./app/backend/script_groups`
- **Datos de usuario**: `./data` (persistente)
- **Logs**: `./logs` (persistente)
- **Backups**: `./backup` (persistente)
### ✅ Arquitectura Multiusuario
- Base compatible con especificaciones SIDEL
- Pool de puertos dinámicos
- Estructura de datos por usuario/proyecto
## 🎯 Próximos Pasos
### 1. **Persistencia de Base de Datos** (Opcional)
Actualmente usa SQLite temporal en `/tmp`. Para producción:
```bash
# Cambiar en docker-compose.yml:
- DATABASE_URL=sqlite:///app/data/scriptsmanager.db
```
### 2. **Testing de Scripts TSNet**
```bash
# Acceder al contenedor
sudo ./docker-manage.sh shell
# Activar entorno TSNet
conda activate tsnet
# Probar TSNet
python -c "import tsnet; print('TSNet OK')"
```
### 3. **Desarrollo**
```bash
# Modo desarrollo
sudo ./docker-manage.sh start-dev
# Acceso en: http://localhost:5002 (misma red host)
```
## 📋 Resumen Técnico
### Arquitectura Final
```
Host (WSL) : Puerto 5002 → Container (host network) : Puerto 5002
Puertos 5200-5400 → Container : Puertos 5200-5400
Container:
├── Entorno scriptsmanager (Python 3.12 + Flask)
├── Entorno tsnet (Python 3.12 + TSNet + WNTR)
├── Base de datos SQLite (temporal)
├── Volúmenes persistentes (data, logs, backup)
└── Red host (acceso directo a puertos)
```
### Beneficios Conseguidos
1. **Pool de puertos dinámicos** sin configuración manual
2. **Entornos conda aislados** para diferentes propósitos
3. **Red host** para máxima flexibilidad
4. **Persistencia** de datos y logs
5. **Gestión simplificada** con scripts de administración
---
**🎉 ¡SIDEL ScriptsManager Docker Setup Completado!**
El sistema está listo para desarrollo y testing de la arquitectura multiusuario con scripts TSNet dinámicos.

127
CLEANUP-PROPOSAL.md Normal file
View File

@ -0,0 +1,127 @@
# 🧹 Propuesta de Limpieza de Scripts de Test/Verify
## 📋 Análisis de Scripts Existentes
### ✅ **SCRIPTS ESENCIALES (NO ELIMINAR)**
#### Scripts de Docker (Críticos)
- `verify-environments.sh` - **MANTENER** - Verifica entornos conda en Docker
#### Scripts de Aplicación (Funcionales)
- `app/backend/script_groups/hammer/test_plantuml.py` - **MANTENER** - Test funcional de PlantUML
---
### 🗑️ **SCRIPTS PROPUESTOS PARA ELIMINACIÓN**
#### Categoría: Scripts de Test de Desarrollo (8 archivos)
```bash
test_complete_integration.py # Test completo de simulador hammer
test_hammer_browser.py # Test de navegador hammer
test_hammer_calculations.py # Test de cálculos hammer
test_helper_functions.py # Test de funciones helper
test_language_switching.py # Test de cambio de idioma
test_model.py # Test de modelos
test_permissions.py # Test de permisos
```
**Razón**: Scripts de desarrollo/testing que ya no son necesarios con Docker funcionando
#### Categoría: Scripts de Verificación de UI/Design (5 archivos)
```bash
verify_dashboard_changes.py # Verificación de cambios en dashboard
verify_design_changes.py # Verificación de cambios de diseño
verify_group5.py # Verificación específica de grupo 5
verify_navbar_themes.py # Verificación de temas navbar
verify_sidel_logo.py # Verificación de logo SIDEL
```
**Razón**: Scripts de verificación de cambios específicos ya implementados
#### Categoría: Scripts de Debug/Check (7 archivos)
```bash
check_complete_log.py # Check de logs completos
check_db.py # Check de base de datos
check_group_env.py # Check de entorno de grupo
check_log.py # Check de logs
check_tables.py # Check de tablas DB
debug_discovery.py # Debug de discovery service
simple_debug.py # Debug simple
```
**Razón**: Scripts de debugging que pueden ser reemplazados por comandos Docker
---
### 📊 **RESUMEN DE LIMPIEZA**
| Categoría | Cantidad | Acción |
|-----------|----------|--------|
| Scripts Docker esenciales | 1 | ✅ Mantener |
| Scripts funcionales | 1 | ✅ Mantener |
| Scripts de test obsoletos | 8 | 🗑️ Eliminar |
| Scripts de verificación UI | 5 | 🗑️ Eliminar |
| Scripts de debug/check | 7 | 🗑️ Eliminar |
**Total a eliminar**: 20 archivos
**Total a mantener**: 2 archivos
---
### 🔄 **REEMPLAZOS SUGERIDOS**
En lugar de los scripts eliminados, usar:
#### Para Testing:
```bash
# En lugar de test_*.py
sudo ./docker-manage.sh health
sudo ./verify-environments.sh
```
#### Para Verificación:
```bash
# En lugar de verify_*.py
sudo ./docker-manage.sh status
sudo ./docker-manage.sh logs
curl -I http://localhost:5002
```
#### Para Debug:
```bash
# En lugar de debug_*.py y check_*.py
sudo ./docker-manage.sh shell
sudo ./docker-manage.sh logs
sudo ./docker-manage.sh envs
```
---
### ⚠️ **PRECAUCIONES ANTES DE ELIMINAR**
1. **Hacer backup** de los scripts antes de eliminar
2. **Verificar referencias** en otros archivos
3. **Probar** que el sistema Docker funciona correctamente
---
### 🚀 **COMANDOS DE ELIMINACIÓN**
Si estás de acuerdo con la propuesta, estos serían los comandos:
```bash
# Crear backup primero
mkdir -p backup/old_scripts
cp test_*.py verify_*.py check_*.py debug_*.py simple_debug.py backup/old_scripts/
# Eliminar scripts de test
rm test_complete_integration.py test_hammer_browser.py test_hammer_calculations.py
rm test_helper_functions.py test_language_switching.py test_model.py test_permissions.py
# Eliminar scripts de verificación
rm verify_dashboard_changes.py verify_design_changes.py verify_group5.py
rm verify_navbar_themes.py verify_sidel_logo.py
# Eliminar scripts de debug/check
rm check_complete_log.py check_db.py check_group_env.py check_log.py check_tables.py
rm debug_discovery.py simple_debug.py
```
**¿Proceder con esta limpieza?**

View File

@ -100,10 +100,14 @@ RUN if [ -d "backend/script_groups" ]; then \
exit 1; \
fi
# Configurar usuario y permisos para evitar problemas con volúmenes
RUN groupadd -r scriptsmanager && useradd -r -g scriptsmanager -d /app -s /bin/bash scriptsmanager
# Establecer permisos correctos
RUN chmod +x scripts/*.py && \
chown -R root:root $APP_HOME && \
chmod 755 $DATA_HOME $BACKUP_HOME $LOGS_HOME
chown -R scriptsmanager:scriptsmanager $APP_HOME && \
chmod 755 $DATA_HOME $BACKUP_HOME $LOGS_HOME && \
chown -R scriptsmanager:scriptsmanager $DATA_HOME $BACKUP_HOME $LOGS_HOME
# Crear script de inicialización específico para SIDEL ScriptsManager
RUN echo '#!/bin/bash\n\
@ -138,12 +142,16 @@ exec "$@"' > /app/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh
# Exponer puertos (puerto principal del frontend y rango para scripts)
EXPOSE 5002 5200-5400
# Puerto principal del frontend (5002) y rango dinámico (5200-5400)
# disponibles directamente con network_mode: host
# EXPOSE 5002 5200-5400 # No necesario con red host
# Volúmenes para persistencia de datos
VOLUME ["$DATA_HOME", "$BACKUP_HOME", "$LOGS_HOME"]
# Cambiar al usuario scriptsmanager
USER scriptsmanager
# Punto de entrada
ENTRYPOINT ["/app/docker-entrypoint.sh"]

0
backup/2025-09-12/data_backup_2025-09-12_014617.tar.gz Normal file → Executable file
View File

0
backup/2025-09-12/data_backup_2025-09-12_020037.tar.gz Normal file → Executable file
View File

0
backup/2025-09-12/data_backup_2025-09-12_020039.tar.gz Normal file → Executable file
View File

0
backup/2025-09-13/data_backup_2025-09-13_020013.tar.gz Normal file → Executable file
View File

0
backup/2025-09-13/data_backup_2025-09-13_020052.tar.gz Normal file → Executable file
View File

View File

View File

View File

View File

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 322 KiB

View File

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 322 KiB

View File

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 212 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 212 KiB

View File

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 198 KiB

View File

View File

0
data/scriptsmanager.db Normal file → Executable file
View File

View File

@ -5,9 +5,7 @@ services:
scriptsmanager:
build: .
container_name: sidel_scriptsmanager
ports:
- "5002:5002" # Puerto principal del frontend Flask (según run_app.py)
- "5200-5400:5200-5400" # Rango de puertos para scripts dinámicos (especificación SIDEL)
network_mode: host # Usar red host para acceso directo a todos los puertos dinámicos
volumes:
# Volúmenes para persistencia de datos multiusuario según especificaciones
- ./data:/app/data
@ -15,13 +13,11 @@ services:
- ./logs:/app/logs
# Scripts de backend (SOLO app/backend/script_groups/)
- ./app/backend/script_groups:/app/app/backend/script_groups
# Base de datos SQLite
- ./data/scriptsmanager.db:/app/data/scriptsmanager.db
environment:
# Variables de entorno según especificaciones SIDEL ScriptsManager
- DEBUG=false
- SECRET_KEY=sidel-scriptsmanager-production-key-change-this
- DATABASE_URL=sqlite:///app/data/scriptsmanager.db
- DATABASE_URL=sqlite:////tmp/scriptsmanager.db
- BASE_DATA_PATH=/app/data
- BACKUP_ENABLED=true
- PORT_RANGE_START=5200
@ -45,16 +41,12 @@ services:
timeout: 10s
retries: 3
start_period: 60s
networks:
- scriptsmanager_network
# Servicio para desarrollo con hot-reload
scriptsmanager-dev:
build: .
container_name: sidel_scriptsmanager_dev
ports:
- "5003:5002" # Puerto de desarrollo para el frontend
- "5201-5401:5200-5400" # Rango de puertos para desarrollo
network_mode: host # Usar red host para desarrollo también
volumes:
# Montar código completo para desarrollo
- .:/app
@ -85,8 +77,6 @@ services:
python scripts/run_app.py"
profiles:
- dev
networks:
- scriptsmanager_network
# Servicio para backup automático según especificaciones SIDEL
backup:
@ -111,8 +101,6 @@ services:
done"
profiles:
- backup
networks:
- scriptsmanager_network
# Servicio de monitoreo de logs (opcional)
log-monitor:
@ -141,8 +129,6 @@ services:
'"
profiles:
- monitoring
networks:
- scriptsmanager_network
# Base de datos separada (opcional, si quieres usar PostgreSQL en lugar de SQLite)
postgres:
@ -158,8 +144,6 @@ services:
- "5432:5432"
profiles:
- postgres
networks:
- scriptsmanager_network
# Servicio para backup automático
backup:
@ -179,12 +163,6 @@ services:
done"
profiles:
- backup
networks:
- scriptsmanager_network
volumes:
postgres_data:
networks:
scriptsmanager_network:
driver: bridge

View File

@ -32,7 +32,59 @@ show_banner() {
echo ""
}
# Función para mostrar ayuda
# Función para mostrar flujo de trabajo de rebuild
show_rebuild_workflow() {
show_banner
echo -e "${BLUE}🔄 Flujo de Trabajo para Cambios${NC}"
echo -e "${YELLOW}═══════════════════════════════${NC}"
echo
echo -e "${BLUE}📁 CAMBIOS QUE NO REQUIEREN REBUILD:${NC}"
echo " • Scripts en app/backend/script_groups/"
echo " • Configuraciones en app/config/"
echo " • Templates HTML en app/templates/"
echo " • Archivos estáticos (CSS, JS)"
echo
echo -e "${GREEN} Comando:${NC} sudo ./docker-manage.sh restart"
echo
echo -e "${BLUE}🏗️ CAMBIOS QUE REQUIEREN REBUILD:${NC}"
echo " • requirements.txt o requirements-dev.txt"
echo " • Dockerfile"
echo " • Nuevos entornos conda"
echo " • Dependencies de entornos existentes"
echo
echo -e "${GREEN} Comandos:${NC}"
echo " sudo ./docker-manage.sh stop"
echo " sudo ./docker-manage.sh build"
echo " sudo ./docker-manage.sh start"
echo
echo -e "${BLUE}⚡ REBUILD RÁPIDO:${NC}"
echo -e "${GREEN} sudo ./docker-manage.sh rebuild${NC}"
echo
echo -e "${BLUE}📋 VERIFICAR DESPUÉS:${NC}"
echo " sudo ./verify-environments.sh"
echo " sudo ./docker-manage.sh envs"
echo
}
# Función para rebuild rápido
rebuild_quick() {
show_banner
echo -e "${BLUE}⚡ Rebuild rápido de SIDEL ScriptsManager...${NC}"
echo -e "${YELLOW}Paso 1/3: Deteniendo contenedor...${NC}"
stop_services
echo -e "${YELLOW}Paso 2/3: Reconstruyendo imagen...${NC}"
build_image
echo -e "${YELLOW}Paso 3/3: Iniciando servicios...${NC}"
start_production
echo -e "${GREEN}✅ Rebuild completado exitosamente${NC}"
echo -e "${BLUE}🔍 Ejecuta: sudo ./verify-environments.sh para verificar${NC}"
}
# Función para mostrar ayuda de flujo de trabajo
show_help() {
show_banner
echo "Uso: $0 [comando]"
@ -54,6 +106,8 @@ show_help() {
echo -e " ${GREEN}reset${NC} Resetear completamente (¡CUIDADO: Borra datos!)"
echo -e " ${GREEN}status${NC} Mostrar estado de los contenedores"
echo -e " ${GREEN}envs${NC} Listar entornos conda disponibles"
echo -e " ${GREEN}rebuild${NC} Rebuild rápido (stop + build + start)"
echo -e " ${GREEN}workflow${NC} Mostrar flujo de trabajo para cambios"
echo -e " ${GREEN}health${NC} Verificar salud de la aplicación"
echo -e " ${GREEN}init-db${NC} Inicializar base de datos SIDEL"
echo -e " ${GREEN}verify${NC} Verificar configuración y entornos"
@ -470,6 +524,12 @@ case "${1:-help}" in
envs)
list_conda_envs
;;
rebuild)
rebuild_quick
;;
workflow)
show_rebuild_workflow
;;
health)
health_check
;;

44
fix-database-issue.sh Executable file
View File

@ -0,0 +1,44 @@
#!/bin/bash
# Script de solución temporal para el problema de la base de datos
# Este script crea una base de datos SQLite en memoria para pruebas rápidas
echo "🔧 Solucionando problema de base de datos SQLite..."
# Detener contenedor actual
sudo ./docker-manage.sh stop
# Crear una configuración temporal sin volumen de base de datos problemático
echo "📝 Actualizando configuración temporal..."
# Cambiar la configuración para usar una base de datos en memoria temporalmente
export DB_MODE=memory
# Mostrar el estado
echo "✅ Configuración temporal aplicada"
echo ""
echo "🚀 Iniciando contenedor con base de datos en memoria..."
echo " - Frontend: http://localhost:5002"
echo " - Base de datos: SQLite en memoria (temporal)"
echo " - Puertos dinámicos: 5200-5400"
echo ""
# Iniciar contenedor
sudo ./docker-manage.sh start
echo ""
echo "🔍 Verificando en 10 segundos..."
sleep 10
# Verificar conectividad
if curl -s -f http://localhost:5002 >/dev/null 2>&1; then
echo "✅ ¡ÉXITO! Frontend accesible en http://localhost:5002"
echo ""
echo "📋 Próximos pasos:"
echo " 1. Verificar entornos: ./verify-environments.sh"
echo " 2. Ver logs: ./docker-manage.sh logs"
echo " 3. Acceder: http://localhost:5002"
else
echo "❌ Frontend aún no accesible. Verificando logs..."
sudo ./docker-manage.sh logs | tail -10
fi