Dockerfile 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. FROM ghcr.io/astral-sh/uv:0.11.30@sha256:93b61e21202b1dab861092748e46bbd6e0e41dd84f59b9174efd2353186e1b47 AS uv
  2. FROM python:3.12-slim-bookworm@sha256:392307d22300de8b5986851a12d9176dfc0fc073e65bf6523ebd7dcbeb23564e AS builder
  3. COPY --from=uv /uv /usr/local/bin/uv
  4. WORKDIR /app
  5. ENV UV_PYTHON_DOWNLOADS=never UV_LINK_MODE=copy TMPDIR=/app/.work
  6. RUN mkdir /app/.work
  7. COPY pyproject.toml uv.lock ./
  8. ARG DEPENDENCY_GROUP=runtime
  9. RUN --mount=type=cache,target=/root/.cache/uv \
  10. if [ "$DEPENDENCY_GROUP" = inference ]; then \
  11. uv sync --locked --no-default-groups --group inference --no-install-project; \
  12. elif [ "$DEPENDENCY_GROUP" = runtime ]; then \
  13. uv sync --locked --no-default-groups --no-install-project; \
  14. else exit 1; fi
  15. COPY src/ src/
  16. RUN --mount=type=cache,target=/root/.cache/uv \
  17. if [ "$DEPENDENCY_GROUP" = inference ]; then \
  18. uv sync --locked --no-default-groups --group inference --no-editable; \
  19. else uv sync --locked --no-default-groups --no-editable; fi
  20. FROM python:3.12-slim-bookworm@sha256:392307d22300de8b5986851a12d9176dfc0fc073e65bf6523ebd7dcbeb23564e AS runtime
  21. RUN useradd --uid 10001 --create-home app
  22. WORKDIR /app
  23. ENV PATH=/app/.venv/bin:$PATH PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 TMPDIR=/app/.work
  24. COPY --from=builder /app/.venv /app/.venv
  25. COPY alembic.ini oms-alembic.ini ./
  26. COPY migrations/ migrations/
  27. COPY oms_migrations/ oms_migrations/
  28. RUN mkdir /app/.work && chown app:app /app/.work
  29. USER 10001:10001
  30. EXPOSE 8000
  31. CMD ["uvicorn", "zhifu.app:create_app", "--factory", "--host", "0.0.0.0", "--port", "8000", "--timeout-graceful-shutdown", "60"]