Перейти к основному содержимому
Версия: 1.17.0 (последняя)

Инструкция по установке

Подготовка окружения

Скачивание дистрибутива

Скачайте и распакуйте дистрибутив BAF на машину, где планируется выполнить установку. Для этого можно воспользоваться командой:

$ curl --output baf.zip ссылка на дистрибутив

В curl-запросе укажите ссылку на дистрибутив BAF (zip-файл). Ссылка на папку, в которой размещен дистрибутив, и сопроводительная документация в формате pdf придут в электронном письме.

Далее переместите файл лицензии face_sdk.lic (файл прикреплен к электронному письму) в папку setup.

примечание

Убедитесь, что файл с лицензией называется именно face_sdk.lic. Использование другого имени приведет к ошибкам генерации секретов.

Комплект установки BAF:

  • ./cli.sh — точка входа для запуска команд.
  • ./cfg — папка с файлами конфигурации.

Дальнейшие команды выполняются в системной консоли из директории setup.

Загрузка образов

Загрузите в локальный registry продуктовые образы из архива:

$ ./cli.sh generic load-images

Загрузите в локальный registry инфраструктурные образы из архива:

 $ ./cli.sh smc load-images

Конфигурация BAF

Базовая конфигурация

Ввод переменных окружения

Глобально переменные окружения можно разделить на три категории:

  • Переменные окружения системных элементов, не связанных с Helm-чартами;
  • Публичные переменные окружения чарта модуля;
  • Секретные переменные окружения чарта модуля.

Первая категория использует формат <имя_переменной>=<значение> и представлена следующими файлами:

Файл конфигурацииИмя переменнойОписание
./cfg/smc.settings.cfgapiserver_advertise_addressадрес для kube-apiserver, обычно используется внутренний IP-адрес машины.
external_ip_addressадрес для ingess-controller, необходимо указать внешний IP-адрес машины.
./cfg/license-server.settings.cfglicense_keyлицензионный ключ. Как правило, ключ отправляется в сопроводительном письме с дистрибутивом. При отсутствии ключа обратитесь к вашему менеджеру по продажам.
license_server_addressадрес лицензионного сервера.

Вторая категория использует YAML-формат. Эти настройки впоследствии применяются непосредственно при установке чартов как внешние values для переопределения внутренних значений Helm-чарта. Каждый чарт имеет полный стандартный набор переменных окружения. В файлы внешних values включаются только те переменные, которые требуется изменить.

Для изменения большинства переменных окружения предусмотрен гибкий механизм, позволяющий передавать YAML-объекты напрямую в итоговый шаблон развёртывания. Для сервисов, поддерживающих такую настройку, используется поле envOverride. В этом поле в формате YAML-словаря ключом выступает имя переменной, а значением — YAML-объект, который будет подставлен в итоговый шаблон в качестве переменной окружения сервиса.

Пример:

envOverride:
NO_EMAIL_CHECK_ON_REGISTRATION:
value: 'true'
осторожно

Значения переменных всегда должны быть строковыми. В противном случае при развёртывании возникнет ошибка.

Гибкая возможность кастомизации переменных окружения представлена в следующих файлах:

