Перейти к содержанию

Iris — Справочник конфигурации развёртывания

Одна страница — единый источник истины по всем параметрам развёртывания Iris. English: DEPLOYMENT_CONFIG.md.

Все настройки живут в app/config.py (Settings) и читаются через get_settings(); задавайте их в .env (устройство) или в env лицензионного сервера (облако). Ничего не включено по умолчанию — обычный docker compose up поднимает пермиссивную dev-коробку. Коммерческое/appliance-поведение вы включаете явно, под ту редакцию, которую поставляете.


1. Редакции — кратко

Редакция model_license_clean biometrics_enabled license_enforce Что поставляется
Dev / eval (по умолчанию) false true false Работает как есть, без лицензии, все функции — только для разработки
Только детекция, license-clean ⭐ продаётся уже сейчас true false true RT-DETR (Apache), нет AGPL/non-commercial/research-моделей, без биометрии
Полная коммерческая (лицо по лицензии клиента) true true true + личности на основе лица под собственной лицензией клиента на face-модель

model_license_clean=true форсит Apache-детектор RT-DETR + appearance-бэкенд DINOv2 (без AGPL YOLOv8 / research OSNet). biometrics_enabled=false — юридически чистый дефолт для платной коробки без коммерческой лицензии на face-модель и правового基ования на биометрию. См. LICENSING.md и COMPLIANCE.md.


2. Главные переключатели (устройство, .env)

Настройка Дефолт Что делает
model_license_clean false License-clean редакция: форсит Apache RT-DETR + DINOv2, без copyleft/research-моделей
biometrics_enabled true Мастер-гейт: false = только детекция (лицо/reid/возраст-пол выключены)
detector_backend yolo yolo | rtdetr (Apache) | deepstream | cpu. Форсится в rtdetr clean-редакцией
reid_appearance_backend osnet osnet (research) | dinov2 (Apache). Форсится в dinov2 clean-редакцией
faces_enabled / reid_enabled true Пофичевые тумблеры (также под гейтом biometrics_enabled)
auth_required true Fail-closed: отклонять запросы без SSO-заголовка / API-ключа
local_auth_enabled false Вход на appliance + RBAC (подписанная сессионная кука). Off → путь через SSO-заголовок
offline_mode false Air-gap: без исходящих вызовов; вместе с HF_HUB_OFFLINE=1

3. Лицензирование и триал

Устройство (.env)

Настройка Дефолт Что делает
license_enforce false Поставляется инертным. true = применять лимит камер + права модулей из подписанной лицензии. Fail-open при ошибке
license_path data/license.json Подписанный, привязанный к железу файл лицензии
trial_auto_enabled false На первом старте без лицензии — автозапрос триала
trial_server_url "" HTTPS-сервер лицензий для авто-триала

Лицензионный сервер (облачный env — наша инфраструктура, не поставляется; см. cloud/README.md)

Env Дефолт Что делает
IRIS_LS_ADMIN_TOKEN Админ-секрет для /admin/* (выпуск токена, отзыв)
IRIS_LS_KEY Приватный ключ подписи вендора (gen_vendor_key.py; в проде — HSM)
IRIS_TRIAL_DAYS 7 Срок бесплатного триала = 7 дней. Соответствует EULA §1a; не повышать без правки EULA (дефолт зафиксирован тестом)
IRIS_TRIAL_MODULES "" (все) Права триала; пусто = полнофункциональный триал
IRIS_TRIAL_CAMERAS не задано (∞) Лимит камер в триале
IRIS_HEARTBEAT_URL Endpoint heartbeat, зашиваемый в выпущенные лицензии
IRIS_STRIPE_WEBHOOK_SECRET / IRIS_YOOKASSA_SECRET Биллинг-вебхуки (мир / РФ)

Триал против платной — кратко:

Триал Платная
Функции Полные (все модули) По купленному тарифу
Срок 7 дней Купленная подписка
Офлайн Нетgrace_days=0, heartbeat обязателен (офлайн не работает; нужен живой чек-ин) grace_days 30–90 (работает офлайн в пределах grace)
На машину Один (ключ — неизменяемый GPU UUID) Привязка к железу развёртывания
Принятие EULA §1a, принимается при установке Заказ-форма + EULA

Публичный ключ верификации зашивается на устройстве как IRIS_LICENSE_PUBKEY_N / IRIS_LICENSE_PUBKEY_E (печатает scripts/gen_vendor_key.py). Проверить весь жизненный цикл без реального развёртывания: scripts/demo_license_e2e.py (платная) и scripts/demo_trial_e2e.py (триал).


4. Шаблоны .env

Только детекция, license-clean appliance (продаётся уже сейчас):

AUTH_REQUIRED=true
MODEL_LICENSE_CLEAN=true          # → RT-DETR (Apache) + DINOv2; без copyleft/research-моделей
BIOMETRICS_ENABLED=false          # только детекция; без лицо/reid/возраст-пол
LICENSE_ENFORCE=true              # применять подписанную лицензию
LICENSE_PATH=data/license.json
LOCAL_AUTH_ENABLED=true           # вход на appliance + RBAC
OFFLINE_MODE=true                 # air-gap (вместе с HF_HUB_OFFLINE=1)

Полная коммерческая (у клиента есть лицензия на face-модель + правовое основание):

MODEL_LICENSE_CLEAN=true
BIOMETRICS_ENABLED=true           # личности на основе лица ВКЛ (ответственность клиента, EULA §4)
LICENSE_ENFORCE=true
TRIAL_AUTO_ENABLED=true           # опционально: 7-дневный авто-триал на первом старте
TRIAL_SERVER_URL=https://lic.example.com

Провижн appliance с коммерческими дефолтами одной командой: EDITION=commercial scripts/provision_appliance.sh (биометрия off, RT-DETR, integrity on, производный ключ, local auth + offline + license enforce; печатает hardware fingerprint для лицензии).


5. Профиль безопасности (дефолты уже fail-closed)

  • auth_required=true; SSO-заголовок личности перекрывает любое значение клиента (анти-спуфинг); api_key сравнивается через hmac.compare_digest.
  • Runtime-контейнер: non-root, cap_drop:[ALL], no-new-privileges, исходники смонтированы read-only; все записи — в data/. Слушает только 127.0.0.1:8120 (nginx терминирует TLS + SSO).
  • RTSP-креды маскируются в каждом ответе API; ffmpeg получает -protocol_whitelist (анти-SSRF); у загрузок — защита от decompression-bomb; пути файлов traversal-contained.
  • Подписи лицензий/integrity — stdlib RSA-PKCS1v15-SHA256; векторы через numpy.frombuffer (никогда pickle). См. SECURITY.md, CODE_PROTECTION.md.

6. Связанное

DEPLOYMENT.md · APPLIANCE_DEPLOYMENT.md · APPLIANCE_HARDENING.md · OFFLINE_RUNBOOK.md · RELEASE_RUNBOOK.md · LICENSE_SERVER_SPEC.md · LICENSING.md · legal/EULA.md