372 lines
8.9 KiB
Markdown
372 lines
8.9 KiB
Markdown
# SIDEL ScriptsManager - Docker Setup
|
|
|
|
  
|
|
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Iniciar en modo desarrollo
|
|
./docker-manage.sh start-dev
|
|
```
|
|
|
|
**Acceso desarrollo**: http://localhost:5003
|
|
|
|
## 📋 Comandos Principales
|
|
|
|
### Gestión de Contenedores
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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`):
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
./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"
|
|
|
|
```bash
|
|
# 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"
|
|
|
|
```bash
|
|
# 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"
|
|
|
|
```bash
|
|
# Verificar entornos en contenedor
|
|
./docker-manage.sh shell
|
|
conda env list
|
|
conda activate scriptsmanager
|
|
conda activate tsnet
|
|
```
|
|
|
|
## 📊 Monitoreo y Logs
|
|
|
|
### Logs en Tiempo Real
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Backup inmediato
|
|
./docker-manage.sh backup
|
|
|
|
# Los backups se guardan en:
|
|
# backup/daily/data_backup_YYYYMMDD_HHMMSS.tar.gz
|
|
```
|
|
|
|
### Recuperación
|
|
|
|
```bash
|
|
# 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**
|
|
```bash
|
|
./docker-manage.sh verify
|
|
docker-compose logs scriptsmanager
|
|
```
|
|
|
|
2. **Base de datos corrupta**
|
|
```bash
|
|
./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**
|
|
```bash
|
|
sudo chown -R $USER:$USER data/ logs/ backup/
|
|
chmod -R 755 data/ logs/ backup/
|
|
```
|
|
|
|
4. **Reset completo** (⚠️ Borra todos los datos)
|
|
```bash
|
|
./docker-manage.sh reset
|
|
```
|
|
|
|
### Obtener Ayuda
|
|
|
|
```bash
|
|
# 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](../../issues) |