Файл конфигурацииРаздел конфигурацииНазвание переменнойЗначение по умолчаниюОписание
./cfg/video-recorder.values.yamlvideo_recorderUVICORN_CONCURRENCYvalue: '30'количество одновременно обрабатываемых http-соединений для каждой поды. После превышения лимита будет возвращаться ошибка 503.
SQLALCHEMY_POOL_SIZEvalue: '20'максимальное количество персистентных соединений, которые будет держать пул sql alchemy для каждой поды.
SQLALCHEMY_POOL_OVERFLOWvalue: '10'количество соединений сверху персистетного количества, которые будут закрыты после использования для каждой поды.
RETENTION_BATCH_SIZEvalue: '83'размер пакета видео-контента попыток, который будет удален за один раз.
RETENTION_BATCH_PAUSEvalue: '4'время в секундах между удалениями пакетов.
RETENTION_CHECK_FREQUENCYvalue: '3600'частота запуска проверки очистки в секундах.
minioS3_ERROR_DATA_RETENTION_DAYSvalue: '3'период хранения ошибочных данных в днях в хранилище объектов.
MINIO_API_DELETE_CLEANUP_INTERVALvalue: '30s'интервал, в котором minio удаляет объекты из корзины.
S3_BUCKETS_PREFIXvalue: 'vr'префикс, который ставится перед всеми именами бакетов в подобном формате: <prefix>.<bucket name>
./cfg/platform.values.yamlbackendQUERY_LIMITvalue: '100'ограничение количества возвращаемых элементов в API-запросах для получения сущностей системы. Увеличение данного лимита не рекомендуется, т.к. время выполнения API-запроса может увеличиться в несколько раз. Также обратите внимание, что увеличение лимитов приведет к ухудшению работы системы.
INDEX_UPDATE_PERIODvalue: '60'значение в секундах, описывающее через какое время добавленный профиль появится в поисковом индексе. По умолчанию установлено значение 60 секунд. Если требуется увеличить скорость обновления поискового индекса, следует уменьшить значение. Значение влияет на скорость авторизации после регистрации.
PLANNED_RETENTION_POLICY_DAY_OF_WEEKvalue: '*'день недели в формате cron, когда будет запущена периодическая проверка задачи очистки.
PLANNED_RETENTION_POLICY_HOURvalue: '*'час в формате cron, когда будет запущена периодическая проверка задачи очистки.
PLANNED_RETENTION_POLICY_MINUTEvalue: '59'минута в формате cron, когда будет запущена периодическая проверка задачи очистки.
DELETE_SAMPLE_BATCH_SIZEvalue: '1000'размер пакета кадров попытки, который будет удален за один раз.
DELETE_SAMPLE_BATCH_SLEEPvalue: '0'время в секундах между удалениями батчей.
SAMPLE_TTLvalue: '315360000'время в секундах, после которого кадры попытки будут удалены.
matcherMATCHER_SEMAPHORE_SIZEvalue: '1'интерфейсный параметр, регулирует количество одновременных обращений к matcher-serivice. Должен быть равен параметру shard.quantity в файле matcher.values.yaml
./cfg/matcher.values.yamlshardSEARCH_THREADS_Nvalue: '1'количество используемых потоков для выполнения поиска.
./cfg/baf.values.yamlbafPOOL_SIZEvalue: '100'размер пула соединений. Возможно потребуется увеличить значение, если ожидается высокая нагрузка на сервисы BAF.
./cfg/report.values.yamlreportREPORT_PROCESS_COUNTvalue: '5'количество процессов построения отчетов. Чем больше процессов, тем больше отчетов может строиться одновременно.

Также существуют классические переменные, которые подставляются в шаблон по значению. Это связано либо со сложной логикой их использования в чартах, либо с отсутствием необходимости в глубокой кастомизации.

примечание

Значения, записанные через точку в YAML-файлах, обозначают структуру вложенности.

Список файлов с классическими переменными:

