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

Запуск сервисов#

В данном разделе приведены примеры:

  • Миграции таблиц баз данных
  • Создания бакетов
  • Запуска контейнеров

Сервисы LUNA PLATFORM должны запускаться в следующем порядке:

Далее необходимо запустить сервис Backport 4 и его пользовательский интерфейс:

Рекомендуется запускать контейнеры один за другим и ожидать отображения статуса контейнера "up" (команда docker ps).

Некоторые из этих сервисов не являются обязательными к запуску и можно отключить их использование. Рекомендуется использовать сервисы Events, Tasks, Sender и Admin по умолчанию. См. раздел "Использование необязательных сервисов" для более подробной информации.

При запуске каждого сервиса используются определенные параметры, например, --detach, --network и др. См. раздел "Описание параметров запуска" для получения более подробной информации о всех параметрах запуска сервисов LUNA PLATFORM и баз данных.

См. раздел "Команды Docker" для получения более подробной информации о работе с контейнерами.

Сторонние сервисы#

В данном разделе описывается запуск баз данных в Docker-контейнерах. Они должны быть запущены перед сервисами LP.

InfluxDB#

Для мониторинга сервисов LUNA PLATFORM требуется наличие запущенной базы данных Influx 2.0.8-alpine. Ниже приведены команды по запуску контейнера InfluxDB.

Дополнительную информацию см. в разделе "Мониторинг" в руководстве администратора.

При необходимости можно настроить визуализацию данных мониторинга с помощью сервиса LUNA Dashboards, включающего в себя настроенную систему визуализации данных Grafana. Кроме того, можно запустить инструмент для расширенной работы с логами Grafana Loki. См. инструкцию по запуску LUNA Dashboards и Grafana Loki в разделе "Визуализация мониторинга и логов с помощью Grafana".

Примечание. При необходимости можно использовать внешнюю БД InfluxDB 2.0.8-alpine. В таком случае можно пропустить команду ниже, однако вам придется задать пользовательские настройки для каждого сервиса LUNA PLATFORM.

Используйте команду docker run со следующими параметрами:

docker run \
-e DOCKER_INFLUXDB_INIT_MODE=setup \
-e DOCKER_INFLUXDB_INIT_BUCKET=luna_monitoring \
-e DOCKER_INFLUXDB_INIT_USERNAME=luna \
-e DOCKER_INFLUXDB_INIT_PASSWORD=password \
-e DOCKER_INFLUXDB_INIT_ORG=luna \
-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=kofqt4Pfqjn6o0RBtMDQqVoJLgHoxxDUmmhiAZ7JS6VmEnrqZXQhxDhad8AX9tmiJH6CjM7Y1U8p5eSEocGzIA== \
-v /etc/localtime:/etc/localtime:ro \
-v /var/lib/luna/influx:/var/lib/influxdb2 \
--restart=always \
--detach=true \
--network=host \
--name influxdb \
dockerhub.visionlabs.ru/luna/influxdb:2.0.8-alpine

PostgreSQL#

Миграция с PostgreSQL 9.6 на PostgreSQL 16#

В LUNA PLATFORM 5 обновился образ VisionLabs для PostgreSQL с 9.6 версии на 16 версию.

Если ранее использовался данный образ, то необходимо самостоятельно выполнить миграцию согласно официальной документации. При необходимости можно продолжить использовать PostgreSQL 9.6.

Монтирование данных PostgreSQL 9.6 в контейнер для PostgreSQL 16 приведет к ошибке.

Запуск контейнера PostgreSQL#

Используйте следующую команду для запуска PostgreSQL.

Убедитесь, что старая PostgreSQL удалена.

docker run \
--env=POSTGRES_USER=luna \
--env=POSTGRES_PASSWORD=luna \
--shm-size=1g \
-v /var/lib/luna/postgresql/data/:/var/lib/postgresql/data/ \
-v /var/lib/luna/current/example-docker/postgresql/entrypoint-initdb.d/:/docker-entrypoint-initdb.d/ \
-v /etc/localtime:/etc/localtime:ro \
--name=postgres \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/postgis-vlmatch:16

-v /var/lib/luna/current/example-docker/postgresql/entrypoint-initdb.d/:/docker-entrypoint-initdb.d/ \ — скрипт "docker-entrypoint-initdb.d" включает в себя команды для создания баз данных сервисов.

-v /var/lib/luna/current/example-docker/postgresql/data/:/var/lib/postgresql/data/ — эта команда позволяет монтировать директорию "data" в контейнер PostgreSQL. Директория на сервере и директория в контейнере будут синхронизированы. Данные PostgreSQL из контейнера будут сохраняться в эту директорию.

--network=host — при необходимости изменить порт для PostgreSQL, следует изменить эту строку на -p 5440:5432. Здесь первый порт 5440 — локальный, а 5432 — порт в контейнере.

Все базы данных для сервисов LP следует создавать вручную, если используется уже установленный PostgreSQL.

