SIDEL_ScriptsManager/README-Docker.md

8.9 KiB

SIDEL ScriptsManager - Docker Setup

SIDEL ScriptsManager Docker Python

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

# 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

# Iniciar en modo desarrollo
./docker-manage.sh start-dev

Acceso desarrollo: http://localhost:5003

📋 Comandos Principales

Gestión de Contenedores

# 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

# 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

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

# 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

# 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

# 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

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

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

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

# Verificar entornos en contenedor
./docker-manage.sh shell
conda env list
conda activate scriptsmanager
conda activate tsnet

📊 Monitoreo y Logs

Logs en Tiempo Real

# 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

# 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

# Backup inmediato
./docker-manage.sh backup

# Los backups se guardan en:
# backup/daily/data_backup_YYYYMMDD_HHMMSS.tar.gz

Recuperación

# 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

    ./docker-manage.sh verify
    docker-compose logs scriptsmanager
    
  2. Base de datos corrupta

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

    sudo chown -R $USER:$USER data/ logs/ backup/
    chmod -R 755 data/ logs/ backup/
    
  4. Reset completo (⚠️ Borra todos los datos)

    ./docker-manage.sh reset
    

Obtener Ayuda

# 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