Spaces:
Sleeping
Sleeping
| # ────────────────────────────────────────────────────────────────────────────── | |
| # Build stage — install dependencies with uv | |
| # ────────────────────────────────────────────────────────────────────────────── | |
| FROM python:3.13-slim AS builder | |
| # Install uv | |
| COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv | |
| # Use the same path as runtime so venv shebangs stay valid after copy | |
| WORKDIR /home/app | |
| COPY pyproject.toml uv.lock ./ | |
| # Install only production deps into a clean venv | |
| RUN uv sync --frozen --no-dev --no-install-project | |
| # ────────────────────────────────────────────────────────────────────────────── | |
| # Runtime stage | |
| # ────────────────────────────────────────────────────────────────────────────── | |
| FROM python:3.13-slim | |
| WORKDIR /home/app | |
| # Copy installed venv from builder (paths match — no shebang breakage) | |
| COPY --from=builder /home/app/.venv /home/app/.venv | |
| # Copy application code | |
| COPY . . | |
| # Pre-create /data so local Docker runs work; on HF Spaces the volume is mounted | |
| # here at runtime (owned by root, container also runs as root — no permission issue) | |
| #RUN mkdir -p /data | |
| RUN mkdir -p /data && chmod 777 /data | |
| # Add venv to PATH | |
| ENV PATH="/home/app/.venv/bin:$PATH" \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 | |
| # PORT is overridden per-platform: | |
| # HF Spaces → 7860 (default) | |
| # Render → set PORT env var | |
| # Cloud Run → set PORT env var (GCP sets it automatically) | |
| EXPOSE 7860 | |
| CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port ${PORT:-7860} --loop asyncio"] | |