Spaces:
Sleeping
Sleeping
| FROM python:3.12-slim | |
| WORKDIR /app | |
| # Install dependencies (cached layer) | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # Create non-root user (UID 1000 — HF Spaces default) | |
| RUN useradd -m -u 1000 -s /bin/bash appuser | |
| # Copy source | |
| COPY src/ src/ | |
| COPY data/seed_papers.json data/seed_papers.json | |
| COPY data/demo-data.json data/demo-data.json | |
| COPY data/demo-config.yaml data/demo-config.yaml | |
| COPY entrypoint.sh . | |
| RUN chmod +x entrypoint.sh | |
| # Create data directories with correct ownership | |
| # /app/data for local Docker Compose, /data for HF Spaces persistent storage | |
| RUN mkdir -p data/weeks /data && chown -R appuser:appuser /app /data | |
| USER appuser | |
| # Default port for HF Spaces; docker-compose overrides to 8888 via PORT env var | |
| ENV PORT=7860 | |
| EXPOSE 7860 | |
| HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=15s \ | |
| CMD python -c "import os; import urllib.request; urllib.request.urlopen(f'http://localhost:{os.environ.get(\"PORT\", 7860)}/api/status')" | |
| ENTRYPOINT ["./entrypoint.sh"] | |