- FastAPI backend: PostGIS estimator + 3 scrapers (Avito/Cian/Yandex)
- Next.js 15 frontend: tradein.html mockup design, basePath=/trade-in
- WeasyPrint PDF (Брусника-style 4-page report)
- Address autocomplete с typo-tolerance + 6 EKB presets
- Изолированный docker stack gendesign-tradein (отдельная postgres БД)
- Caddy inline routes: gendsgn.ru/trade-in/* и /trade-in/api/v1/*
- Forgejo Actions: .forgejo/workflows/deploy-tradein.yml (shell-based GHCR login)
- Триггер только по paths: tradein-mvp/** (не пересекается с deploy.yml)
- Образы: ghcr.io/lekss361/gendesign-tradein-{backend,frontend}:latest
Первый запуск на сервере (вручную, один раз):
- создать /opt/gendesign/tradein-mvp/.env.runtime (postgres pwd, contact email)
- docker network create gendesign_shared (если нет)
- docker compose -p gendesign-tradein up -d
- docker compose -p gendesign exec caddy caddy reload
56 lines
1.4 KiB
Docker
56 lines
1.4 KiB
Docker
# 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 ./
|
||
RUN --mount=type=cache,target=/root/.cache/uv \
|
||
uv sync --no-dev
|
||
|
||
COPY app ./app
|
||
|
||
|
||
# ---- 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
|
||
|
||
USER app
|
||
|
||
EXPOSE 8000
|
||
|
||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|