Redis#

Примечание. Если у вас уже установлен Redis, пропустите этот шаг.

Используйте следующую команду для запуска Redis.

docker run \
-v /etc/localtime:/etc/localtime:ro \
--name=redis \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/redis:7.2

Configurator#

Использование необязательных сервисов#

Следующие сервисы необязательны для LP:

  • Events
  • Image Store
  • Tasks
  • Sender
  • Handlers
  • Python Matcher Proxy (отключен по умолчанию)
  • Lambda (отключен по умолчанию)

Работа с сервисом Lambda возможна только при разворачивании сервисов LUNA PLATFORM в Kubernetes. См. подробную информацию в руководстве по разворачиванию LP в Kubernetes.

Эти сервисы можно отключить при отсутствии необходимости в них.

Используйте секцию "ADDITIONAL_SERVICES_USAGE" в настройках сервиса API в сервисе Configurator, чтобы отключить ненужные сервисы.

Можно использовать файл сброса, предоставленный в комплекте поставки, для включения/отключения сервисов перед запуском сервиса Configurator.

vi /var/lib/luna/current/extras/conf/platform_settings.json

Отключение какого-либо из сервисов имеет определенные последствия. См. подробную информацию в разделе "Отключаемые сервисы" руководства администратора.

Пересоздание базы данных Configurator#

Нет необходимости переносить базу данных сервиса Configurator, так как она должна создаваться с нуля и заполняться вручную.

Используйте следующие команды для удаления и создания базы данных сервиса Configurator.

Удалите старую базу данных:

docker exec -it postgres psql -U luna -c "DROP DATABASE luna_configurator;"

Создайте новую базу данных:

docker exec -it postgres psql -U luna -c "CREATE DATABASE luna_configurator;"

Присвойте привилегии пользователю базы данных:

docker exec -it postgres psql -U luna -c "GRANT ALL PRIVILEGES ON DATABASE luna_configurator TO luna;"

Разрешите пользователю авторизацию в базе данных:

docker exec -it postgres psql -U luna -c "ALTER ROLE luna WITH LOGIN;"

Создание таблиц базы данных Configurator#

Используйте команду docker run со следующими параметрами для создания таблиц базы данных Configurator.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /var/lib/luna/current/example-docker/luna_configurator/configs/luna_configurator_postgres.conf:/srv/luna_configurator/configs/config.conf \
-v /var/lib/luna/current/extras/conf/platform_settings.json:/srv/luna_configurator/used_dumps/platform_settings.json \
--network=host \
-v /tmp/logs/configurator:/srv/logs \
--rm \
--entrypoint bash \
dockerhub.visionlabs.ru/luna/luna-configurator:v.2.2.18 \
-c "python3 ./base_scripts/db_create.py; cd /srv/luna_configurator/configs/configs/; python3 -m configs.migrate --config /srv/luna_configurator/configs/config.conf head; cd /srv; python3 ./base_scripts/db_create.py --dump-file /srv/luna_configurator/used_dumps/platform_settings.json"

/var/lib/luna/current/extras/conf/platform_settings.json — позволяет задавать путь к файлу с конфигурациями LP.

./base_scripts/db_create.py; — создает структуру базы данных.

python3 -m configs.migrate head; — выполняет миграции настроек в базе данных Configurator и устанавливает ревизию для миграции. Ревизия потребуется в процессе обновления на новую сборку LP5.

--dump-file /srv/luna_configurator/used_dumps/platform_settings.json — обновляет настройки в базе данных Configurator значениями из предоставленного файла.

Запуск контейнера Configurator#

Используйте команду docker run со следующими параметрами для запуска Configurator:

docker run \
--env=PORT=5070 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /var/lib/luna/current/example-docker/luna_configurator/configs/luna_configurator_postgres.conf:/srv/luna_configurator/configs/config.conf \
-v /tmp/logs/configurator:/srv/logs \
--name=luna-configurator \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-configurator:v.2.2.18 

На данном этапе можно активировать запись логов в файл, если необходимо сохранять их на сервере (см. раздел "Запись логов на сервер").

Image Store#

Миграция биометрических образцов#

Для миграции из LUNA PLATFORM 4 можно присвоить аккаунт всем биометрическим образцам в бакете Image Store. В противном случае ко всем объектам, созданным для LUNA PLATFORM 4, можно получить доступ из любого аккаунта или вообще без аккаунта.

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

Создайте резервную копию всех бакетов биометрических образцов перед запуском следующего скрипта.

Следует запустить скрипт "migrate_4_to_5.py" для обновления информации об аккаунтах для хранящихся биометрических образцов.

Необходимо использовать существующие бакеты в процессе работы скрипта миграции биометрических образцов. Установите актуальные настройки хранилища для сервиса Image Store в пользовательском интерфейсе сервиса Configurator.

Выполните скрипт миграции биометрических образцов:

