Spaces:
Running
Running
| FROM python:3.12-slim-bookworm | |
| WORKDIR /app | |
| # System deps + uv + setuptools (merged to reduce layers) | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \ | |
| libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 \ | |
| libpango-1.0-0 libcairo2 libasound2 libxshmfence1 \ | |
| libcairo2-dev libpango1.0-dev pkg-config \ | |
| gcc python3-dev \ | |
| ffmpeg \ | |
| fonts-dejavu-core \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| && pip install --no-cache-dir uv "setuptools<81" | |
| # Copy project files | |
| COPY pyproject.toml uv.lock .python-version README.md ./ | |
| COPY src/ src/ | |
| # CPU-only PyTorch — must be set BEFORE uv sync so it's respected during resolution | |
| ENV UV_TORCH_BACKEND=cpu | |
| ENV UV_NO_BUILD_ISOLATION=0 | |
| # Install deps, Playwright, setuptools pin, and create runtime dirs (merged to reduce layers) | |
| RUN uv sync --no-dev --extra pdf --extra tts --extra video \ | |
| && uv run playwright install chromium \ | |
| && uv run pip install --no-cache-dir "setuptools<81" "Pillow>=10.0" \ | |
| && mkdir -p /app/output /app/uploads /app/rag_index \ | |
| && chmod -R 777 /app/output /app/uploads /app/rag_index | |
| ENV PATH="/app/.venv/bin:$PATH" | |
| ENV PYTHONUNBUFFERED=1 | |
| ENV PYTHONIOENCODING=utf-8 | |
| # Accept HF_TOKEN and other secrets as build/runtime args | |
| ARG HF_TOKEN="" | |
| ENV HF_TOKEN=${HF_TOKEN} | |
| # OPENROUTER_API_KEY and STUDYCRAFT_WEB_TOKEN should be set at runtime via docker run -e | |
| # or in docker-compose.yml environment section | |
| VOLUME ["/app/output", "/app/uploads", "/app/rag_index"] | |
| ENV PORT=8000 | |
| EXPOSE ${PORT} | |
| # rebuild trigger: faadedb | |
| CMD ["studycraft-web", "--port", "8000"] | |