Skip to content

Iris — Кросс-платформа, личный кабинет, активация, биллинг, автообновление

Архитектура того, как Iris продаётся и доставляется клиентам: установка на разных ОС, личный кабинет (лицензии/оплата/активация) и качественное автообновление в течение оплаченного периода (например, €5000/год → год обновлений). Опирается на уже построенный слой лицензирования (app/licensing/, scripts/issue_license.py, docs/LICENSE_SERVER_SPEC.md).


0. Главное ограничение: GPU решает, что такое «кросс-платформа»

Iris — это ИИ на NVIDIA CUDA + Docker. Поэтому «любой может запустить на чём угодно» для GPU-нагрузки нереалистично. Честная матрица:

ОС GPU-путь Статус Как
Linux NVIDIA Container Toolkit ✅ основной Docker + toolkit (как сейчас)
Windows 10/11 WSL2 + Docker Desktop + NVIDIA-драйвер ✅ полноценно CUDA работает в контейнере через WSL2 (production-ready с Docker Desktop 3.1)
macOS нет NVIDIA/CUDA ⚠️ только CPU / eval CPU-режим (деградация ~7 ядер/камеру) или порт под Apple Silicon (ONNX CoreML/MPS — отдельный большой труд)

Вывод: продаём для Linux и Windows (обе — с GPU). macOS — только демо/CPU или «не поддерживается для продакшена». Так и говорим клиентам — это честно и снимает завышенные ожидания.


1. Модель дистрибуции: тонкий нативный агент поверх ОДНОГО контейнерного стека

Не переписываем Iris под каждую ОС. Тяжёлое приложение остаётся тем же Linux-контейнером; кросс-платформенность даёт тонкий «Iris Agent» на каждую ОС:

  • Windows: установщик (.exe/MSI, напр. Inno Setup или Tauri-обёртка) который: проверяет/ставит WSL2 + движок Docker, грузит образ Iris, поднимает compose-стек как службу, открывает локальный веб-UI; живёт в системном трее.
  • Linux: .deb/.rpm или shell-инсталлятор: ставит Docker + NVIDIA toolkit + стек + systemd-сервис.
  • macOS (если решим): CPU-only eval-сборка.

Агент отвечает за: первичную настройку, активацию лицензии (общается с порталом), автообновление, health, открытие браузера на локальный UI. Это и есть кросс-платформенный слой; ядро не меняется.


2. Личный кабинет (наше облако)

Веб-приложение + API (наша инфра). Что даёт клиенту:

  • Аккаунты/организации: регистрация, команда, роли.
  • Тарифы и оплата: подписка (напр. €5000/год). Платёжки: Stripe (международный) + YooKassa / CloudPayments / ЮMoney (РФ). Self-service через Stripe Billing Customer Portal (продление/отмена/счета).
  • Лицензии: при покупке портал выпускает подписанную лицензию (серверный issue_license), привязанную к отпечатку железа клиента, со сроком = конец оплаченного периода и тиром (камеры/модули). Управление активациями: посмотреть/сбросить привязку (перенос на другое железо).
  • Загрузки: установщики под каждую ОС + офлайн-бандлы (sealed-образ + модели) для air-gap.

3. Поток активации (ложится на уже построенное)

1. Клиент оформляет подписку в кабинете → Stripe/YooKassa webhook → провижининг.
2. Кабинет выдаёт короткоживущий activation token.
3. Клиент ставит Agent, вводит token (или логинится).
4. Agent считает hardware fingerprint  →  app/licensing/fingerprint.py  ✅ готово
   и шлёт token + fingerprint в кабинет.
5. Кабинет подписывает лицензию (привязка к fingerprint, expiry, тир) →
   scripts/issue_license.py  ✅ готово
6. Agent кладёт license.json; Iris проверяет (app/licensing) ✅ и применяет enforcement ✅
   (лимит камер + модули, fail-open).
7. Периодический heartbeat (app/licensing/heartbeat.py ✅) → license-server подтверждает,
   что подписка активна; grace-период держит air-gap/обрыв связи.