docker run \
--rm -t \
-v /tmp/logs/image-store:/srv/logs \
-v /var/lib/luna/image_store/:/srv/luna_image_store/local_storage/ \
--network=host \
--entrypoint bash dockerhub.visionlabs.ru/luna/luna-image-store:v.3.14.2 \
-c "python3 ./base_scripts/accounting/migrate_4_to_5.py --account_id=<account_id> --bucket=visionlabs-samples"

-v /var/lib/luna/image_store путь к локальному хранилищу биометрических образцов Image Store.

<account_id> — необходимо задать ID аккаунта, у которого будет доступ ко всем биометрическим образцам из указанного бакета (visionlabs-samples).

Запуск контейнера Image Store#

Примечание. Если вы не собираетесь использовать сервис Image Store, не запускайте этот контейнер и отключите использование сервиса в сервисе Configurator. См. раздел "Использование необязательных сервисов".

Используйте следующую команду для запуска сервиса Image Store:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5020 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /var/lib/luna/image_store/:/srv/local_storage/ \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/image-store:/srv/logs \
--name=luna-image-store \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-image-store:v.3.14.2

-v /var/lib/luna/image_store/:/srv/local_storage/ — данные из указанной директории добавляются в Docker-контейнер, когда он запущен. Все данные из указанной директории Docker-контейнера сохраняются в данную директорию.

Если директория с бакетами LP уже создана, укажите ее вместо /var/lib/luna/image_store/.

Создание бакетов#

Бакеты используются для хранения данных в Image Store. Сервис Image Store должен быть запущен перед выполнением команд.

При обновлении с предыдущей версии рекомендуется запустить команды создания бакетов еще раз. Это гарантирует создание всех необходимых бакетов.

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

Бакеты в LP можно создавать двумя способами:

  • с помощью скрипта lis_bucket_create.py, расположенного в контейнере сервиса Image Store
  • с помощью прямых запросов к сервису Image Store

Скрипт создания бакетов

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

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/api:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-api:v.6.29.0 \
python3 ./base_scripts/lis_bucket_create.py -ii --luna-config http://localhost:5070/1

Если необходимо задать время хранения объекта в бакете, то можно дополнительно указать количество дней с помощью аргумента --bucket-ttl. См. подробную информацию в разделе "Жизненный цикл объектов" руководства администратора.

Если вы собираетесь использовать сервис Tasks, используйте следующую команду, чтобы дополнительно создать "task-result" в сервисе Image Store:

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/tasks:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-tasks:v.3.22.1 \
python3 ./base_scripts/lis_bucket_create.py -ii --luna-config http://localhost:5070/1

Если вы собираетесь использовать портреты, используйте следующую команду, чтобы дополнительно создать "portraits".

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/api:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-backport3:v.0.11.9 \
python3 ./base_scripts/lis_bucket_create.py -ii --luna-config http://localhost:5070/1

Запросы к сервису Image Store

Для следующих запросов требуется утилита curl.

Бакет "visionlabs-samples" используется для хранения биометрических образцов лиц. Этот бакет требуется для использования LP.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=visionlabs-samples

Если необходимо задать время хранения объекта в бакете, то можно дополнительно указать количество дней с параметра запроса ttl. См. подробную информацию в разделе "Жизненный цикл объектов" руководства администратора.

Бакет "portraits" используется для хранения портретов. Этот бакет требуется для использования Backport 3.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=portraits

Бакет "visionlabs-bodies-samples" используется для хранения биометрических образцов тел. Этот бакет требуется для использования LP.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=visionlabs-bodies-samples

Бакет "visionlabs-image-origin" используется для хранения исходных изображений. Этот бакет требуется для использования LP.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=visionlabs-image-origin

Бакет "visionlabs-objects" используется для хранения объектов. Этот бакет требуется для использования LP.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=visionlabs-objects

Бакет "task-result" для сервиса Tasks. Не используйте его, если не собираетесь использовать этот сервис.

curl -X POST http://127.0.0.1:5020/1/buckets?bucket=task-result

Добавление TTL для локальных бакетов#

Примечание. Выполняйте нижеописанные действия только если бакеты хранятся в локальном хранилище и требуется управлять временем жизни существующих и/или новых объектов в бакете.

Для того, чтобы добавить TTL для всех объектов в бакете, расположенном в локальном хранилище, необходимо обновить его, указав параметр запроса ttl.

Например, можно добавить время жизни всех объектов равным 2 дня в бакете "visionlabs-samples" с помощью следующей команды:

curl -X PUT http://127.0.0.1:5020/1/buckets?bucket=visionlabs-samples?ttl=2

Добавление TTL для S3 бакетов#

Примечание. Выполняйте нижеописанные действия только если бакеты хранятся в S3-подобном хранилище и требуется управлять временем жизни существующих и/или новых объектов в бакете.

Для того, чтобы добавить TTL для объектов в бакетах, расположенных в S3-подобном хранилище, необходимо выполнить специальный скрипт миграции migrate_ttl_settings.py.

Примечание. См. подробную информацию о миграции и её особенностях в разделе "Миграция для добавления TTL к объектам в S3" в руководстве администратора.

Скрипт миграции необходимо запускать со следующими аргументами:

  • --bucket — название бакета, например, visionlabs-samples
  • --update-tags — следует ли добавлять теги ко всем существующим объектам

Если аргумент --update-tags равен 1, то необходимые для TTL теги будут добавлены ко всем существующим объектам. Длительность миграции будет зависеть от количества существующих объектов.

Если аргумент --update-tags равен 0, то необходимые для TTL теги не будут добавлены ко всем существующим объектам. В таком случае управление жизненным циклом для существующих объектов будет недоступно.

К новым объектам после миграции теги будут добавляться автоматически.

Также для скрипта необходимо заполнить данные авторизации к S3-подобному хранилищу в конфигурационном файле и примонтировать его к контейнеру сервиса Image Store.

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

vi /var/lib/luna/current/extras/conf/s3_bucket.conf

Выполните миграцию бакетов в хранилище S3:

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/image-store:/srv/logs \
-v /var/lib/luna/current/extras/conf/s3_bucket.conf:/srv/base_scripts/migrate_ttl_settings/config.conf \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-image-store:v.3.14.2 \
python3 ./base_scripts/migrate_ttl_settings/migrate_ttl_settings.py --bucket=<your_bucket_name> --update-tags=<your_value>

Accounts#

Преобразование БД Admin#

Примечание. Выполните нижеописанные действия только если сервис Admin использовался ранее. В противном случае пропустите данный раздел.

По умолчанию для сервиса Accounts создается собственная база данных luna_accounts, однако если ранее использовался сервис Admin, то база данных luna_admin должна быть преобразована для работы с сервисом Accounts. Для этого нужно сменить используемую по умолчанию сервисом Accounts базу данных luna_accounts на luna_admin в сервисе Configurator и выполнить скрипт миграции данных.

Обратите внимание, что после миграции база данных будет иметь название luna_admin, однако будет использоваться исключительно сервисом Accounts.

Миграция БД Admin#

Выполните скрипт миграции для обновления структуры базы данных Admin и её преобразования для работы с сервисом Accounts.

Обратите внимание, что после миграции база данных будет иметь название luna_admin, однако будет использоваться исключительно сервисом Accounts.

Рекомендуется создать резервную копию базы данных перед тем, как принимать какие-либо изменения.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/accounts:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-accounts:v.0.3.9 \
alembic -x luna-config=http://127.0.0.1:5070/1 upgrade head

Создание таблиц базы данных Accounts#

Примечание. Выполните нижеописанные действия только если сервис Accounts запускается впервые и раньше не использовался сервис Admin. Если раньше использовался сервис Admin, то пропустите данный раздел и убедитесь, что выполнены действия из раздела "Преобразование БД Admin".

Используйте следующую команду для создания таблиц базы данных Accounts:

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/accounts:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-accounts:v.0.3.9 \
python3 ./base_scripts/db_create.py --luna-config http://localhost:5070/1

Запуск контейнера Accounts#

Используйте следующую команду для запуска сервиса Accounts:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5170 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/accounts:/srv/logs \
--name=luna-accounts \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-accounts:v.0.3.9

Licenses#

Примечание. Для использования триальной лицензии необходимо запускать сервис Licenses на том же сервере, на котором она используется.

Задание настроек лицензии с помощью Configurator#

Выполните действия по заданию настроек для HASP-ключа или Guardant-ключа.

Задание настроек лицензии HASP#

Примечание. Выполняйте данные действия только если используется лицензия HASP. См. раздел "Задание настроек лицензии Guardant", если используется ключ Guardant.

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

  • перейдите в интерфейс сервиса Configurator http://<configurator_server_ip>:5070/

  • введите в поле "Setting name" значение "LICENSE_VENDOR" и нажмите "Apply Filters"

  • задайте IP-адрес сервера с вашим ключом HASP в поле "server_address" в формате "127.0.0.1".

  • нажмите "Save"

Обратите внимание, что если лицензия активируется с помощью ключа HASP, то должно быть указано два параметра "vendor" и "server_address". Если вы хотите изменить защиту HASP на Guardant, то необходимо добавить поле "license_id".

Задание настроек лицензии Guardant#

Примечание. Выполняйте данные действия только если используется ключ Guardant. См. раздел "Задание настроек лицензии HASP", если используется ключ HASP.

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

  • перейдите в интерфейс сервиса Configurator http://<configurator_server_ip>:5070/

  • введите в поле "Setting name" значение "LICENSE_VENDOR" и нажмите "Apply Filters"

  • задайте IP-адрес сервера с вашим ключом Guardant в поле "server_address"

  • задайте идентификатор лицензии в формате 0x<your_license_id>, полученный в разделе "Сохранение идентификатора лицензии" руководства по активации лицензии, в поле "license_id"

  • нажмите "Save"

Обратите внимание, что если лицензия активируется с помощью ключа Guardant, то должно быть указано три параметра "vendor", "server_address" и "license_id". Если вы хотите изменить защиту Guardant на HASP, то необходимо удалить поле "license_id".

Запуск контейнера Licenses#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5120 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/licenses:/srv/logs \
--name=luna-licenses \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-licenses:v.0.10.18

Faces#

Миграция базы данных Faces#

Необходимо выполнить скрипты миграции для обновления структуры базы данных Faces.

Рекомендуется создать резервную копию базы данных перед тем, как принимать какие-либо изменения.

Запустите следующую команду для выполнения миграции базы данных Faces.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/faces:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-faces:v.4.11.9 \
alembic -x luna-config=http://127.0.0.1:5070/1 upgrade head

Запуск контейнера Faces#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5030 \
--env=WORKER_COUNT=2 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/faces:/srv/logs \
--name=luna-faces \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-faces:v.4.11.9

Добавление функции VLMatch в базу данных Faces#

Функцию VLMatch необходимо применить в базу данных PostgreSQL.

  • Определите функцию в базе данных Faces:
docker exec -it postgres psql -U luna -d luna_faces -c "CREATE OR REPLACE FUNCTION VLMatch(bytea, bytea, int) RETURNS float8 AS '/srv/VLMatchSource.so', 'VLMatch' LANGUAGE C PARALLEL SAFE;";
  • Протестируйте функцию, отправив следующий запрос в базу данных сервиса:
docker exec -it postgres psql -U luna -d luna_faces -c "SELECT VLMatch('\x1234567890123456789012345678901234567890123456789012345678901234'::bytea, '\x0123456789012345678901234567890123456789012345678901234567890123'::bytea, 32);"

База данных должна вернуть результат "0.4765625".

Events#

Миграция базы данных Events#

Для обновления структуры базы данных Events необходимо выполнить скрипты миграции.

Рекомендуется создать резервную копию базы данных перед тем, как применять какие-либо изменения.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/events:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-events:v.4.12.9 \
alembic -x luna-config=http://127.0.0.1:5070/1 upgrade head

Запуск контейнера Events#

Примечание. Если вы не собираетесь использовать сервис Events, не запускайте этот контейнер и отключите использование сервиса в сервисе Configurator. См. раздел "Использование необязательных сервисов".

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5040 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/events:/srv/logs \
--name=luna-events \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-events:v.4.12.9

Добавление функции VLMatch в базу данных Events#

Функцию VLMatch необходимо применить в базе данных PostgreSQL.

Определите функцию в базе данных Events.

docker exec -it postgres psql -U luna -d luna_events -c "CREATE OR REPLACE FUNCTION VLMatch(bytea, bytea, int) RETURNS float8 AS '/srv/VLMatchSource.so', 'VLMatch' LANGUAGE C PARALLEL SAFE;";

Протестируйте функцию.

docker exec -it postgres psql -U luna -d luna_events -c "SELECT VLMatch('\x1234567890123456789012345678901234567890123456789012345678901234'::bytea, '\x0123456789012345678901234567890123456789012345678901234567890123'::bytea, 32);"

База данных должна вернуть результат "0.4765625".

Сервисы Python Matcher#

Для задач сравнения можно использовать либо только сервис Python Matcher, либо дополнительно использовать сервис Python Matcher Proxy, который перенаправляет запросы сравнения либо сервису Python Matcher либо плагинам сравнения. В данном разделе описывается использование Python Matcher без Python Matcher Proxy.

Необходимо использовать сервис Python Matcher Proxy только если собираетесь использовать плагины сравнения. Использование Python Matcher Proxy и запуск соответствующего docker-контейнера описаны в разделе "Использование Python Matcher c Python Matcher Proxy".

См. описание и использование плагинов сравнения в руководстве администратора.

Использование Python Matcher без Python Matcher Proxy#

Сервис Python Matcher со сравнением посредством базы данных Faces включен по умолчанию при запуске.

Сервис Python Matcher со сравнением посредством Events также включен по умолчанию. Его можно отключить, указав "USE_LUNA_EVENTS = 0" в разделе "ADDITIONAL_SERVICES_USAGE" настроек Configurator (см. раздел "Использование необязательных сервисов"). Таким образом, сервис Events не будет использоваться для LUNA PLATFORM.

Python Matcher, который производит сравнение с помощью библиотеки сравнений, включается когда "CACHE_ENABLED" установлен как "true" в настройке "DESCRIPTORS_CACHE".

Для сервисов Python Matcher и Python Matcher Proxy загружается одно изображение.

Запуск контейнера Python Matcher#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5100 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/python-matcher:/srv/logs \
--name=luna-python-matcher \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-python-matcher:v.1.9.9

