Обновление до FindFace Multi 2.2
Совет
Если вы используете наш продукт FindFace Security, развернутый в Ubuntu 18.04, сначала обновите его до FindFace Multi 1.2, а затем обновите до FindFace Multi 2.2.
Если вы используете FindFace Multi 2.1.3, обновите систему до FindFace Multi 2.2 с помощью следующей инструкции.
Если вы используете FindFace Multi в качестве сервера-«марионетки» для интеграции с FindFace CIBR, то после обновления включите заново и настройте плагин ffsecurity_vns
в новом конфигурационном файле findface-multi-legacy.py
.
Интеграция с Axxon Next в версиях FindFace Multi 2.1+ является частью интеграции с внешними VMS и настраивается через плагин интеграции с VMS.
Если в версии FindFace Multi 1.2 вы создавали карточки человека или автомобиля с кастомными метаполями, то, чтобы они продолжали отображаться в интерфейсе FindFace Multi 2.2, необходимо в шаге №2 скопировать секцию CUSTOM_FIELDS
из старого конфигурационного файла и в шаге №8 перенести ее в новый конфигурационный файл.
В этой главе:
Обновление FindFace Multi 1.2 до FindFace Multi 2.2
Важно
Перед началом обновления отключите все камеры.
Для обновления FindFace Multi 1.2 до версии FindFace Multi 2.2 выполните следующие действия:
Создайте резервную копию старой схемы базы данных Tarantool:
sudo cp /etc/findface-security/tnt_schema.lua /etc/findface-security/old_tnt_schema.lua
Начиная с версии 2.0, одним из самых существенных отличий FindFace Multi от предыдущих версий продукта является структура биометрической базы данных Tarantool (так называемая «метасхема»). В новой структуре выделено несколько пространств (spaces), тогда как в прежних версиях было только одно пространство (space) по умолчанию.
Откройте файл конфигурации
/etc/findface-security/config.py
. Сохраните значения параметровEXTERNAL_ADDRESS
,SECRET_KEY
,VIDEO_DETECTOR_TOKEN
,ROUTER_URL
,CUSTOM_FIELDS
для последующего использования.sudo vi /etc/findface-security/config.py EXTERNAL_ADDRESS = "http://172.20.77.58" ... # use pwgen -sncy 50 1|tr "'" "." to generate your own unique key SECRET_KEY = 'c8b533847bbf7142102de1349d33a1f6' FFSECURITY = { 'VIDEO_DETECTOR_TOKEN': '381b0f4a20495227d04185ab02f5085f', ... 'ROUTER_URL': 'http://172.20.77.58', ... # -- Custom model fields -- # Edit CUSTOM_FIELDS -> `human_card` section to customize human card fields. # Edit CUSTOM_FIELDS -> `face_object` section to customize face object fields. # Below is an example with every field type possible. # 'CUSTOM_FIELDS': { # 'human_card': { # 'items': [ # { # 'name': 'personid', # 'default': '', # 'label': 'PersonID', # 'display': ['list', 'form'], # 'description': 'Sigur person ID', # 'editable': False # }, # { # 'name': 'firstname', # 'default': '', # 'label': 'First Name', # 'display': ['list', 'form'], # 'description': 'Sigur first name', # 'editable': False # }, # { # 'name': 'lastname', # 'default': '', # 'label': 'Last Name', # 'display': ['list', 'form'], # 'description': 'Sigur last name', # 'editable': False # }, # { # 'name': 'version', # 'default': '', # 'label': 'Version', # 'display': ['list', 'form'], # 'description': 'Sigur photo version', # 'editable': False # } # ], # 'filters': [ # { # 'name': 'personid', # 'label': 'Sigur person ID filter', # 'field': 'personid' # } # ] # }, # 'face_object': { # 'items': [ # { # "field_name": "tag_name_1", # "type": "string", # "default": "change_me" # }, # { # "field_name": "tag_name_2", # "type": "uint", # "default": 123 # }, # { # "field_name": "tag_name_3", # "type": "bool", # "default": True # }, # ] # } # }, }
Остановите сервис
findface-security
.sudo systemctl stop findface-security.service
Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например,
/etc/findface_dump
.sudo mkdir -p /etc/findface_dump cd /etc/findface_dump sudo findface-storage-api-dump -config /etc/findface-sf-api.ini
Примечание
Если вы включили функцию Видеомагнитофон и хотите сохранить существующие видеозаписи в FindFace Multi 2.2, требуется дополнительный шаг. Создайте резервную копию MongoDB:
sudo mongodump --out /etc/findface_dump/mongo_dump
Перед установкой новой версии остановите и отключите все сервисы во избежание конфликта портов.
Примечание
В примере ниже восемь шардов. Если количество шардов в вашей системе отличается от количества шардов в примере, измените приведенную ниже команду соответствующим образом. Например, для системы с шестнадцатью шардами замените
tarantool@shard-00{1..8}.service
наtarantool@shard-0{01..16}.service
. Список активных шардов можно посмотреть с помощью командыls /etc/tarantool/instances.enabled/
.Можно остановить и отключить сервисы один за другим:
sudo systemctl stop postgresql.service sudo systemctl stop postgresql@10-main sudo systemctl stop findface-*.service sudo systemctl stop pgbouncer.service sudo systemctl stop tarantool@shard-00{1..8}.service sudo systemctl stop nats-server.service sudo systemctl stop etcd.service sudo systemctl stop mongod.service sudo systemctl stop mongodb.service sudo systemctl stop memcached.service sudo systemctl stop nginx.service sudo systemctl stop redis.service sudo systemctl disable postgresql.service sudo systemctl disable postgresql@10-main sudo systemctl disable pgbouncer.service sudo systemctl disable findface-extraction-api.service sudo systemctl disable findface-security.service sudo systemctl disable findface-security-onvif.service sudo systemctl disable findface-sf-api.service sudo systemctl disable findface-ntls.service sudo systemctl disable findface-video-manager.service sudo systemctl disable findface-video-worker-cpu.service sudo systemctl disable findface-video-worker-gpu.service sudo systemctl disable findface-counter.service sudo systemctl disable findface-liveness-api.service sudo systemctl disable findface-video-streamer-cpu.service sudo systemctl disable findface-video-streamer-gpu.service sudo systemctl disable findface-video-storage.service sudo systemctl disable tarantool@shard-00{1..8}.service sudo systemctl disable nats-server.service sudo systemctl disable etcd.service sudo systemctl disable mongod.service sudo systemctl disable mongodb.service sudo systemctl disable memcached.service sudo systemctl disable nginx.service sudo systemctl disable redis.service
Или использовать более компактные команды:
sudo systemctl stop postgresql.service postgresql@10-main findface-*.service pgbouncer.service tarantool@shard-00{1..8}.service nats-server.service etcd.service mongod.service mongodb.service memcached.service nginx.service redis.service sudo systemctl disable postgresql.service postgresql@10-main pgbouncer.service findface-extraction-api.service findface-security.service findface-security-onvif.service findface-sf-api.service findface-ntls.service findface-video-manager.service findface-video-worker-cpu.service findface-video-worker-gpu.service findface-counter.service findface-liveness-api.service findface-video-streamer-cpu.service findface-video-streamer-gpu.service findface-video-storage.service tarantool@shard-00{1..8}.service nats-server.service etcd.service mongod.service mongodb.service memcached.service nginx.service redis.service
Установите экземпляр FindFace Multi 2.2. Не забудьте предварительно подготовить сервер:
См.:
После установки продукта остановите все контейнеры FindFace Multi из директории
/opt/findface-multi/
.cd /opt/findface-multi/ sudo docker-compose stop
Откройте файл конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
и вставьте сохраненные на шаге №2 значения для параметровEXTERNAL_ADDRESS
,SECRET_KEY
,VIDEO_DETECTOR_TOKEN
,ROUTER_URL
, иCUSTOM_FIELDS
.sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py ... # Use pwgen -sncy 50 1|tr "'" "." to generate your own unique key SECRET_KEY = '002231ccb690586f4d33e98322c591bb' ... SERVICE_EXTERNAL_ADDRESS = 'http://172.20.77.58' # EXTERNAL_ADDRESS is used to access objects created inside FFSecurity via external links. EXTERNAL_ADDRESS = 'http://172.20.77.58' ... # findface-video-worker authorization token 'VIDEO_DETECTOR_TOKEN': '8977e1b0067d43f6c908d0bf60363255', ... # findface-video-worker face posting address, # it must be set to either FFSecurity EXTERNAL_ADDRESS (by default) # or findface-facerouter url (in some specific cases) 'ROUTER_URL': 'http://127.0.0.1:80',
Если вы вносили изменения в конфигурационные файлы сервисов
findface-extraction-api
,findface-ntls
иfindface-sf-api
версии FindFace Multi 1.2, то сопоставьте изменённые вами параметры с параметрами в новых конфигурационных файлах версии FindFace Multi 2.2 и перенесите пользовательские параметры, такие как сетевые настройки (порты, URL и тд). Если параметр в старом конфигурационном файле версии FindFace Multi 1.2 не был изменен пользователем вручную, а в новом конфигурационном файле версии FindFace Multi 2.2 имеет другое значение после обновления, то изменять его вручную не рекомендуется.sudo vi /etc/findface-ntls.cfg sudo vi /opt/findface-multi/configs/findface-ntls/findface-ntls.yaml sudo vi /etc/findface-extraction-api.ini sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml sudo vi /etc/findface-sf-api.ini sudo vi /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
Важно
FindFace Multi 2.2 не имеет обратной совместимости с нейронными моделями предыдущих версий FindFace Multi 1.2 и ниже. Поэтому наименования нейронных сетей из конфигурационного файла
/etc/findface-extraction-api.ini
переносить нельзя в новый конфигурационный файл/opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
.Измените структуру базы данных Tarantool, применив схему
tnt_schema.lua
из версии Findface Multi 2.2.sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 make-tnt-schema | sudo tee /etc/findface-security/tnt_schema.lua
Удалите данные из каталогов, соответствующих активным шардам.
sudo rm /opt/ntech/var/lib/tarantool/shard-*/{index,snapshots,xlogs}/*
Скопируйте метасхему пространства (space)
default
из старого файла конфигурацииold_tnt_schema.lua
в новый файлtnt_schema.lua
, чтобы старая метасхема продолжала быть доступной. Это можно сделать следующим простым способом:12.1. В файле
/etc/findface-security/old_tnt_schema.lua
переименуйте следующие поля:meta_scheme --> meta_scheme_default meta_indexes --> meta_indexes_default
12.2. В новом файле конфигурации
/etc/findface-security/tnt_schema.lua
замените строки в начале файла:cfg_spaces = { default = { meta_scheme = { -- internal.normalized_id: { default = '', field_type = 'string', id = 1, name = 'normalized_id', }, -- internal.feat: { default = '', field_type = 'string', id = 2, name = 'feat', }, }, meta_indexes = {} },
на следующие:
dofile("/etc/findface-security/old_tnt_schema.lua") spaces = { default = { meta_scheme=meta_scheme_default, meta_indexes=meta_indexes_default },
Перейдите в директорию с файлами конфигурации Tarantool
/etc/tarantool/instances.available/
. Импортируйте новую метасхемуtnt_schema.lua
в каждый файл конфигурацииshard-00*.lua
, как показано в примере.sudo vi /etc/tarantool/instances.available/shard-00*.lua dofile("/etc/findface-security/tnt_schema.lua") FindFace = require("FindFace") FindFace.start("127.0.0.1", 8104, { license_ntls_server="127.0.0.1:3133", replication = replication_master, spaces = spaces })
Удалите генерируемый пакетом
findface-tarantool-server
дефолтный конфигурационный файлFindFace.lua
(он помешает сделать перезагрузку).sudo rm -rf /etc/tarantool/instances*/FindFace.lua
Перезапустите шарды
findface-tarantool-server
.TNT=$(ls /etc/tarantool/instances.enabled/ | cut -c 7,8,9) for i in $TNT; do sudo systemctl restart tarantool@shard-$i.service ; done
После выполненных операций в шардах по-прежнему останутся старые галереи, созданные в пространстве
default
. При этом станут доступны новые пространства (например,ffsec_body_objects_space
,ffsec_face_clusters_space
и т. д.).Восстановите в базе старые данные из резервной копии. Данные будут восстановлены в том виде, в котором они существовали в предыдущей версии: все галереи останутся в пространстве
default
.sudo systemctl start findface-ntls.service cd /etc/findface_dump for x in *.json; do sudo findface-storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done
Выполните миграцию галерей из пространства
default
на новые пространства:sudo systemctl start findface-sf-api.service sudo systemctl start nginx.service sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate_tnt_space
Выполните миграции базы данных PostgreSQL для совместимости с FindFace Multi 2.2. Сделайте следующее:
18.1. Перейдите в файл конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
. В секцииDATABASES -> default
временно поменяйте парольPASSWORD
на старый, используемый в конфигурационном файле/etc/findface-security/config.py
.Важно
Обязательно сохраните пароль из файла конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
. Позже он понадобится.sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'DISABLE_SERVER_SIDE_CURSORS': True, 'NAME': 'ffsecurity', 'HOST': '127.0.0.1', 'PORT': 5439, 'USER': 'ntech', 'PASSWORD': 'XXXXXXXXXXXXXXXX' } }
18.2. В файле
/etc/pgbouncer/pgbouncer.ini
добавьте следующую строку в секциюdatabases
:ffsecurity_session = dbname=ffsecurity host=localhost port=5432 user=ntech pool_mode=session pool_size=10
18.3. Выполните миграции базы данных на хосте:
sudo systemctl start postgresql.service sudo systemctl start pgbouncer.service sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
18.4. Сделайте резервное копирование существующей базы данных с PostgreSQL, установленной на хост-системе.
cd /opt/findface-multi/ sudo -u postgres pg_dump --verbose --disable-triggers ffsecurity | sudo tee dump_ffsecurity.sql sudo -u postgres pg_dump -t auth_group -t ffsecurity_adgroupguid -t ffsecurity_deviceblacklistrecord -t ffsecurity_ffsecauthsession -t ffsecurity_grouppermission -t ffsecurity_runtimesetting -t ffsecurity_user -t ffsecurity_user_groups -t ffsecurity_user_user_permissions -t ffsecurity_userkeyvalue -t knox_authtoken -t ffsecurity_watchlistpermission -t ffsecurity_cameragrouppermission --data-only --verbose --no-acl --no-owner --disable-triggers ffsecurity | sudo tee dump_identity_provider.sql
18.5. Сделайте резервное копирование прав доступа ролей.
sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py dump_permissions | sudo tee permissions.csv
18.6. Поменяйте обратно пароль, измененный на шаге №18.1
18.7. Остановите все сервисы.
sudo systemctl stop findface-sf-api.service nginx.service tarantool@shard-00{1..8}.service postgresql.service pgbouncer.service
18.8. Откройте файл
/opt/findface-multi/docker-compose.yaml
и сохраните новое значение{NEW_POSTGRES_PASSWORD}
для использования в последующих командах.grep postgresql\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD environment: {POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'no', POSTGRES_PASSWORD: {NEW_POSTGRES_PASSWORD}}
18.9. Удалите все данные PostgreSQL. Затем запустите PostgreSQL, запустив контейнеры, и заново создайте все существующие базы данных.
sudo rm -rf data/postgresql sudo docker-compose up -d --force-recreate postgresql
18.10. Восстановите данные в только что созданную базу
ffsecurity
. Вставьте значение{NEW_POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres ffsecurity" < dump_ffsecurity.sql
18.11. Запустите миграции.
sudo docker-compose up -d pgbouncer sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
18.12. Восстановите данные в базу
ffsecurity_identity_provider
. Вставьте значение{NEW_POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres ffsecurity_identity_provider" < dump_identity_provider.sql
18.13. Запустите все сервисы.
sudo docker-compose up -d
18.14. Запустите команду создания записей в таблице outbox для списков наблюдения и групп камер.
sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py export_to_outbox
18.15. Прежде чем восстановить права доступа ролей в сервис
identity_provider
, проверьте файл/opt/findface-multi/permissions.csv
. Обязательно замените*_ffsecauthtoken
на*_authtoken
, если таковой имеется. Чаще всего это применимо к тем случаям, когда установка FindFace Multi 1.2 представляла собой обновление с более ранних версий продукта.После этого восстановите права доступа ролей в сервис
identity_provider
.sudo docker run --rm --network host -v /opt/findface-multi/configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro -v $(pwd)/permissions.csv:/var/permissions.csv:ro docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.2.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py load_permissions /var/permissions.csv
18.16. Скопируйте полные кадры, нормализованные изображения и лицензионный файл. Скопируйте файлы из папки
/opt/ntech/license/
в папку/opt/findface-multi/data/findface-ntls/
, из/var/lib/findface-security/uploads/
в/opt/findface-multi/data/findface-multi-legacy/uploads/
, из/var/lib/ffupload/uploads/
в/opt/findface-multi/data/findface-upload/uploads/
.sudo cp -r /opt/ntech/license/* /opt/findface-multi/data/findface-ntls/ sudo cp -r /var/lib/findface-security/uploads/* /opt/findface-multi/data/findface-multi-legacy/uploads/ sudo cp -r /var/lib/ffupload/uploads/* /opt/findface-multi/data/findface-upload/uploads/ sudo chmod 777 -R /opt/findface-multi/data/findface-upload/uploads/ sudo chown www-data:www-data -R /opt/findface-multi/data/findface-upload/uploads/*
Также можно напрямую смонтировать указанные выше папки в соответствующие контейнеры через файл
docker-compose.yaml
, как показано в примере ниже:sudo vi /opt/findface-multi/docker-compose.yaml ... findface-upload: image: docker.int.ntl/ntech/universe/upload:ffserver-11.240325 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-upload/40-ffupload.sh:/docker-entrypoint.d/40-ffupload.sh:ro', '/var/lib/ffupload:/var/lib/ffupload'] ... findface-multi-identity-provider: depends_on: findface-multi-identity-provider-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:8022/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-identity-provider-migrate: command: [migrate] depends_on: [pgbouncer, nats, nats-jetstream, findface-sf-api, findface-liveness-api, etcd] environment: {ADMIN_PASSWORD: admin} image: docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: on-failure volumes: ['./configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy: depends_on: findface-multi-identity-provider: {condition: service_started} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:8002/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy-migrate: command: [migrate] depends_on: [pgbouncer, nats, findface-sf-api, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: on-failure volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy-singleton-services: command: [run-single-instance-services] depends_on: findface-multi-identity-provider: {condition: service_healthy} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:9901/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... cleaner: command: [run-cleaner-service] depends_on: [pgbouncer, findface-sf-api, findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-ui: depends_on: [findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/ui:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-ui/nginx-site.conf:/etc/nginx/conf.d/default.conf:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-file-mover: command: [python3, /app/service.py, --config=/etc/config.yml] depends_on: [findface-multi-legacy, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/file-mover:ffmulti-2.2.0 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', '/var/lib/findface-security/uploads:/mnt/slow_storage/uploads'] ...
18.17. Чтобы перенести данные Tarantool, выполните следующие действия:
Остановите все контейнеры FindFace Multi:
sudo docker-compose down
Запустите снова старые шарды и сервис
findface-sf-api
:sudo systemctl start tarantool@shard-00{1..8}.service findface-sf-api.service
Создайте новую резервную копию базы данных векторов признаков:
sudo mkdir -p /etc/findface_dump_final sudo findface-storage-api-dump -output-dir=/etc/findface_dump_final -config /etc/findface-sf-api.ini
Остановите остальные сервисы, очистите директорию
instances.enabled
, снова запустите контейнеры и выполнитеstorage-api-restore
:sudo systemctl stop tarantool@shard-00{1..8}.service findface-sf-api.service findface-ntls.service sudo rm /etc/tarantool/instances.enabled/* sudo docker-compose up -d sudo findface-storage-api-restore -config /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml /etc/findface_dump_final/*.json
Примечание
Если вы создали резервную копию MongoDB на шаге 4 для сохранения видеозаписей Видеомагнитофона, выполните этот дополнительный шаг. Переместите резервную копию MongoDB в каталог /opt/findface-multi/data/mongodb
и восстановите данные MongoDB. Сделайте следующее:
sudo cp -r /etc/findface_dump/mongo_dump/ /opt/findface-multi/data/mongodb
sudo chown mongodb:mongodb -R /opt/findface-multi/data/mongodb/mongo_dump/*
sudo docker exec findface-multi-mongodb-1 mongorestore data/db/mongo_dump
Обновление завершено, но в новой версии присутствуют новые модели нейронных сетей, поэтому необходимо также сделать миграцию векторов признаков на другую модель нейронной сети.
Важно
Настоятельно рекомендуется отключить автоматическое обновление Ubuntu, чтобы сохранить совместимость FindFace Multi со средой установки. В этом случае вы сможете обновлять ОС вручную, контролируя процесс обновления отдельных пакетов.
Для отключения автоматического обновления Ubuntu выполните следующие команды:
sudo apt-get remove unattended-upgrades
sudo systemctl stop apt-daily.timer
sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily.service
sudo systemctl daemon-reload
Обновление FindFace Multi 2.1.3 до FindFace Multi 2.2
Для обновления FindFace Multi 2.1.3 до версии FindFace Multi 2.2 выполните следующие действия:
В домашней директории пользователя создайте папку для резервного копирования данных FindFace Multi 2.1.3.
mkdir ~/backup_data/
Создайте резервную копию конфигурационных файлов FindFace Multi и файла
docker-compose.yaml
, а затем перейдите в директорию/opt/findface-multi/
.sudo cp -r /opt/findface-multi/configs/ ~/backup_data/configs/ sudo cp /opt/findface-multi/docker-compose.yaml ~/backup_data/ cd /opt/findface-multi/
Сделайте резервное копирование данных PostgreSQL.
Откройте файл
/opt/findface-multi/docker-compose.yaml
и сохраните значение{POSTGRES PASSWORD}
для использования в последующих командах.grep postgresql\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD environment: {POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'no', POSTGRES_PASSWORD: {POSTGRES PASSWORD}}
Создайте папку для резервного копирования данных PostgreSQL.
mkdir ~/backup_data/pg_bkp
Создайте резервные копии и вставьте значение
{POSTGRES_PASSWORD}
, которое вы ранее скопировали.sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} pg_dump --username postgres ffsecurity" > ~/backup_data/pg_bkp/legacy.sql sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} pg_dump --username postgres ffsecurity_identity_provider" > ~/backup_data/pg_bkp/identity_provider.sql
Сделайте резервное копирование данных Tarantool.
sudo docker exec -it findface-multi-findface-sf-api-1 bash -c "mkdir ffmulti_dump; cd ffmulti_dump && /storage-api-dump -config /etc/findface-sf-api.ini" sudo docker cp findface-multi-findface-sf-api-1:/ffmulti_dump ~/backup_data/
Для папки
backup_data/
, расположенной в домашней директории пользователя, выполните командуls
, чтобы просмотреть содержимое папки. Оно должно быть таким.ls ~/backup_data/ configs docker-compose.yaml ffmulti_dump pg_bkp
Остановите все контейнеры FindFace Multi.
sudo docker-compose down
Удалите папки
/opt/findface-multi/data/findface-tarantool-server/
и/opt/findface-multi/data/postgresql/
.sudo rm -r /opt/findface-multi/data/findface-tarantool-server/ sudo rm -r /opt/findface-multi/data/postgresql/
Установите экземпляр FindFace Multi 2.2 в директорию
/opt/findface-multi
.Восстановите данные Tarantool из резервной копии.
Скопируйте папку
~/backup_data/ffmulti_dump/
в контейнерfindface-multi-findface-sf-api-1
.sudo docker cp ~/backup_data/ffmulti_dump/ findface-multi-findface-sf-api-1:/
Восстановите данные Tarantool.
Примечание
Если вы обновляетесь с версии FindFace Multi, к которой применена офлайн лицензия Guardant, реализованная через USB-ключ, сначала выполните действия по настройке секции
findface-ntls
в файле/opt/findface-multi/docker-compose.yaml
. Выполните шаги 2, 3 из инструкции Лицензирование через USB-ключ аппаратной защиты.
sudo docker exec -it findface-multi-findface-sf-api-1 bash -c 'cd ffmulti_dump && for x in *.json; do /storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done;'
В новых конфигурационных файлах замените пароль для
NTECH USER
на тот, который использовался в FindFace Multi 2.1.3. Старый пароль можно получить из файла резервной копии~/backup_data/configs/postgresql/40-init.sql
. ПарольNTECH USER
должен быть заменен в следующих конфигурационных файлах:findface-multi-legacy.py
findface-multi-line-crossing-analytics.yaml
findface-multi-identity-provider.py
findface-multi-alerts.yaml
findface-multi-audit.py
pgbouncer -> userlist.txt
postgresql -> 40-init.sql
В новом конфигурационном файле
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
замените значенияSECRET_KEY
в секцииGENERAL SETTINGS
и'VIDEO_DETECTOR_TOKEN'
в секцииFINDFACE SECURITY SETTINGS
на те, которые использовались в FindFace Multi 2.1.3. Старые значения можно получить из файла резервной копии~/backup_data/configs/findface-multi-legacy/findface-multi-legacy.py
.Если вы вносили изменения в конфигурационный файл
/opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
версии FindFace Multi 2.1.3, то сопоставьте изменённые вами параметры с параметрами в новом конфигурационном файле/opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
версии FindFace Multi 2.2 и внесите пользовательские параметры в него.sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
Важно
Правила переноса параметров из старого файла конфигурации в новый:
Если в новом конфигурационном файле на месте старой модели нейронной сети указана новая модель, замените новую модель на ту, которая использовалась ранее (при условии, что предыдущая модель все еще включена в FindFace Multi 2.2), а если предыдущая модель отсутствует в FindFace Multi 2.2, то ничего не меняйте. В этом случае вам придется выполнить миграцию на другую модель нейронной сети.
Если параметр в старом файле конфигурации имел пустое значение, а в новом файле конфигурации он заполнен – сотрите это значение.
Оставьте как есть параметры, не включенные в старый файл конфигурации, но присутствующие в новом файле конфигурации.
Важно
Если вы вносили изменения в конфигурационные файлы
/opt/findface-multi/configs/findface-ntls/findface-ntls.yaml
и/opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
в версии FindFace Multi 2.1.3, то сопоставьте изменённые вами параметры с параметрами в новых конфигурационных файлах/opt/findface-multi/configs/findface-ntls/findface-ntls.yaml
и/opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
версии FindFace Multi 2.2 и внесите пользовательские параметры в них при необходимости.sudo vi /opt/findface-multi/configs/findface-ntls/findface-ntls.yaml sudo vi /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
Возможно, потребуется внести изменения в файл
docker-compose.yaml
, если ранее вы добавляли или удаляли сервисы, или вносили какие-либо другие изменения.sudo vi /opt/findface-multi/docker-compose.yaml
Остановите все контейнеры FindFace Multi из директории
/opt/findface-multi
.cd /opt/findface-multi sudo docker rm -f -v findface-multi-postgresql-1 sudo rm -rf data/postgresql sudo docker-compose down
Восстановите данные из резервной копии.
Создайте контейнер postgresql заново.
sudo docker-compose up -d --force-recreate postgresql
Откройте файл
/opt/findface-multi/docker-compose.yaml
и сохраните новое значение{NEW_POSTGRES_PASSWORD}
для использования на следующем шаге. Обратите внимание, что этот пароль будет отличаться от предыдущего.grep postgresql\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD environment: {POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'no', POSTGRES_PASSWORD: {NEW_POSTGRES_PASSWORD}}
Восстановите данные из резервных копий. Вставьте значение
{NEW_POSTGRES_PASSWORD}
, которое вы скопировали ранее.sudo docker exec -i findface-multi-postgresql-1 bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres ffsecurity" < <(cat ~/backup_data/pg_bkp/legacy.sql) sudo docker exec -i findface-multi-postgresql-1 bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres ffsecurity_identity_provider" < <(cat ~/backup_data/pg_bkp/identity_provider.sql)
Запустите все контейнеры FindFace Multi.
sudo docker-compose up -d
Примечание
Вы можете дополнительно развернуть Видеомагнитофон. См. Пошаговое развертывание Видеомагнитофона.