Spaces:
Running
on
Zero
Running
on
Zero
| FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS build | |
| ARG DEBIAN_FRONTEND="noninteractive" | |
| WORKDIR /app | |
| ENV UV_LINK_MODE=copy \ | |
| UV_COMPILE_BYTECODE=1 \ | |
| UV_PYTHON_DOWNLOADS=never | |
| # Install dependencies (cache mount may not persist on HF Spaces but doesn't hurt) | |
| RUN --mount=type=cache,target=/root/.cache/uv \ | |
| --mount=type=bind,source=uv.lock,target=uv.lock \ | |
| --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ | |
| uv sync --frozen --no-install-project --no-dev | |
| FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim | |
| ARG DEBIAN_FRONTEND="noninteractive" | |
| # HuggingFace Spaces requires UID 1000 (not 2222) | |
| ARG NON_ROOT_USER="user" | |
| ARG NON_ROOT_UID="1000" | |
| ARG NON_ROOT_GID="1000" | |
| ARG HOME_DIR="/home/${NON_ROOT_USER}" | |
| ARG REPO_DIR="${HOME_DIR}/app" | |
| RUN useradd -l -m -s /bin/bash -u ${NON_ROOT_UID} ${NON_ROOT_USER} | |
| RUN apt update -qy && \ | |
| apt -qyy install curl git && \ | |
| apt clean && \ | |
| rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | |
| ENV PYTHONIOENCODING=utf8 \ | |
| LANG="C.UTF-8" \ | |
| LC_ALL="C.UTF-8" \ | |
| PATH="${HOME_DIR}/.local/bin:${REPO_DIR}/.venv/bin:$PATH" | |
| USER ${NON_ROOT_USER} | |
| WORKDIR ${REPO_DIR} | |
| # Copy virtual environment from build stage | |
| COPY --from=build --chown=${NON_ROOT_USER}:${NON_ROOT_GID} /app/.venv ${REPO_DIR}/.venv | |
| # Copy application code | |
| COPY --chown=${NON_ROOT_USER}:${NON_ROOT_GID} backend/ backend/ | |
| COPY --chown=${NON_ROOT_USER}:${NON_ROOT_GID} database/ database/ | |
| COPY --chown=${NON_ROOT_USER}:${NON_ROOT_GID} app.py . | |
| EXPOSE 7860 | |
| CMD ["sh", "-c", "python app.py > /dev/null 2>&1"] | |