Remote SDK#

Запуск контейнера Remote SDK#

Вы можете запустить сервис Remote SDK, используя CPU (задано по умолчанию) или GPU.

По умолчанию сервис Remote SDK запускается со всеми включенными эстиматорами и детекторами. При необходимости можно отключить использование некоторых эстиматоров или детекторов при запуске контейнера Remote SDK. Отключение ненужных эстиматоров позволяет экономить оперативную память или память GPU, поскольку при старте сервиса Remote SDK выполняется проверка возможности выполнения указанных оценок и загрузка нейронных сетей в память. При отключении эстиматора или детектора можно также удалить его нейронную сеть из контейнера Remote SDK. См. подробную информацию в разделе "Включение/отключение некоторых эстиматоров и детекторов" руководства администратора.

Запустите сервис Remote SDK, используя одну из следующих команд в соответствии с используемым процессором.

Запуск Remote SDK с использованием CPU#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5220 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/remote-sdk:/srv/logs \
--network=host \
--name=luna-remote-sdk \
--restart=always \
--detach=true \
dockerhub.visionlabs.ru/luna/luna-remote-sdk:v.0.6.0

Запуск Remote SDK с использованием GPU#

Сервис Remote SDK не использует GPU по умолчанию. Если вы собираетесь использовать GPU, то следует включить его использование для сервиса Remote SDK в сервисе Configurator.

Если необходимо использовать GPU сразу для всех эстиматоров и детекторов, то необходимо использовать параметр "global_device_class" в секции "LUNA_REMOTE_SDK_RUNTIME_SETTINGS". Все эстиматоры и детекторы будут использовать значение данного параметра, если в параметре "device_class" их собственных настроек выставлено значение "global" (по умолчанию).

Если необходимо использовать GPU для определенного эстиматора или детектора, то необходимо использовать параметр "device_class" в секциях вида "LUNA_REMOTE_SDK__SETTINGS.runtime_settings".

См. раздел "Вычисления с помощью GPU" для получения дополнительных требований к использованию GPU.

Используйте следующую команду для запуска сервиса Remote SDK с помощью GPU:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5220 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--gpus device=0 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/remote-sdk:/srv/logs \
--network=host \
--name=luna-remote-sdk \
--restart=always \
--detach=true \
dockerhub.visionlabs.ru/luna/luna-remote-sdk:v.0.6.0
  • --gpus device=0 — параметр указывает используемое устройство GPU и позволяет использовать GPU. Один GPU используется для одного экземпляра Remote SDK. Использование множества GPU для одного экземпляра невозможно.

Запуск облегченной версии Remote SDK#

Можно запустить облегченную версию сервиса Remote SDK, содержащую только конфигурационные файлы без нейронных сетей. Предполагается, что пользователь сам добавит в контейнер необходимые ему нейронные сети.

Запуск облегченной версии сервиса Remote SDK предназначен для продвинутых пользователей.

Для успешного запуска контейнера Remote SDK с пользовательским набором нейронных сетей нужно выполнить следующие действия:

  • запросить у VisionLabs требуемые нейронные сети
  • поместить нейронные сети в папку с установленной LUNA PLATFORM
  • присвоить соответствующие права для файлов нейронных сетей
  • смонтировать файлы нейронных сетей в папку /srv/fsdk/data контейнера Remote SDK
  • с помощью аргументов переменной "EXTEND_CMD" явно указать какие из нейронных сетей должны использоваться

Обратите внимание, что с помощью флага "enable-all-estimators-by-default" для переменной "EXTEND_CMD" можно выключить по умолчанию использование всех нейронных сетей (эстиматоров), а затем с помощью специальных флагов явно указывать какие нейронные сети должны быть использованы. Если не указывать данный флаг или выставить значение "--enable-all-estimators-by-default=1", то сервис Remote SDK будет пытаться найти в контейнере все нейронные сети. Если какая-то из нейронных сетей не будет найдена, то сервис Remote SDK не запустится.

Список доступных аргументов для запуска:

