SIDEL_ScriptsManager/Dockerfile

151 lines
4.6 KiB
Docker

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