Зелёным — то, что уже реализовано в кодовой базе. Облачная часть (портал, биллинг, license-server) — то, что нужно построить.


4. Автообновление в течение оплаченного периода (ключевой механизм «€5000/год»)

Не использовать Watchtower — он архивирован (дек. 2025) и не умеет ни подпись, ни откат. Строим небольшой свой updater в составе Agent:

  • Update-server (облако) публикует подписанные релизы: дайджест образа + подпись (Cosign/Sigstore или наш ключ) + changelog + min-version + канал (stable/beta).
  • Updater в Agent:
  • периодически (или на heartbeat) спрашивает update-server о новой версии в канале клиента;
  • гейт по подписке: обновления предлагаются, только пока лицензия/подписка активна — это и есть «оплатил год → год обновлений»;
  • скачивает подписанный артефакт (tar образа или pull из приватного реестра), проверяет подпись;
  • применяет blue-green / backup-and-rollback: оставляет предыдущий образ, health-check нового, авто-откат при сбое (паттерн docker-updater, не Watchtower);
  • поэтапный rollout (canary %) + авто-откат по здоровью.
  • Air-gap: офлайн-бандлы обновлений из кабинета, применяются вручную/USB.

Политика при окончании подписки (важно для системы безопасности — нельзя «окирпичить»): последняя установленная версия продолжает работать, но обновления прекращаются + видимый статус «подписка истекла». Жёсткую остановку не делаем (heartbeat-grace это уже учитывает).


5. Что нужно построить в облаке (бэкенд всего этого)

Сервис Назначение Статус
Портал (web + API) аккаунты, загрузки, управление устройствами ⬜ строить
Биллинг Stripe + РФ-провайдер, webhooks → провижининг лицензии ⬜ строить
License-server выпуск + heartbeat/отзыв 🟡 спека готова (LICENSE_SERVER_SPEC.md), код — ⬜
Update-server каталог подписанных релизов + хостинг артефактов ⬜ строить
Приватный реестр / CDN образ Iris (или подписанные tar)
Ключи подписи лицензии (RSA ✅ есть) + образа (Cosign) 🟡
Telemetry/health (opt-in) поддержка

6. Связка «подписка ↔ лицензия ↔ обновления» (бизнес-механика)

  • Подписка активна → лицензия валидна (expires = конец периода, продлевается webhook’ом при оплате) → heartbeat OK → обновления доступны.
  • Подписка не продлена → лицензия истекает после grace → enforcement (cap/warn) + обновления останавливаются; последняя версия работает. Видимый статус в UI + кабинете.

7. Дорожная карта (поверх готового фундамента)

  • Фаза 0 (готово): примитивы лицензий — отпечаток, sign/verify, heartbeat, enforcement, инструментарий выпуска.
  • Фаза 1: Updater + update-server + подписанные релизы (Linux). Сам механизм автообновления.
  • Фаза 2: Портал + Stripe/РФ-биллинг + авто-выпуск лицензии при оплате.
  • Фаза 3: Windows-установщик (WSL2 + Docker Agent).
  • Фаза 4: Офлайн-бандлы обновлений + управление активациями/сброс устройств.
  • Фаза 5: macOS eval (CPU) — по спросу.

8. Риски и честные ограничения

  • GPU — главный ограничитель. «Любая ОС» для GPU-ИИ нереальна: Linux + Windows(WSL2); macOS — CPU/eval.
  • Лицензии моделей (GA-блокер из docs/LICENSING.md) действуют независимо от дистрибуции — решить ДО коммерческой продажи где угодно.
  • Безопасность обновления системы видеонаблюдения: никогда не «кирпичить» — подпись + health-gated откат + «последняя версия продолжает работать».
  • Это большая облачная/бизнес-стройка (портал + биллинг + update-инфра) — месяцы работы и эксплуатация. Фундамент на стороне устройства уже есть; облачная часть — впереди.

Связано: docs/LICENSE_SERVER_SPEC.md (формат лицензии + heartbeat), docs/APPLIANCE_DEPLOYMENT.md, docs/PRICING.md, scripts/issue_license.py / gen_vendor_key.py, app/licensing/.