|
FROM python:3.11.6-slim |
|
|
|
|
|
ENV PYTHONUNBUFFERED=1 \ |
|
PYTHONPATH="/app" \ |
|
DEBIAN_FRONTEND=noninteractive \ |
|
STREAMLIT_SERVER_ADDRESS=0.0.0.0 \ |
|
STREAMLIT_SERVER_PORT=7860 |
|
|
|
ENV PYTHONIOENCODING=utf-8 |
|
ENV LANG=C.UTF-8 |
|
ENV LC_ALL=C.UTF-8 |
|
ENV PYTHONPATH="/app" |
|
ENV STREAMLIT_BROWSER_GATHER_USAGE_STATS=false |
|
ENV STREAMLIT_SERVER_HEADLESS=true |
|
|
|
|
|
RUN apt-get update && apt-get install -y \ |
|
build-essential \ |
|
libglib2.0-0 \ |
|
libsm6 \ |
|
libxrender1 \ |
|
libxext6 \ |
|
git \ |
|
curl \ |
|
wget \ |
|
procps \ |
|
net-tools \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
|
|
RUN groupadd -r appuser && useradd -r -g appuser appuser |
|
|
|
|
|
WORKDIR /app |
|
|
|
|
|
COPY requirements.txt /app/ |
|
RUN pip install --no-cache-dir --upgrade pip && \ |
|
pip install --no-cache-dir -r requirements.txt |
|
|
|
|
|
COPY path_config.py /app/ |
|
|
|
|
|
COPY docker_validation.py /app/ |
|
|
|
|
|
COPY . /app |
|
|
|
|
|
RUN mkdir -p /app/data /app/model /app/logs /app/cache /app/temp && \ |
|
mkdir -p /app/data/kaggle && \ |
|
mkdir -p /tmp/app_data /tmp/app_logs /tmp/app_cache |
|
|
|
|
|
COPY health_check.sh /app/ |
|
RUN chmod +x /app/health_check.sh |
|
|
|
|
|
RUN chmod +x /app/start.sh |
|
|
|
|
|
RUN if [ -d /app/data/kaggle ]; then \ |
|
echo "Kaggle datasets found in app structure"; \ |
|
chmod -R 775 /app/data/kaggle; \ |
|
fi && \ |
|
if [ -f /app/data/combined_dataset.csv ]; then \ |
|
echo "Combined dataset found in app structure"; \ |
|
chmod 664 /app/data/combined_dataset.csv; \ |
|
fi |
|
|
|
|
|
RUN chown -R appuser:appuser /app && \ |
|
chown -R appuser:appuser /tmp/app_data /tmp/app_logs /tmp/app_cache && \ |
|
chmod -R 755 /app && \ |
|
chmod -R 777 /app/data /app/logs /app/cache /app/temp /app/model && \ |
|
chmod -R 775 /tmp/app_data /tmp/app_logs /tmp/app_cache |
|
|
|
|
|
USER appuser |
|
|
|
|
|
RUN mkdir -p /tmp/fallback_data /tmp/fallback_logs && \ |
|
chmod 777 /tmp/fallback_data /tmp/fallback_logs |
|
|
|
|
|
RUN python /app/initialize_system.py |
|
|
|
|
|
RUN python3 -c "import sys; sys.path.append('/app'); from path_config import path_manager; print('Environment:', path_manager.environment); print('Data dir:', str(path_manager.base_paths['data'])); print('Model dir:', str(path_manager.base_paths['model']))" |
|
|
|
|
|
RUN python3 -c "import sys; sys.path.append('/app'); from path_config import path_manager; from pathlib import Path; test_file = path_manager.get_data_path('test.txt'); test_file.write_text('test'); test_file.unlink(); print('Write permissions verified')" || echo "Using fallback permissions" |
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ |
|
CMD /app/health_check.sh |
|
|
|
|
|
EXPOSE 7860 8000 |
|
|
|
|
|
ENV DOCKER_CONTAINER=1 |
|
|
|
|
|
CMD ["./start.sh"] |