Base con Docker
|
@ -0,0 +1,91 @@
|
||||||
|
# Docker ignore file para SIDEL Manager Scripts
|
||||||
|
# Evita copiar archivos innecesarios al contexto de construcción
|
||||||
|
|
||||||
|
# Archivos de desarrollo y temporales
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
__pycache__/
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Entornos virtuales
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env/
|
||||||
|
.venv/
|
||||||
|
|
||||||
|
# IDEs
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Archivos de configuración local
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Base de datos de desarrollo
|
||||||
|
*.db
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
!data/scriptsmanager.db
|
||||||
|
|
||||||
|
# Backups locales
|
||||||
|
backup/
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Archivos del sistema
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Git
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
Dockerfile.dev
|
||||||
|
docker-compose.override.yml
|
||||||
|
|
||||||
|
# Cache de pytest
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
|
||||||
|
# Archivos de Node.js (si los hay)
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Archivos temporales de la aplicación
|
||||||
|
instance/
|
||||||
|
temp/
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
# Certificados SSL (si los hay)
|
||||||
|
*.pem
|
||||||
|
*.crt
|
||||||
|
*.key
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Variables de entorno para Docker
|
||||||
|
# Copia este archivo a .env y modifica los valores según tus necesidades
|
||||||
|
|
||||||
|
# Configuración de la aplicación
|
||||||
|
DEBUG=false
|
||||||
|
SECRET_KEY=change-this-to-a-secure-random-string-in-production
|
||||||
|
FLASK_ENV=production
|
||||||
|
|
||||||
|
# Base de datos
|
||||||
|
DATABASE_URL=sqlite:///app/data/scriptsmanager.db
|
||||||
|
# Para PostgreSQL (descomenta si usas el perfil postgres):
|
||||||
|
# DATABASE_URL=postgresql://scriptsmanager:scriptsmanager_password@postgres:5432/scriptsmanager
|
||||||
|
|
||||||
|
# Configuración de datos
|
||||||
|
BASE_DATA_PATH=/app/data
|
||||||
|
MAX_PROJECTS_PER_USER=50
|
||||||
|
|
||||||
|
# Configuración de puertos
|
||||||
|
PORT_RANGE_START=5200
|
||||||
|
PORT_RANGE_END=5400
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
BACKUP_ENABLED=true
|
||||||
|
|
||||||
|
# Configuración de conda
|
||||||
|
CONDA_DEFAULT_ENV=scriptsmanager
|
||||||
|
|
||||||
|
# Configuración de red (opcional)
|
||||||
|
# EXTERNAL_PORT=5000
|
||||||
|
# DEV_EXTERNAL_PORT=5001
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,151 @@
|
||||||
|
# Dockerfile para SIDEL Manager Scripts con Miniconda
|
||||||
|
# Compatible con las especificaciones del proyecto SIDEL ScriptsManager
|
||||||
|
FROM continuumio/miniconda3:latest
|
||||||
|
|
||||||
|
# Metadatos del container
|
||||||
|
LABEL maintainer="SIDEL Manager Scripts"
|
||||||
|
LABEL description="Multi-user script manager with conda environments"
|
||||||
|
LABEL version="1.0.0"
|
||||||
|
|
||||||
|
# Variables de entorno según especificaciones SIDEL
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV CONDA_ENV_NAME=scriptsmanager
|
||||||
|
ENV TSNET_ENV_NAME=tsnet
|
||||||
|
ENV APP_HOME=/app
|
||||||
|
ENV DATA_HOME=/app/data
|
||||||
|
ENV BACKUP_HOME=/app/backup
|
||||||
|
ENV LOGS_HOME=/app/logs
|
||||||
|
|
||||||
|
# Variables específicas del proyecto SIDEL
|
||||||
|
ENV SECRET_KEY=change-this-in-production
|
||||||
|
ENV DEBUG=false
|
||||||
|
ENV BASE_DATA_PATH=/app/data
|
||||||
|
ENV PORT_RANGE_START=5200
|
||||||
|
ENV PORT_RANGE_END=5400
|
||||||
|
ENV MAX_PROJECTS_PER_USER=50
|
||||||
|
ENV BACKUP_ENABLED=true
|
||||||
|
ENV DEFAULT_LANGUAGE=en
|
||||||
|
|
||||||
|
# Actualizar sistema y instalar dependencias del sistema
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
sqlite3 \
|
||||||
|
vim \
|
||||||
|
nano \
|
||||||
|
htop \
|
||||||
|
procps \
|
||||||
|
wget \
|
||||||
|
unzip \
|
||||||
|
libsqlite3-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Crear estructura de directorios según especificaciones SIDEL
|
||||||
|
RUN mkdir -p $APP_HOME $DATA_HOME $BACKUP_HOME $LOGS_HOME && \
|
||||||
|
mkdir -p $DATA_HOME/script_groups \
|
||||||
|
$DATA_HOME/system \
|
||||||
|
$LOGS_HOME/executions \
|
||||||
|
$LOGS_HOME/system \
|
||||||
|
$LOGS_HOME/audit \
|
||||||
|
$BACKUP_HOME/daily
|
||||||
|
|
||||||
|
# Establecer directorio de trabajo
|
||||||
|
WORKDIR $APP_HOME
|
||||||
|
|
||||||
|
# Copiar archivos de configuración de dependencias
|
||||||
|
COPY requirements.txt requirements-dev.txt ./
|
||||||
|
COPY app/backend/script_groups/hammer/requirements.txt ./tsnet_requirements.txt
|
||||||
|
|
||||||
|
# Crear entorno conda principal para SIDEL ScriptsManager (Frontend Flask)
|
||||||
|
RUN conda create -n $CONDA_ENV_NAME python=3.12 -y
|
||||||
|
|
||||||
|
# Activar entorno principal y configurar PATH
|
||||||
|
RUN echo "source activate $CONDA_ENV_NAME" > ~/.bashrc
|
||||||
|
ENV PATH /opt/conda/envs/$CONDA_ENV_NAME/bin:$PATH
|
||||||
|
|
||||||
|
# Instalar dependencias Python en el entorno principal (ScriptsManager)
|
||||||
|
RUN /opt/conda/envs/$CONDA_ENV_NAME/bin/pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Crear entorno específico para TSNet (Water Hammer Simulator)
|
||||||
|
RUN conda create -n $TSNET_ENV_NAME python=3.12 -y
|
||||||
|
|
||||||
|
# Instalar dependencias de TSNet en su entorno específico
|
||||||
|
RUN /opt/conda/envs/$TSNET_ENV_NAME/bin/pip install --no-cache-dir -r tsnet_requirements.txt
|
||||||
|
|
||||||
|
# Copiar código de la aplicación
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Crear estructura de directorios necesaria según especificaciones SIDEL
|
||||||
|
RUN mkdir -p \
|
||||||
|
app/backend/script_groups/hammer \
|
||||||
|
app/backend/script_groups/data_processing \
|
||||||
|
app/backend/script_groups/system_utilities \
|
||||||
|
app/backend/logs/executions \
|
||||||
|
data/script_groups/group_2 \
|
||||||
|
data/script_groups/group_3 \
|
||||||
|
data/script_groups/group_5 \
|
||||||
|
data/script_groups/logs \
|
||||||
|
data/system \
|
||||||
|
instance \
|
||||||
|
logs/executions \
|
||||||
|
logs/system \
|
||||||
|
logs/audit \
|
||||||
|
backup/daily
|
||||||
|
|
||||||
|
# Verificar que NO existe backend/script_groups/ (solo app/backend/script_groups/)
|
||||||
|
RUN if [ -d "backend/script_groups" ]; then \
|
||||||
|
echo "ERROR: Found backend/script_groups/ - This should NOT exist!"; \
|
||||||
|
echo "All scripts must be in app/backend/script_groups/ only"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Establecer permisos correctos
|
||||||
|
RUN chmod +x scripts/*.py && \
|
||||||
|
chown -R root:root $APP_HOME && \
|
||||||
|
chmod 755 $DATA_HOME $BACKUP_HOME $LOGS_HOME
|
||||||
|
|
||||||
|
# Crear script de inicialización específico para SIDEL ScriptsManager
|
||||||
|
RUN echo '#!/bin/bash\n\
|
||||||
|
set -e\n\
|
||||||
|
echo "=== SIDEL ScriptsManager Initialization ==="\n\
|
||||||
|
source activate scriptsmanager\n\
|
||||||
|
cd /app\n\
|
||||||
|
\n\
|
||||||
|
# Verificar estructura de directorios\n\
|
||||||
|
echo "Checking directory structure..."\n\
|
||||||
|
if [ ! -d "app/backend/script_groups" ]; then\n\
|
||||||
|
echo "ERROR: app/backend/script_groups directory not found!"\n\
|
||||||
|
exit 1\n\
|
||||||
|
fi\n\
|
||||||
|
\n\
|
||||||
|
# Inicializar base de datos SQLite\n\
|
||||||
|
echo "Initializing SQLite database..."\n\
|
||||||
|
python scripts/init_db.py\n\
|
||||||
|
\n\
|
||||||
|
# Verificar entornos conda\n\
|
||||||
|
echo "Available conda environments:"\n\
|
||||||
|
conda env list\n\
|
||||||
|
\n\
|
||||||
|
echo "ScriptsManager environment packages:"\n\
|
||||||
|
conda list -n scriptsmanager | grep -E "(flask|sqlalchemy)" || true\n\
|
||||||
|
\n\
|
||||||
|
echo "TSNet environment packages:"\n\
|
||||||
|
conda list -n tsnet | grep -E "(tsnet|numpy|matplotlib)" || true\n\
|
||||||
|
\n\
|
||||||
|
echo "=== Starting SIDEL ScriptsManager ==="\n\
|
||||||
|
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
|
||||||
|
|
||||||
|
# Volúmenes para persistencia de datos
|
||||||
|
VOLUME ["$DATA_HOME", "$BACKUP_HOME", "$LOGS_HOME"]
|
||||||
|
|
||||||
|
# Punto de entrada
|
||||||
|
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||||
|
|
||||||
|
# Comando por defecto (usa el puerto correcto del frontend)
|
||||||
|
CMD ["/opt/conda/envs/scriptsmanager/bin/python", "scripts/run_app.py"]
|
|
@ -0,0 +1,254 @@
|
||||||
|
# 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
|
|
@ -0,0 +1,372 @@
|
||||||
|
# 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)
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |