Инструкция по установке
Подготовка окружения
Скачивание дистрибутива
Скачайте и распакуйте дистрибутив 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.cfg | apiserver_advertise_address | адрес для kube-apiserver, обычно используется внутренний IP-адрес машины. |
| external_ip_address | адрес для ingess-controller, необходимо указать внешний IP-адрес машины. | |
| ./cfg/license-server.settings.cfg | license_key | лицензионный ключ. Как правило, ключ отправляется в сопроводительном письме с дистрибутивом. При отсутствии ключа обратитесь к вашему менеджеру по продажам. |
| license_server_address | адрес лицензионного сервера. |
Вторая категория использует YAML-формат. Эти настройки впоследствии применяются непосредственно при установке чартов как внешние values для переопределения внутренних значений Helm-чарта. Каждый чарт имеет полный стандартный набор переменных окружения. В файлы внешних values включаются только те переменные, которые требуется изменить.
Для изменения большинства переменных окружения предусмотрен гибкий механизм, позволяющий передавать YAML-объекты напрямую в итоговый шаблон развёртывания.
Для сервисов, поддерживающих такую настройку, используется поле envOverride. В этом поле в формате YAML-словаря ключом выступает имя переменной, а значением — YAML-объект, который будет подставлен в итоговый шаблон в качестве переменной окружения сервиса.
Пример:
envOverride:
NO_EMAIL_CHECK_ON_REGISTRATION:
value: 'true'
Значения переменных всегда должны быть строковыми. В противном случае при развёртывании возникнет ошибка.
Гибкая возможность кастомизации переменных окружения представлена в следующих файлах:
| Файл конфигурации | Раздел конфигурации | Название переменной | Значение по умолчанию | Описание |
| ./cfg/video-recorder.values.yaml | video_recorder | UVICORN_CONCURRENCY | value: '30' | количество одновременно обрабатываемых http-соединений для каждой поды. После превышения лимита будет возвращаться ошибка 503. |
| SQLALCHEMY_POOL_SIZE | value: '20' | максимальное количество персистентных соединений, которые будет держать пул sql alchemy для каждой поды. | ||
| SQLALCHEMY_POOL_OVERFLOW | value: '10' | количество соединений сверху персистетного количества, которые будут закрыты после использования для каждой поды. | ||
| RETENTION_BATCH_SIZE | value: '83' | размер пакета видео-контента попыток, который будет удален за один раз. | ||
| RETENTION_BATCH_PAUSE | value: '4' | время в секундах между удалениями пакетов. | ||
| RETENTION_CHECK_FREQUENCY | value: '3600' | частота запуска проверки очистки в секундах. | ||
| minio | S3_ERROR_DATA_RETENTION_DAYS | value: '3' | период хранения ошибочных данных в днях в хранилище объектов. | |
| MINIO_API_DELETE_CLEANUP_INTERVAL | value: '30s' | интервал, в котором minio удаляет объекты из корзины. | ||
| S3_BUCKETS_PREFIX | value: 'vr' | префикс, который ставится перед всеми именами бакетов в подобном формате: <prefix>.<bucket name> | ||
| ./cfg/platform.values.yaml | backend | QUERY_LIMIT | value: '100' | ограничение количества возвращаемых элементов в API-запросах для получения сущностей системы. Увеличение данного лимита не рекомендуется, т.к. время выполнения API-запроса может увеличиться в несколько раз. Также обратите внимание, что увеличение лимитов приведет к ухудшению работы системы. |
| INDEX_UPDATE_PERIOD | value: '60' | значение в секундах, описывающее через какое время добавленный профиль появится в поисковом индексе. По умолчанию установлено значение 60 секунд. Если требуется увеличить скорость обновления поискового индекса, следует уменьшить значение. Значение влияет на скорость авторизации после регистрации. | ||
| PLANNED_RETENTION_POLICY_DAY_OF_WEEK | value: '*' | день недели в формате cron, когда будет запущена периодическая проверка задачи очистки. | ||
| PLANNED_RETENTION_POLICY_HOUR | value: '*' | час в формате cron, когда будет запущена периодическая проверка задачи очистки. | ||
| PLANNED_RETENTION_POLICY_MINUTE | value: '59' | минута в формате cron, когда будет запущена периодическая проверка задачи очистки. | ||
| DELETE_SAMPLE_BATCH_SIZE | value: '1000' | размер пакета кадров попытки, который будет удален за один раз. | ||
| DELETE_SAMPLE_BATCH_SLEEP | value: '0' | время в секундах между удалениями батчей. | ||
| SAMPLE_TTL | value: '315360000' | время в секундах, после которого кадры попытки будут удалены. | ||
| matcher | MATCHER_SEMAPHORE_SIZE | value: '1' | интерфейсный параметр, регулирует количество одновременных обращений к matcher-serivice. Должен быть равен параметру shard.quantity в файле matcher.values.yaml | |
| ./cfg/matcher.values.yaml | shard | SEARCH_THREADS_N | value: '1' | количество используемых потоков для выполнения поиска. |
| ./cfg/baf.values.yaml | baf | POOL_SIZE | value: '100' | размер пула соединений. Возможно потребуется увеличить значение, если ожидается высокая нагрузка на сервисы BAF. |
| ./cfg/report.values.yaml | report | REPORT_PROCESS_COUNT | value: '5' | количество процессов построения отчетов. Чем больше процессов, тем больше отчетов может строиться одновременно. |
Также существуют классические переменные, которые подставляются в шаблон по значению. Это связано либо со сложной логикой их использования в чартах, либо с отсутствием необходимости в глубокой кастомизации.
Значения, записанные через точку в YAML-файлах, обозначают структуру вложенности.
Список файлов с классическими переменными:
| Файл конфигурации | Путь переменной | Описание |
| ./cfg/platform.values.yaml | ingress.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.yaml | shard.quantity | количество создаваемых шардов, увеличение параметра позволяет ускорять поиск на больших данных |
| ./cfg/baf.values.yaml | ingress.rules.gateway.host | доменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes для BAF. |
| gateway.dns_resolver | доменное имя DNS сервера, который будет использоватся для резолва имён сервисов kubernetes. | |
| gateway.dns_validity_time | время после которого будет происходить перезолв доменного имени сервиса.. | |
| ./cfg/platform-ui.values.yaml | ingress.host | доменное имя, используется в ingress для маршрутизации запросов на сервисы Kubernetes. Значение должно совпадать со значением ingress.rules.gateway.host в файле ./cfg/platform.values.yaml. |
| ./cfg/video-recorder.values.yaml | minio.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.yaml | ingress.rules.gateway.host | должен быть равен домену ingress в файле ./cfg/baf.values.yaml |
| ./cfg/image-api.values.json | processing.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.json | license-secret | лицензионный ключ и адрес лицензионного сервера. | server_url | licensing\LIC_SERVER_URL |
| key | licensing\LIC_KEY | |||
| rabbit-secret | имя пользователя и пароль для доступа к брокеру сообщений, используется для внутреннего взаимодействия сервисов OMNI Platform. Задайте произвольное имя, состоящее из латинских букв, без пробелов и пароль, состоящий из латинских букв и цифр, без пробелов. | rabbit_user | rabbitmq\RABBITMQ_DEFAULT_USER | |
| rabbit_password | rabbitmq\RABBITMQ_DEFAULT_PASS | |||
| postgres-root-credentials | имя пользователя и пароль для root пользователя в базе данных. | user |
| |
| password |
| |||
| platform-service-key | секретный ключ для внутреннего взаимодействия сервисов OMNI Platform | service_key |
| |
| platform-user-secret | учетные данные (адрес электронной почты и пароль), которые будут использоваться для доступа в OMNI Platform. При первом развертывании пользователи будут созданы автоматически. Указываемый адрес электронной почты должен состоять из цифр, латинских букв и символов. Пользователь admin обладает правами администратора системы. Пользователь default может быть использован для непривилегированного доступа к системе. | admin_email | backend\PLATFORM_ADMIN_EMAIL | |
| admin_password | backend\PLATFORM_ADMIN_PASSWORD | |||
| default_email | backend\PLATFORM_DEFAULT_EMAIL | |||
| default_password | backend\PLATFORM_DEFAULT_PASSWORD | |||
| platform-email-secret | параметры SMTP-сервера. Чтобы отключить отправку писем, оставьте поля пустыми. | email_host | backend\EMAIL_HOST | |
| email_port | backend\EMAIL_PORT | |||
| email_from | backend\EMAIL_FROM | |||
| email_host_user | backend\EMAIL_HOST_USER | |||
| email_host_password | backend\EMAIL_HOST_PASSWORD | |||
| email_use_ssl | backend\EMAIL_USE_SSL | |||
| minio-credentials | имя пользователя и пароль для root пользователя в объектном хранилище. | root-user | event_service\S3_ACCESS_KEY | |
| root-password | event_service\S3_SECRET_KEY | |||
| storage-engine-postgres | имя пользователя, пароль и имя базы данных для platform. | user | backend\POSTGRES_USER | |
| password | backend\POSTGRES_PASSWORD | |||
| db | backend\POSTGRES_DB | |||
| event-service-postgres | имя пользователя, пароль и имя базы данных для event-service. | user | event_service\POSTGRES_USER | |
| password | event_service\POSTGRES_PASSWORD | |||
| db | event_service\POSTGRES_DB | |||
| ./cfg/baf.secrets.json | baf-postgres | данные для подключения к базе. | user |
|
| password |
| |||
| db |
| |||
| baf-email-secret | данные для подключения к SMTP серверу. | host | backend\Email__Host | |
| port | backend\Email__Port | |||
| from | backend\Email__From | |||
| host_user | backend\Email__User | |||
| host_password | backend\Email__Password | |||
| use_ssl | backend\Email__UseSsl | |||
| ./cfg/video-recorder.secrets.json | video-recorder-tokens | токен доступа и токен шифрования. ВНИМАНИЕ! Поля video-recorder-tokens заполняются во время установки. | access_token | video_recorder\TOKEN |
| fernet_key | video_recorder\FERNET_KEY | |||
| video-recorder-postgres | данные для подключения к базе. | user | video_recorder\POSTGRES_USER | |
| password | video_recorder\POSTGRES_PASSWORD | |||
| db | video_recorder\POSTGRES_DB | |||
| video-recorder-minio | данные для подключения к базе. | user | minio\MINIO_ROOT_USER | |
| password | minio \ 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 необходимо обладать правами администратора.