Файл конфигурацииПуть переменнойОписание
./cfg/platform.values.yamlingress.enableустановите значение параметра 1, чтобы предоставить внешний доступ к модулю OMNI Platform через ingress ресурс. Ingress будет использовать домен из параметра ingress.rules.gateway.host.
ingress.rules.gateway.hostдоменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для OMNI Platform.
postgres.enableвыключите, если используете свой сервер базы данных. Примечание. Необходимо поменять значения для postgres-root-credentials в файле ./cfg/platform.secrets.json и значения для postgres.host и postgres.port в текущем файле.
minio.enableобозначает, что для хранения изображений из событий будет использоваться объектное хранилище. Если выключить этот параметр, для хранения изображений будет использоваться postgres. Примечание. Если после первого развертывания уже накопилось какое-то количество изображений, то выключать данный параметр не рекомендуется, иначе будет невозможно получить накопленные данные. При развертывании в AWS необходимо отключить этот параметр.
backend.retention_workers_countколичество процессов, выполняющих очистку кадров попытки.
./cfg/matcher.values.yamlshard.quantityколичество создаваемых шардов, увеличение параметра позволяет ускорять поиск на больших данных
./cfg/baf.values.yamlingress.rules.gateway.hostдоменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для BAF.
gateway.dns_resolverдоменное имя DNS сервера, который будет использоватся для резолва имён сервисов kubernetes.
gateway.dns_validity_timeвремя после которого будет происходить перезолв доменного имени сервиса..
./cfg/platform-ui.values.yamlingress.hostдоменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes. Значение должно совпадать со значением ingress.rules.gateway.host в файле ./cfg/platform.values.yaml.
./cfg/video-recorder.values.yamlminio.enableвыключите, если используете свой сервер minio. Примечание: необходимо поменять значения для video-recorder-minio в файле ./cfg/video_recorder.secrets.json и значения для minio.host, minio.port и minio.secure (1 для https, 0 для http) в текущем файле.
video_recorder.decoding_enabledесли вам не нужно декодирование видео, установите 0.
video_recorder.decoding_process_countколичество процессов декодирования, запускаемых в одной реплике сервиса. Чем больше процессов, тем больше одновременных сессий декодирования видео будет обрабатывать сервис.
video_recorder.retention_workers_countколичество процессов, выполняющих очистку видео-контента попыток.
./cfg/util-services.values.yamlingress.rules.gateway.hostдолжен быть равен домену ingress в файле ./cfg/baf.values.yaml
./cfg/image-api.values.jsonprocessing.enable_ingressустановите значение параметра 1, чтобы предоставить внешний доступ к модулю image-api через ingress ресурс. Ingress будет использовать домен из параметра ingress.host.
ingress.hostдоменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для модуля image-api.

Третья категория хранится в JSON-файлах и используется скриптами поставки для создания секретов внутри кластера Kubernetes. Если требуется использовать собственные секреты, необходимо добавить в envOverride (в файле values.yaml соответствующего модуля) переменную с именем переменной, которая связана с секретом, и описать в ней корректный YAML для получения данных из вашего секрета.

Список файлов секретов и их переменных окружения:

Файл конфигурацииНазвание секретаОписание секретаПоле в секрете(Название файла values.yaml)Раздел\Название переменной окружения
./cfg/platform.secrets.jsonlicense-secretлицензионный ключ и адрес лицензионного сервера.server_urllicensing\LIC_SERVER_URL
keylicensing\LIC_KEY
rabbit-secretимя пользователя и пароль для доступа к брокеру сообщений, используется для внутреннего взаимодействия сервисов OMNI Platform. Задайте произвольное имя, состоящее из латинских букв, без пробелов и пароль, состоящий из латинских букв и цифр, без пробелов.rabbit_userrabbitmq\RABBITMQ_DEFAULT_USER
rabbit_passwordrabbitmq\RABBITMQ_DEFAULT_PASS
postgres-root-credentialsимя пользователя и пароль для root пользователя в базе данных.user
  • postgres\POSTGRES_USER
  • (report.values.yaml) postgres\PGUSER
  • (video-recorder.values.yaml) postgres\PGUSER
  • (baf.values.yaml) postgres\PGUSER
password
  • postgres\POSTGRES_PASSWORD
  • (report.values.yaml) postgres\PGPASSWORD
  • (video-recorder.values.yaml) postgres\PGPASSWORD
  • (baf.values.yaml) postgres\PGPASSWORD
platform-service-keyсекретный ключ для внутреннего взаимодействия сервисов OMNI Platformservice_key
  • backend\SERVICE_KEY
  • (baf.values.yaml) baf\Services__Key
  • (video-recorder.values.yaml) video_recorder\SERVICE_KEY
  • (report.values.yaml) report\SERVICE_KEY
