151 lines
4.6 KiB
Docker
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"] |