Аргумент Описание
--enable-all-estimators-by-default включить все эстиматоры по умолчанию
--enable-human-detector одновременный детектор
--enable-face-detector детектор лиц
--enable-body-detector детектор тел
--enable-face-landmarks5-estimator эстиматор 5 контрольных точек лица
--enable-face-landmarks68-estimator эстиматор 68 контрольных точек лица
--enable-head-pose-estimator эстиматор положения головы
--enable-liveness-estimator эстиматор OneShotLiveness
--enable-fisheye-estimator эстиматор бочообразной дисторсии (эффекта FishEye)
--enable-face-detection-background-estimator эстиматор фона изображения
--enable-face-warp-estimator эстиматор биометрического образца лица
--enable-body-warp-estimator эстиматор биометрического образца тела
--enable-quality-estimator эстиматор качества изображения
--enable-image-color-type-estimator эстиматор типа цвета по лицу
--enable-face-natural-light-estimator эстиматор естественности освещения
--enable-eyes-estimator эстиматор глаз
--enable-gaze-estimator эстиматор направления взгляда
--enable-mouth-attributes-estimator эстиматор атрибутов рта
--enable-emotions-estimator эстиматор эмоций
--enable-mask-estimator эстиматор маски
--enable-glasses-estimator эстиматор очков
--enable-eyebrow-expression-estimator эстиматор бровей
--enable-red-eyes-estimator эстиматор красных глаз
--enable-headwear-estimator эстиматор головного убора
--enable-basic-attributes-estimator эстиматор базовых атрибутов
--enable-face-descriptor-estimator эстиматор извлечения биометрического шаблона лица
--enable-body-descriptor-estimator эстиматор извлечения биометрического шаблона тела
--enable-body-attributes-estimator эстиматор атрибутов тел
--enable-people-count-estimator эстиматор количества людей
--enable-deepfake-estimator эстиматор Deepfake

См. подробную информацию включении и выключении определенных эстиматоров в разделе "Включение/отключение некоторых эстиматоров и детекторов" руководства администратора.

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

chown -R 1001:0 /var/lib/luna/current/<neural_network_name>.plan

Пример команды запуска контейнера Remote SDK с монтированием нейронных сетей для детекции лиц и извлечения биометрических шаблонов лиц:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5220 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--env=EXTEND_CMD="--enable-all-estimators-by-default=0 --enable-face-detector=1 --enable-face-descriptor-estimator=1" \
-v /var/lib/luna/current/cnn59b_cpu-avx2.plan:/srv/fsdk/data/cnn59b_cpu-avx2.plan \
-v /var/lib/luna/current/FaceDet_v3_a1_cpu-avx2.plan:/srv/fsdk/data/FaceDet_v3_a1_cpu-avx2.plan \
-v /var/lib/luna/current/FaceDet_v3_redetect_v3_cpu-avx2.plan:/srv/fsdk/data/FaceDet_v3_redetect_v3_cpu-avx2.plan \
-v /var/lib/luna/current/slnet_v3_cpu-avx2.plan:/srv/fsdk/data/slnet_v3_cpu-avx2.plan \
-v /var/lib/luna/current/LNet_precise_v2_cpu-avx2.plan:/srv/fsdk/data/LNet_precise_v2_cpu-avx2.plan \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/remote-sdk:/srv/logs \
--network=host \
--name=luna-remote-sdk \
--restart=always \
--detach=true \
dockerhub.visionlabs.ru/luna/luna-remote-sdk:v.0.6.0

Handlers#

Примечание. Если вы не собираетесь использовать сервис Handlers, не запускайте этот контейнер и отключите использование сервиса в сервисе Configurator. См. раздел "Использование необязательных сервисов".

Изменение используемой базы данных для Handlers#

База данных, используемая сервисом Handlers в LUNA PLATFORM 5 — та же, которая использовалась сервисом API в LUNA PLATFORM 4.

