FROM python:3.12-slim WORKDIR /app # System dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ libmagic1 \ poppler-utils \ libgl1 \ libglib2.0-0 \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # Unprivileged runtime user. Data and cache directories belong to it; # everything else in /app stays read-only for the process. RUN useradd --system --uid 10001 --home-dir /app --shell /usr/sbin/nologin app \ && mkdir -p /app/data/runs /var/cache/research-toolset \ && chown -R app:app /app/data /var/cache/research-toolset ENV GRADIO_SERVER_NAME=0.0.0.0 \ GRADIO_SERVER_PORT=7860 \ APP_TEMP_DIR=/var/cache/research-toolset \ PYTHONUNBUFFERED=1 USER app EXPOSE 7860 HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \ CMD python -c "import os,urllib.request; urllib.request.urlopen('http://127.0.0.1:%s/' % os.environ.get('GRADIO_SERVER_PORT','7860'), timeout=4)" || exit 1 CMD ["python", "app.py"]