platform-user-secretучетные данные (адрес электронной почты и пароль), которые будут использоваться для доступа в OMNI Platform. При первом развертывании пользователи будут созданы автоматически. Указываемый адрес электронной почты должен состоять из цифр, латинских букв и символов. Пользователь admin обладает правами администратора системы. Пользователь default может быть использован для непривилегированного доступа к системе.admin_emailbackend\PLATFORM_ADMIN_EMAIL
admin_passwordbackend\PLATFORM_ADMIN_PASSWORD
default_emailbackend\PLATFORM_DEFAULT_EMAIL
default_passwordbackend\PLATFORM_DEFAULT_PASSWORD
platform-email-secretпараметры SMTP-сервера. Чтобы отключить отправку писем, оставьте поля пустыми.email_hostbackend\EMAIL_HOST
email_portbackend\EMAIL_PORT
email_frombackend\EMAIL_FROM
email_host_userbackend\EMAIL_HOST_USER
email_host_passwordbackend\EMAIL_HOST_PASSWORD
email_use_sslbackend\EMAIL_USE_SSL
minio-credentialsимя пользователя и пароль для root пользователя в объектном хранилище.root-userevent_service\S3_ACCESS_KEY
root-passwordevent_service\S3_SECRET_KEY
storage-engine-postgresимя пользователя, пароль и имя базы данных для platform.userbackend\POSTGRES_USER
passwordbackend\POSTGRES_PASSWORD
dbbackend\POSTGRES_DB
event-service-postgresимя пользователя, пароль и имя базы данных для event-service.userevent_service\POSTGRES_USER
passwordevent_service\POSTGRES_PASSWORD
dbevent_service\POSTGRES_DB
./cfg/baf.secrets.jsonbaf-postgresданные для подключения к базе.user
  • baf\DB_USER
  • (report.values.yaml)report\POSTGRES_USER_BAF
  • (util-services.values.yaml)client_log\POSTGRES_USER_BAF
password
  • baf\DB_PASSWORD
  • (report.values.yaml)report\POSTGRES_PASSWORD_BAF
  • (util-services.values.yaml)client_log\POSTGRES_PASSWORD_BAF
db
  • baf\DB_NAME
  • (report.values.yaml)report\POSTGRES_DB_BAF
  • (util-services.values.yaml)client_log\POSTGRES_DB_BAF
baf-email-secretданные для подключения к SMTP серверу.hostbackend\Email__Host
portbackend\Email__Port
frombackend\Email__From
host_userbackend\Email__User
host_passwordbackend\Email__Password
use_sslbackend\Email__UseSsl
./cfg/video-recorder.secrets.jsonvideo-recorder-tokensтокен доступа и токен шифрования. ВНИМАНИЕ! Поля video-recorder-tokens заполняются во время установки.access_tokenvideo_recorder\TOKEN
fernet_keyvideo_recorder\FERNET_KEY
video-recorder-postgresданные для подключения к базе.uservideo_recorder\POSTGRES_USER
passwordvideo_recorder\POSTGRES_PASSWORD
dbvideo_recorder\POSTGRES_DB
video-recorder-minioданные для подключения к базе.userminio\MINIO_ROOT_USER
passwordminio \ MINIO_ROOT_PASSWORD

Обновление конфигурации работающего инстанса

Для применения обновлений в values модуля необходимо выполнить команду установки модуля. Если обновление не применилось, сначала удалите модуль, а затем установите его заново.

Для применения обновления ресурсов модуля (всего, что требует отдельной команды установки, например, секретов) выполните команду установки ресурса модуля и перезапустите поды модуля с помощью инструментов Kubernetes, чтобы они применили изменения.

Расширенная конфигурация (опционально)

Настройка Docker для использования GPU

Для установки nvidia-container-runtime в качестве низкоуровневой среды выполнения по умолчанию выполните следующую команду:

./cli.sh smc nvidia install
Настройка использовая GPU в BAF

Чтобы включить GPU в BAF, необходимо переопределить переменную CONFIGS для сервиса face-detector-template-extractor. Это делается в файле ./cfg/image-api.values.yaml.

В раздел processing.services добавьте следующий YAML-объект:

