gendesign/tradein-mvp/backend/Dockerfile
lekss361 0f0212a95c
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
fix(tradein): гарантировать lxml в backend-образе — bust кэша uv sync + assert import
Образ tradein-backend задеплоился без lxml (слой `uv sync` переиспользовал
устаревший build-cache при rapid-merge PR3+PR4), из-за чего ГАР-loader падает
с ModuleNotFoundError. lxml корректно в [project].dependencies — проблема в кэше.
Меняю команду RUN (детерминированно инвалидирует слой) + `import lxml` как
build-time assert: если зависимость снова пропадёт — сборка упадёт громко.
2026-06-28 15:15:09 +00:00

66 lines
2.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Trade-In MVP backend — lean image (FastAPI + WeasyPrint).
# Не содержит Playwright/Chromium/Celery/Redis — только то что нужно для trade-in feature.
# ---- builder ----
FROM python:3.12-slim AS builder
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev
RUN pip install --no-cache-dir uv
WORKDIR /app
COPY pyproject.toml ./
# NB: команда содержит `import lxml`-assert — это И bust'ит build-cache этого слоя
# (защита от stale-кэша, который однажды задеплоил образ без lxml), И валидирует,
# что зависимость реально установлена (иначе сборка падает громко, а не в рантайме).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --no-dev \
&& /app/.venv/bin/python -c "import lxml; print('lxml', lxml.__version__)"
COPY app ./app
COPY scripts ./scripts
# ---- runner ----
FROM python:3.12-slim AS runner
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PATH="/app/.venv/bin:$PATH"
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && apt-get install -y --no-install-recommends \
libpq5 \
libcairo2 \
libpango-1.0-0 \
libpangoft2-1.0-0 \
fonts-dejavu-core \
curl \
&& useradd --create-home --uid 1000 app
WORKDIR /app
COPY --from=builder --chown=app:app /app/.venv /app/.venv
COPY --from=builder --chown=app:app /app/app /app/app
COPY --from=builder --chown=app:app /app/scripts /app/scripts
USER app
# HOME должен быть явным: Docker НЕ выставляет $HOME по USER, а некоторые
# платформенные библиотеки резолвят $HOME/.cache. Безвредно оставить.
ENV HOME=/home/app
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]