- 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
28 lines
1.2 KiB
Text
28 lines
1.2 KiB
Text
# Caddy-фрагмент: tradein-mvp под gendsgn.ru/trade-in/*
|
||
#
|
||
# Этот блок ВКЛЮЧАЕТСЯ в основной gendsgn.ru { ... } блок Caddy
|
||
# (см. /opt/gendesign/Caddyfile на bot-server). Размещение — ПЕРЕД
|
||
# универсальным `handle { reverse_proxy frontend:3000 }`, потому что
|
||
# Caddy матчит handle-блоки сверху вниз.
|
||
#
|
||
# DNS — отдельный record НЕ нужен; используется тот же gendsgn.ru.
|
||
# TLS уже включён в основном блоке (auto через Let's Encrypt).
|
||
#
|
||
# URL routes:
|
||
# gendsgn.ru/trade-in → tradein-frontend:3000 (Next.js basePath=/trade-in)
|
||
# gendsgn.ru/trade-in/api/v1/* → tradein-backend:8000 (strip префикса /trade-in)
|
||
|
||
handle_path /trade-in/api/* {
|
||
# handle_path вырезает префикс /trade-in перед прокси →
|
||
# FastAPI получает /api/v1/...
|
||
reverse_proxy tradein-backend:8000
|
||
}
|
||
|
||
handle /trade-in {
|
||
redir /trade-in/ permanent
|
||
}
|
||
|
||
handle /trade-in/* {
|
||
# Next.js basePath="/trade-in" — фронт сам ждёт префикса в URL
|
||
reverse_proxy tradein-frontend:3000
|
||
}
|