face-detector-template-extractor:
envOverride:
CONFIGS:
value: '{"capturer": {"name": "common_capturer_uld_fda.xml", "params": {"use_avx2": 0, "downscale_rawsamples_to_preferred_size": 0}}, "recognizer": {"name": "method12v1000_recognizer.xml", "params": {"use_avx2": 0, "use_cuda": 1}}}'

Установка и настройка кластера

примечание

Если у вас уже есть развернутый кластер, перейдите к пункту «Настройка лицензирования».

Запустите команды для создания и настройки кластера:

./cli.sh smc system-patch
./cli.sh smc install
./cli.sh platform db-create-mountpoint
./cli.sh platform install-secrets

Эти команды выполняют следующие действия:

  • Создание точки монтирования базы данных
  • Инициализация кластера
  • Установка секретов

Если вы используете GPU, дополнительно запустите скрипт по установке nvidia-plugin в кластер:

$ ./cli.sh smc nvidia install

Проверка работоспособности кластера

После инициализации главного узла убедитесь, что все узлы готовы к работе и имеют статус Ready. Для проверки выполните следующую команду:

$ kubectl get nodes

В результате в терминале будет отображен следующий вывод:

NAME          STATUS      ROLES                   AGE     VERSION
master-node Ready control-plane,master 11d v1.23.8

Для проверки всех элементов кластера запустите следующую команду:

$ kubectl get all --all-namespaces

Настройка лицензирования

Пользователю доступны 3 варианта активации лицензии: активация пробного периода, онлайн и офлайн активация лицензии.

Установка и запуск сервера лицензий

Перед установкой откройте файл license-server.settings.cfg и задайте IP адрес машины, на которой будет установлен сервер лицензий, в переменной license_server_address.

Запустите команду для установки и запуска сервера лицензий. Если license_server_address не аналогичен адресу хоста машины, где происходит развертывание, он будет установлен через sshpass:

$ ./cli.sh license-server install

Проверьте, что сервер лицензий находится в статусе Running, выполнив следующую команду:

$ ./cli.sh license-server status

Пример вывода в консоль:

