chore(tradein): drop uvicorn --reload in prod (WatchFiles overhead)

Dockerfile CMD carries `--reload` for dev hot-reload (app/ bind-mounted in
docker-compose.yml). In prod the same image ran with --reload too — prod logs
showed "Started reloader process [1] using WatchFiles" — wasting a file-watcher
and risking a reload mid-request on an immutable image.

Add a prod-only `command:` override running uvicorn without --reload. Keep it a
single worker (no --workers): the in-app scheduler (app.services.scheduler,
tick=60s) lives in the backend process, so multiple workers would duplicate
scheduled jobs (cian/rosreestr would fire N times). Dev is untouched (no command
override there → still inherits the Dockerfile --reload).
This commit is contained in:
Light1YT 2026-05-29 13:31:57 +05:00
parent 40002cfcd2
commit a4603d64c8

View file

@ -36,6 +36,12 @@ services:
backend:
image: ghcr.io/lekss361/gendesign-tradein-backend:${IMAGE_TAG:-latest}
container_name: tradein-backend
# Prod: uvicorn БЕЗ --reload (Dockerfile CMD несёт --reload только для dev hot-reload,
# где app/ bind-mount'ится). В prod --reload = лишний WatchFiles-наблюдатель + риск
# reload в середине запроса. Single worker ОБЯЗАТЕЛЕН: in-app планировщик
# (app.services.scheduler, tick=60s) живёт в процессе backend — несколько uvicorn
# воркеров = дублирование scheduled-джоб (cian/rosreestr запустятся N раз). Без --workers.
command: ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
# .env.runtime пишется вручную на VPS (см. DEPLOY.md / scripts/README.md).
# Контейнер читает YANDEX_GEOCODER_API_KEY, COOKIE_ENCRYPTION_KEY и пр. из
# этого файла — без него backfill scripts падают с "key required".