3 проблемы фиксятся:
1. tradein-mvp/backend/Dockerfile копировал только COPY app — scripts/
слетал при каждом deploy, требовал manual docker cp.
2. docker-compose.prod.yml без env_file — .env.runtime не читался
контейнером, переменные приходили только через host env.
3. Env-var name mismatch: compose YANDEX_GEOCODER_KEY vs script
YANDEX_GEOCODER_API_KEY — script всегда видел None.
Изменения:
- backend/Dockerfile: COPY scripts ./scripts в builder + runner stage
- docker-compose.prod.yml:
* env_file: ./backend/.env.runtime (required: false) — pattern из
main backend (PR #585)
* убран дубль `YANDEX_GEOCODER_API_KEY: ${...}` из environment:
block — он бы overrideal env_file пустым значением. Reviewer nit
applied inline.
- pydantic Settings (app/core/config.py): rename yandex_geocoder_key
→ yandex_geocoder_api_key. Case-insensitive env binding автоматически
подхватывает `YANDEX_GEOCODER_API_KEY` (no Field alias нужен).
- All 5 call sites в app/services/geocoder.py обновлены.
- app/tasks/geocode_missing.py docstring + test mock обновлены.
- backend/scripts/README.md: canonical `docker exec` commands без
manual `docker cp` workflow.
- DEPLOY.md + .env.example обновлены с новым именем переменной.
Verified:
- pytest tests/test_backfill_house_coords.py + test_audit_address_mismatch.py
+ test_cadastral_reverse.py → 56 pass
- docker compose -f docker-compose.prod.yml config → valid syntax
- pydantic binding: YANDEX_GEOCODER_API_KEY=foo → settings.yandex_geocoder_api_key=='foo'
- code-reviewer LGTM (nit applied inline)
После merge — на VPS уже создан /opt/gendesign/tradein-mvp/backend/.env.runtime
с YANDEX_GEOCODER_API_KEY (см. PR #591 deploy). deploy.yml triggers
force-recreate из-за нового image hash → env_file pick up автоматически.
23 lines
1.1 KiB
Text
23 lines
1.1 KiB
Text
# Trade-In MVP — environment variables example.
|
||
# Скопируй в .env (или экспортируй в shell) для override defaults.
|
||
|
||
# === Backend ===
|
||
DATABASE_URL=postgresql+psycopg://tradein:tradein@postgres:5432/tradein
|
||
CORS_ORIGINS=["http://localhost:8080","http://localhost:3000"]
|
||
ENVIRONMENT=dev
|
||
|
||
# Yandex Geocoder API key (25k req/day free tier).
|
||
# Required for backfill scripts (scripts/backfill_house_coords.py + audit_address_mismatch.py).
|
||
# Empty = Nominatim fallback для backend геокодинга; backfill scripts требуют этот ключ
|
||
# и упадут с SystemExit без него.
|
||
YANDEX_GEOCODER_API_KEY=
|
||
|
||
# === Frontend (build-time) ===
|
||
# Backend URL для Next.js rewrites (browser обращается к /api/* — Next.js проксирует на BACKEND_URL/api/*).
|
||
# В docker compose это уже выставлено в http://backend:8000 — менять не нужно.
|
||
# BACKEND_URL=http://backend:8000
|
||
|
||
# === Postgres (если меняешь — синхронизируй с DATABASE_URL и docker-compose.yml) ===
|
||
POSTGRES_USER=tradein
|
||
POSTGRES_PASSWORD=tradein
|
||
POSTGRES_DB=tradein
|