← всі звіти · infra_med_detective_blue_green.md

name: Med Detective blue/green deploy description: Med Detective має test-інстанс паралельно з prod. Як розгортати нові фічі і промоутити. type: reference originSessionId: 2e8e5c8b-9467-4f27-a2ca-c84e23c5a7ed

Med Detective — blue/green deploy (з 2026-04-19)

Правило Сергія: нова фіча спочатку йде на TEST (окремий інстанс). Після approve — промоут у PROD. Лінк який дано команді на пограти — завжди /med-detective/, його не чіпати.

Два інстанси

Фізичні (systemd + Redis) — фіксовані:

Аспект Інстанс A Інстанс B
Code /srv/projects/med-detective/ /srv/projects/med-detective-test/
Systemd med-detective.service med-detective-test.service
Host port 8765 8766
Redis DB redis://127.0.0.1:6379/3 redis://127.0.0.1:6379/4
Логи /var/log/med-detective.log /var/log/med-detective-test.log

Логічні URL (перевизначаються через Caddy conf.d при swap):

URL Caddy conf.d Поточний upstream (станом на 2026-04-19 09:05)
/med-detective/ /etc/caddy/conf.d/med-detective.caddy port 8766 (інстанс B, DB 4) ← нова фіча після promote
/med-detective-test/ /etc/caddy/conf.d/med-detective-test.caddy port 8765 (інстанс A, DB 3) ← rollback (стара версія)

Важливо: які «prod» і які «test» — визначається тим, куди проксить /med-detective/ зараз. Перевіряти: grep reverse_proxy /etc/caddy/conf.d/med-detective*.caddy.

Нова фіча → TEST

  1. rsync -a /srv/projects/med-detective/ /srv/projects/med-detective-test/ (якщо TEST застарів) АБО редагувати test напряму
  2. Внести зміни в test, systemctl restart med-detective-test
  3. Smoke curl /med-detective-test/api/health → 200
  4. Повідомити Сергію URL http://31.131.26.203/med-detective-test/ і чекати OK

Промоут TEST → PROD

Варіант A (swap Caddy route — нуль-даунтайм):

Варіант B (rsync файлів, простіший):

Варіант C (якщо test доводиться з нуля переписувати): rm -rf /srv/projects/med-detective-test && cp -a /srv/projects/med-detective med-detective-test, потім redo changes.

Який варіант: якщо фіча виконана тільки на test — Варіант A (swap route) найшвидший і має instant rollback. Якщо робились ad-hoc зміни на prod паралельно — Варіант B.

Validate перед інтеграцією нових кейсів

cd /srv/projects/med-detective && .venv/bin/python scripts/validate_case.py backend/cases/new_case.json

Перевіряє що всі key_tests_to_order[].id існують у LAB_CATALOG або extra_tests. Без цього — гравець не зможе замовити тест, який очікується для діагнозу.