floatingserver.service - Floating License Server
Loaded: loaded (/etc/systemd/system/floatingserver.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-12-20 12:25:54 +05; 1min 48s ago

Убедитесь, что сервер лицензий доступен. Для этого перейдите по адресу http://<license_server_address>:8090 в вашем браузере, на странице должна отобразиться форма входа.

Активация пробного периода

Важно:

  • Требуется подключение к интернету.
  • Не допускается запуск на виртуальной машине.

Активация пробного периода происходит при первом запуске BAF.

Онлайн активация лицензии

Перед активацией убедитесь, что в key (файл ./cfg/license-server.settings.cfg) записан лицензионный ключ.

Запустите команду активации лицензии:

$ ./cli.sh license-server activate

Пример вывода в консоль при успешной активации лицензии:

[2022-12-20 12:25:53+05:00] INF Activating license key...
[2022-12-20 12:25:54+05:00] INF License activated successfully!

Офлайн активация лицензии

Перед активацией убедитесь, что в поле license_key (в файле ./cfg/license-server.settings.cfg) записан лицензионный ключ.

примечание

Для офлайн активации установите “1” в поле enable_offline_activation в файле license-server.settings.cfg.

Запустите команду для генерации офлайн запроса на лицензию:

$ ./cli.sh license-server generate-offline

В результате выполнения команды в директории setup должен появиться файл request-offline.dat.

Отправьте сгенерированный файл запроса request-offline.license на почту baf-request@3divi.com. В ответном письме будет отправлен файл лицензии.

Поместите полученный лицензионный файл в папку setup.

Откройте файл конфигурации license-server.settings.cfg и заполните значение переменной license_offline_activation_file именем файла лицензии и его расширением, если присутствует, через точку.

Запустите команду для активации полученной лицензии:

$ ./cli.sh license-server activate

Пример вывода в консоль при успешной активации лицензии:

[2022-09-08 01:30:36+05:00] INF Offline activating license key...
[2022-09-08 01:30:36+05:00] INF License activated successfully!

Развертывание BAF

Запуск развертывания

Установка подсистемы распознавания лиц (OMNI Platform)

Запустите установку первого модуля OMNI Platform:

$ ./cli.sh image-api install

Запустите установку матчера (matcher-router + matcher-shard):

./cli.sh matcher install

Запустите установку второго модуля OMNI Platform:

$ ./cli.sh platform install

При необходимости запустите установку веб-интерфейса OMNI Platform:

./cli.sh platform-ui install
примечание

Для работы модуля platform-ui включите ingress модуль OMNI Platform (параметр ingress.enable внутри файла ./platform.values.yaml).

Чтобы продолжить установку, откройте файл /etc/hosts и добавьте в конец файла следующие строки:

<external_ip_address> : <platform_domain>
<external_ip_address> : <baf_domain>

Установка подсистемы для записи видео Video Recorder (VR) (опционально)

осторожно

Если вы обновляетесь с версии 1.12.0, убедитесь, что паттерны контроля движений перенесены в настройки новой версии, если это необходимо.

Если этого не сделать перед установкой новой версии video-recorder, данные паттернов будут безвозвратно утеряны.

Для подробной информации смотрите раздел Инструкция по обновлению.

Если вам не требуется запись видео, пропустите этот шаг

В сценарии «Регистрация по селфи» Video Recorder предоставляет возможность сохранять видео попыток и проводить контроль движений.

Создайте директорию для хранения данных объектного хранилища с помощью команды:

$ ./cli.sh video-recorder minio-create-mountpoint

Запустите команду для генерации токенов Video Recorder:

$ ./cli.sh video-recorder generate-token

Пример вывода в консоль:

sha256:2473ba0ebf5ef66cd68b252bba7b46ae9f7cc3657b5acd3979beb7fbc5d8807f
Fernet key: ......
Access token: ......

В результате вы получите два токена, которые необходимо прописать в файл конфигурации ./cfg/video-recorder.secrets.json в раздел video-recorder-tokens.

Запустите команду для установки секретов Video Recorder:

$ ./cli.sh video-recorder install-secrets

Запустите команду для установки Video Recorder:

$ ./cli.sh video-recorder install

Установка BAF

примечание

В версии 1.13.0 обновлен механизм паттернов. Для переноса паттернов между версиями обратитесь к разделу обновления.

Запустите команду для установки секретов BAF для кластера:

$ ./cli.sh baf install-secrets

Запустите установку BAF:

$ ./cli.sh baf install

Для отслеживания процесса развертывания откройте еще одну вкладку терминала и введите следующую команду:

$ watch 'kubectl get pods'

Наличие у всех pods статуса Running означает, что BAF запущен.

осторожно

Для того чтобы использовать систему, необходимо создать пользователя. Информацию о создании пользователя можно посмотреть в разделе Инструкция по управлению пользователями

Установка подсистемы для построения отчетов Report Service (RS) (опционально)

Подсистема RS необходима для создания отчетов с метриками работы системы. Если вам не требуется функциональность отчетов, этот шаг можно пропустить.

Запустите команду для установки Report Service:

$ ./cli.sh report install

Установка подсистемы инструментальных сервисов Util Services (US) (опционально)

Подсистема US необходима для работы необязательных, но полезных сервисов для отладки работы BAF.

Для установки Util Services запустите команду:

$ ./cli.sh util-services install

Настройка DNS

Для доступа к BAF DNS сервер вашей сети должен содержать запись о том, что домен доступен по адресу <external_ip_address>.

Для тестирования можно указать IP-адрес и домен в файле /etc/hosts на Linux или C:\Windows\System32\drivers\etc\hosts на Windows. Для этого добавьте в конец файла новую строку вида <external_ip_address> <host>, подставив значения соответствующих переменных, и сохраните файл.

Обратите внимание, что для редактирования файла hosts необходимо обладать правами администратора.