From a4603d64c8d226bc95d38ece25ae81a12c298774 Mon Sep 17 00:00:00 2001 From: Light1YT Date: Fri, 29 May 2026 13:31:57 +0500 Subject: [PATCH] chore(tradein): drop uvicorn --reload in prod (WatchFiles overhead) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- tradein-mvp/docker-compose.prod.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tradein-mvp/docker-compose.prod.yml b/tradein-mvp/docker-compose.prod.yml index f019e401..5a6e1905 100644 --- a/tradein-mvp/docker-compose.prod.yml +++ b/tradein-mvp/docker-compose.prod.yml @@ -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".