Следует заменить базу данных, используемую для Handlers, на базу данных "luna_api" в сервисе Configurator.

  • Откройте интерфейс сервиса Configurator (http://<server_address>:5070 by default);
  • Задайте LUNA_HANDLERS_DB в поле "Setting name" фильтра и нажмите [Apply filters] или выберите "luna-handlers" в поле "Service name field" и найдите настройку там;
  • Задайте параметр "db_name": "luna_api" в поле.
  • Нажмите [Save].

Миграция базы данных Handlers#

Необходимо выполнить скрипты миграции для обновления структуры базы данных Handlers.

Рекомендуется создать резервную копию базы данных перед внесением любых изменений.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/handlers:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-handlers:v.3.6.0 \
alembic -x luna-config=http://127.0.0.1:5070/1 upgrade head

Запуск контейнера Handlers#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5090 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/handlers:/srv/logs \
--name=luna-handlers \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-handlers:v.3.6.0

Tasks#

Примечание. Если вы не собираетесь использовать сервис Tasks, не запускайте контейнер Tasks и контейнер Tasks Worker. Отключите сервис Tasks в сервисе Configurator. См. раздел "Использование необязательных сервисов".

Миграция базы данных Tasks#

Необходимо выполнить скрипты миграции для обновления структуры базы данных Tasks.

Рекомендуется создать резервную копию базы данных перед тем, как вносить какие-либо изменения.

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/tasks:/srv/logs \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/luna-tasks:v.3.22.1 \
alembic -x luna-config=http://127.0.0.1:5070/1 upgrade head

Запуск контейнеров Tasks и Tasks Worker#

Образ сервиса Tasks включает в себя сервисы Tasks и Tasks Worker ("рабочие процессы сервиса Tasks"). Они оба должны быть запущены.

Необходимо создать бакет "task-result" для сервиса Tasks перед запуском сервиса. Создание бакетов описано в разделе "Создание бакетов".

Если необходимо использовать задачу Estimator с использованием сетевого диска, то необходимо предварительно смонтировать директорию с изображениями с сетевого диска в специальные директории контейнеров Tasks и Tasks Worker. См. подробную информацию в разделе "Задача Estimator" в руководстве администратора.

Запуск контейнера Tasks worker#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5051 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--env=SERVICE_TYPE="tasks_worker" \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/tasks-worker:/srv/logs \
--name=luna-tasks-worker \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-tasks:v.3.22.1

Запуск контейнера Tasks#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5050 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/tasks:/srv/logs \
--name=luna-tasks \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-tasks:v.3.22.1

Sender#

Запуск контейнера Sender#

Примечание. Если вы не собираетесь использовать сервис Sender, не запускайте этот контейнер и отключите этот сервис в Configurator. См. раздел "Использование необязательных сервисов".

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5080 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/sender:/srv/logs \
--name=luna-sender \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-sender:v.2.11.9

API#

Запуск контейнера API#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5000 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--name=luna-api \
--restart=always \
--detach=true \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/api:/srv/logs \
--network=host \
dockerhub.visionlabs.ru/luna/luna-api:v.6.29.0

Создание аккаунта#

Аккаунт создается с помощью HTTP-запроса к ресурсу "create account".

Аккаунт также можно создать с помощью сервиса Admin. Данный способ требует наличия существующих логина и пароль (или логина и пароля по умолчанию) и позволяет создать аккаунты типа "admin". См. подробную информацию в разделе "Сервис Admin" руководства администратора.

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

  • login — электронный адрес
  • password — пароль
  • account_type — тип аккаунта ("user" или "advanced_user")

Создайте аккаунт, используя свои аутентификационные данные.

Если необходимо сохранить возможность использования "account_id", который использовался в качестве заголовка "Luna-Account-Id" в предыдущих версиях LP (без создания аккаунта в сервисе Admin), то необходимо дополнительно указать нужный идентификатор в заголовке "Luna-Account-Id".

Пример CURL-запроса к ресурсу "create account":

curl --location --request POST 'http://127.0.0.1:5000/6/accounts' \
--header 'Content-Type: application/json' \
--header 'Luna-Account-Id: <your_old_account_id>' \
--data '{
  "login": "user@mail.com",
  "password": "password",
  "account_type": "user",
  "description": "description"
}'

Необходимо заменить аутентификационные данные из примера на свои.

См. подробную информацию об аккаунтах в разделе "Аккаунты и типы авторизации" руководства администратора.

Для работы с токенами необходимо наличие аккаунта.

Admin#

Запуск контейнера Admin#

Примечание. Если вы не собираетесь использовать сервис Admin, не запускайте этот контейнер.

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5010 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/admin:/srv/logs \
--name=luna-admin \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-admin:v.5.7.1 

Данные о количестве выполненных запросов сохраняются в бакете luna-admin базы данных Influx. Для включения сохранения этих данных требуется выполнить следующую команду:

docker exec -it luna-admin python3 ./base_scripts/influx2_cli.py create_usage_task --luna-config http://127.0.0.1:5070/1

Backport 4#

В данном разделе описывается запуск сервиса Backport 4.

Этот сервис необязателен для использования LP5 и требуется только для эмуляции LP 4 API.

Запуск контейнера Backport 4#

Используйте следующую команду для запуска сервиса:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5130 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--name=luna-backport4 \
--restart=always \
--detach=true \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/backport4:/srv/logs \
--network=host \
dockerhub.visionlabs.ru/luna/luna-backport4:v.1.5.9

User Interface 4#

User Interface 4 используется только с сервисом Backport 4.

Запуск контейнера User Interface 4#

Примечание. Перед запуском контейнера User Interface 4 необходимо наличие аккаунта типа user. Его логин и пароль в формате Base64 будут использованы для работы с пользовательским интерфейсом.

Используйте следующую команду для запуска сервиса:

docker run \
--env=PORT=4200 \
--env=LUNA_API_URL=http://<server_external_ip>:5130 \
--env=BASIC_AUTH=dXNlckBtYWlsLmNvbTpwYXNzd29yZA== \
--name=luna-ui-4 \
--restart=always \
--detach=true \
--network=host \
-v /etc/localtime:/etc/localtime:ro \
dockerhub.visionlabs.ru/luna/luna4-ui:v.0.1.8

--env=PORT — задает порт для запуска User Interface 4.

--env=BASIC_AUTH — задает авторизацию типа Basic для аккаунта, данные которого отображаются в пользовательском интерфейсе. Необходимо перевести login:password, созданные согласно разделу "Создание аккаунта" в формат Base64. Для аккаунта должен быть задан тип user.

--env=LUNA_API_URL — задает URL сервиса Backport 4.

  • Необходимо использовать внешний IP сервиса, а не локальный хост.

  • Необходимо указать порт сервиса Backport 4 (5130 задан по умолчанию).