- 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
41 lines
1.2 KiB
Docker
41 lines
1.2 KiB
Docker
# Trade-In MVP frontend — Next.js 15 + React 19 + TanStack Query.
|
||
# Без Sentry/Tailwind/Leaflet/echarts — лёгкая версия только для trade-in.
|
||
|
||
# ---- deps ----
|
||
FROM node:20-alpine AS deps
|
||
WORKDIR /app
|
||
COPY package.json package-lock.json* ./
|
||
RUN --mount=type=cache,target=/root/.npm \
|
||
npm install --legacy-peer-deps --no-audit --no-fund
|
||
|
||
|
||
# ---- builder ----
|
||
FROM node:20-alpine AS builder
|
||
WORKDIR /app
|
||
ENV NEXT_TELEMETRY_DISABLED=1
|
||
|
||
# basePath baked-in во время build (Next.js не может изменить runtime).
|
||
# В CI workflow: --build-arg NEXT_PUBLIC_BASE_PATH=/trade-in (для prod);
|
||
# в локальном dev: пусто = no-op.
|
||
ARG NEXT_PUBLIC_BASE_PATH=""
|
||
ENV NEXT_PUBLIC_BASE_PATH=$NEXT_PUBLIC_BASE_PATH
|
||
|
||
COPY --from=deps /app/node_modules ./node_modules
|
||
COPY . .
|
||
RUN npm run build
|
||
|
||
|
||
# ---- runner ----
|
||
FROM node:20-alpine AS runner
|
||
WORKDIR /app
|
||
ENV NODE_ENV=production \
|
||
NEXT_TELEMETRY_DISABLED=1 \
|
||
PORT=3000
|
||
|
||
COPY --from=builder --chown=node:node /app/public ./public
|
||
COPY --from=builder --chown=node:node /app/.next/standalone ./
|
||
COPY --from=builder --chown=node:node /app/.next/static ./.next/static
|
||
|
||
USER node
|
||
EXPOSE 3000
|
||
CMD ["node", "server.js"]
|