Обновление до FindFace Multi 2.3

Совет

Если вы используете наш продукт FindFace Security, развернутый в Ubuntu 18.04, сначала обновите его до FindFace Multi 1.2, а затем обновите до FindFace Multi 2.3.

Если вы используете FindFace Multi 2.2.1, обновите систему до FindFace Multi 2.3 с помощью следующей инструкции.

Если вы используете версии FindFace Multi от 2.0, а также минорные версии ниже 2.3, обязательно ознакомьтесь со схемой обновления, представленной на рисунке ниже.

releases_2.0_to_2.3

Если вы используете 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.3

Важно

Перед началом обновления отключите все камеры.

Примечание

Если в версии FindFace Multi 1.2 вы создавали карточки человека или автомобиля с кастомными метаполями, то, чтобы они продолжали отображаться в интерфейсе FindFace Multi 2.3, необходимо в шаге №2 скопировать секцию CUSTOM_FIELDS из старого конфигурационного файла и в шаге №8 перенести ее в новый конфигурационный файл.

Для обновления FindFace Multi 1.2 до версии FindFace Multi 2.3 выполните следующие действия:

  1. Создайте резервную копию старой схемы базы данных Tarantool:

    sudo cp /etc/findface-security/tnt_schema.lua /etc/findface-security/old_tnt_schema.lua
    

    Начиная с версии 2.0, одним из самых существенных отличий FindFace Multi от предыдущих версий продукта является структура биометрической базы данных Tarantool (так называемая «метасхема»). В новой структуре выделено несколько пространств (spaces), тогда как в прежних версиях было только одно пространство (space) по умолчанию.

  2. Откройте файл конфигурации /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
    #             },
    #         ]
    #     }
    # },
    }
    
  3. Остановите сервис findface-security.

    sudo systemctl stop findface-security.service
    
  4. Создайте резервную копию базы данных векторов признаков на основе 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.3, требуется дополнительный шаг. Создайте резервную копию MongoDB:

    sudo mongodump --out /etc/findface_dump/mongo_dump
    
  5. Перед установкой новой версии остановите и отключите все сервисы во избежание конфликта портов.

    Примечание

    В примере ниже восемь шардов. Если количество шардов в вашей системе отличается от количества шардов в примере, измените приведенную ниже команду соответствующим образом. Например, для системы с шестнадцатью шардами замените 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
    
  6. Установите экземпляр FindFace Multi 2.3. Не забудьте предварительно подготовить сервер:

    См.:

  7. После установки продукта остановите все контейнеры FindFace Multi из директории /opt/findface-multi/.

    cd /opt/findface-multi/
    
    sudo docker-compose stop
    
  8. Откройте файл конфигурации /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',
    
  9. Если вы вносили изменения в конфигурационные файлы сервисов findface-extraction-api, findface-ntls и findface-sf-api версии FindFace Multi 1.2, то сопоставьте изменённые вами параметры с параметрами в новых конфигурационных файлах версии FindFace Multi 2.3 и перенесите пользовательские параметры, такие как сетевые настройки (порты, URL и тд). Если параметр в старом конфигурационном файле версии FindFace Multi 1.2 не был изменен пользователем вручную, а в новом конфигурационном файле версии FindFace Multi 2.3 имеет другое значение после обновления, то изменять его вручную не рекомендуется.

    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.3 не имеет обратной совместимости с нейронными моделями предыдущих версий FindFace Multi 1.2 и ниже. Поэтому наименования нейронных сетей из конфигурационного файла /etc/findface-extraction-api.ini переносить нельзя в новый конфигурационный файл /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml.

  10. Измените структуру базы данных Tarantool, применив схему tnt_schema.lua из версии Findface Multi 2.3.

    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.3.0 make-tnt-schema | sudo tee /etc/findface-security/tnt_schema.lua
    
  11. Удалите данные из каталогов, соответствующих активным шардам.

    sudo rm /opt/ntech/var/lib/tarantool/shard-*/{index,snapshots,xlogs}/*
    
  12. Скопируйте метасхему пространства (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
      },
    
  13. Перейдите в директорию с файлами конфигурации 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
     })
    
  14. Удалите генерируемый пакетом findface-tarantool-server дефолтный конфигурационный файл FindFace.lua (он помешает сделать перезагрузку).

    sudo rm -rf /etc/tarantool/instances*/FindFace.lua
    
  15. Перезапустите шарды 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 и т. д.).

  16. Восстановите в базе старые данные из резервной копии. Данные будут восстановлены в том виде, в котором они существовали в предыдущей версии: все галереи останутся в пространстве 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
    
  17. Откройте файл конфигурации /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py и временно измените значение параметра 'SF_API_ADDRESS' на 'http://127.0.0.1:18411'. Верните параметру его первоначальное значение на шаге №19.6:

    sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
    ...
    'SF_API_ADDRESS': 'http://127.0.0.1:18411'
    
  18. Выполните миграцию галерей из пространства 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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate_tnt_space
    
  19. Выполните миграции базы данных PostgreSQL для совместимости с FindFace Multi 2.3. Сделайте следующее:

    19.1. Перейдите в файл конфигурации /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py. В секции DATABASES default временно поменяйте пароль PASSWORD на старый, используемый в конфигурационном файле /etc/findface-security/config.py. Также замените хост и порт на 'HOST': '127.0.0.1' и 'PORT': 5439. Верните этим параметрам их первоначальные значения на шаге №19.6.

    Важно

    Обязательно сохраните пароль из файла конфигурации /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'
        }
    }
    

    19.2. В файле /etc/pgbouncer/pgbouncer.ini добавьте следующую строку в секцию databases:

    ffsecurity_session = dbname=ffsecurity host=localhost port=5432 user=ntech pool_mode=session pool_size=10
    

    19.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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
    

    19.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
    

    Кроме того, скопируйте настройки прав доступа для групп камер и списков наблюдения.

    sudo -u postgres psql -d ffsecurity -c "\copy (SELECT id, created_date, modified_date, name, created_by FROM ffsecurity_watchlist) TO stdout WITH CSV HEADER" | sudo tee ffsecurity_watchlist_data.csv
    sudo -u postgres psql -d ffsecurity -c "\copy (SELECT id, created_date, modified_date, name, created_by FROM ffsecurity_cameragroup) TO stdout WITH CSV HEADER" | sudo tee ffsecurity_cameragroup_data.csv
    

    19.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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py dump_permissions | sudo tee permissions.csv
    

    19.6. Поменяйте обратно пароль, измененный на шаге №19.1. Также восстановите исходные значения для хоста и порта в секции DATABASES default: 'HOST': 'pgbouncer', 'PORT': 6432. Для параметра 'SF_API_ADDRESS' установите исходное значение 'http://findface-sf-api:18411', замененное на шаге №17:

    19.7. Остановите все сервисы.

    sudo systemctl stop findface-sf-api.service nginx.service tarantool@shard-00{1..8}.service postgresql.service pgbouncer.service findface-ntls.service
    

    19.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}}
    

    19.9. Удалите все данные PostgreSQL. Затем запустите PostgreSQL, запустив контейнеры, и заново создайте все существующие базы данных.

    sudo rm -rf data/postgresql
    sudo docker-compose up -d --force-recreate postgresql
    

    19.10. Восстановите данные в только что созданную базу ffsecurity. Вставьте значение {NEW_POSTGRES_PASSWORD}, которое вы ранее скопировали в шаге №19.8, в команду ниже:

    sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres ffsecurity" < dump_ffsecurity.sql
    

    19.11. Запустите миграции.

    sudo docker-compose up -d pgbouncer
    sudo docker run --rm --network multi-network --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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
    

    19.12. Восстановите права доступа для групп камер и списков наблюдения. Вставьте значение {NEW_POSTGRES_PASSWORD}, которое вы ранее скопировали в шаге №19.8, в команду ниже:

    cat ffsecurity_watchlist_data.csv | docker-compose exec -i -T -e PGPASSWORD={NEW_POSTGRES_PASSWORD} postgresql psql -U postgres -d ffsecurity_identity_provider -c "\copy ffsecurity_watchlist FROM stdin WITH CSV HEADER"
    cat ffsecurity_cameragroup_data.csv | docker-compose exec -i -T -e PGPASSWORD={NEW_POSTGRES_PASSWORD} postgresql psql -U postgres -d ffsecurity_identity_provider -c "\copy ffsecurity_cameragroup FROM stdin WITH CSV HEADER"
    

    19.13. Восстановите данные в базу ffsecurity_identity_provider. Вставьте значение {NEW_POSTGRES_PASSWORD}, которое вы ранее скопировали в шаге №19.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
    

    19.14. Запустите все сервисы.

    sudo docker-compose up -d
    

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

    sudo docker run --rm --network multi-network --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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py export_to_outbox --watchlists
    sudo docker run --rm --network multi-network --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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py export_to_outbox --cameragroups
    

    19.16. Прежде чем восстановить права доступа ролей в сервис identity_provider, проверьте файл /opt/findface-multi/permissions.csv. Обязательно замените *_ffsecauthtoken на *_authtoken, если таковой имеется. Чаще всего это применимо к тем случаям, когда установка FindFace Multi 1.2 представляла собой обновление с более ранних версий продукта.

    После этого восстановите права доступа ролей в сервис identity_provider.

    sudo docker run --rm --network multi-network -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.3.0 /opt/findface-security/bin/python3 /tigre_prototype/manage.py load_permissions /var/permissions.csv
    

    19.17. Скопируйте полные кадры, нормализованные изображения и лицензионный файл. Скопируйте файлы из папки /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/*
    

    19.18. Чтобы перенести данные 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
    

    Смонтируйте /etc/findface_dump_final в тома (volumes) сервиса findface-sf-api:

    sudo vi /opt/findface-multi/docker-compose.yaml
    
    ...
      findface-sf-api:
        command: [--config=/etc/findface-sf-api.yml]
        depends_on: [memcached]
        image: docker.int.ntl/ntech/universe/sf-api:ffserver-12.241211.2
        logging: {driver: journald}
        networks: [product-network]
        restart: always
        volumes: ['./configs/findface-sf-api/findface-sf-api.yaml:/etc/findface-sf-api.yml:ro',
        '/etc/findface_dump_final:/etc/findface_dump_final']
    

    Остановите остальные сервисы, очистите директорию 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 docker exec -it findface-multi-findface-sf-api-1 /bin/bash -c "/storage-api-restore -config /etc/findface-sf-api.yml /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.2.1 до FindFace Multi 2.3

Для обновления FindFace Multi 2.2.1 до версии FindFace Multi 2.3 выполните следующие действия:

  1. В домашней директории пользователя создайте папку для резервного копирования данных FindFace Multi 2.2.1.

    mkdir ~/backup_data/
    
  2. Создайте резервную копию конфигурационных файлов 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/
    
  3. Сделайте резервное копирование данных PostgreSQL.

    1. Из файла /opt/findface-multi/docker-compose.yaml сохраните значение {POSTGRES_PASSWORD} для использования в последующих командах.

      grep postgresql\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD
          environment: {POSTGRES_PASSWORD: {POSTGRES_PASSWORD}}
      
    2. Создайте папку для резервного копирования данных PostgreSQL.

      mkdir ~/backup_data/pg_bkp
      
    3. Создайте резервные копии legacy.sql и identity_provider.sql и вставьте значение {POSTGRES_PASSWORD}, которое вы ранее скопировали. Если вы настраивали Тревоги и Аналитику BI, также создайте резервные копии баз данных annex (superset.sql и alerts.sql).

      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
      sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} pg_dump --username postgres superset" > ~/backup_data/pg_bkp/superset.sql
      sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} pg_dump --username postgres alerts" > ~/backup_data/pg_bkp/alerts.sql
      
  4. Если вы настраивали Тревоги и Аналитику BI, сделайте резервное копирование данных TimescaleDB.

    1. Из файла /opt/findface-multi/docker-compose.yaml сохраните значение {TIMESCALEDB_PASSWORD} для использования в последующих командах.

      grep timescaledb\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD
          environment: {PGPORT: 5433, POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'yes', POSTGRES_PASSWORD: {TIMESCALEDB_PASSWORD}}
      
    2. Создайте папку для резервного копирования данных TimescaleDB.

      mkdir ~/backup_data/tdb_bkp
      
    3. Создайте резервные копии annex.sql and analytics.sql и вставьте значение {TIMESCALEDB_PASSWORD}, которое вы ранее скопировали.

      sudo docker exec -i findface-multi-timescaledb-1 /bin/bash -c "PGPASSWORD={TIMESCALEDB_PASSWORD} pg_dump --username postgres annex" > ~/backup_data/tdb_bkp/annex.sql
      sudo docker exec -i findface-multi-timescaledb-1 /bin/bash -c "PGPASSWORD={TIMESCALEDB_PASSWORD} pg_dump --username postgres analytics" > ~/backup_data/tdb_bkp/analytics.sql
      
  5. Сделайте резервное копирование данных 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/
    
  6. Для папки backup_data/, расположенной в домашней директории пользователя, выполните команду ls, чтобы просмотреть содержимое папки. Оно должно быть таким:

    ls ~/backup_data/
    configs  docker-compose.yaml  ffmulti_dump  pg_bkp  tdb_bkp
    

    Для каталогов pg_bkp и tdb_bkp также выполните команду ls, чтобы просмотреть их содержимое. Оно должно быть таким:

    ls ~/backup_data/pg_bkp/
    alerts.sql  identity_provider.sql  legacy.sql  superset.sql
    ls ~/backup_data/tdb_bkp/
    analytics.sql  annex.sql
    
  7. Остановите все контейнеры FindFace Multi.

    sudo docker-compose down
    
  8. Удалите папки /opt/findface-multi/data/findface-tarantool-server/, /opt/findface-multi/data/postgresql/ и /opt/findface-multi/data/timescaledb/

    sudo rm -r /opt/findface-multi/data/findface-tarantool-server/
    sudo rm -r /opt/findface-multi/data/postgresql/
    sudo rm -r /opt/findface-multi/data/timescaledb/
    
  9. Установите экземпляр FindFace Multi 2.3 в директорию /opt/findface-multi.

  10. Восстановите данные Tarantool из резервной копии.

    1. Скопируйте папку ~/backup_data/ffmulti_dump/ в контейнер findface-multi-findface-sf-api-1.

      sudo docker cp  ~/backup_data/ffmulti_dump/ findface-multi-findface-sf-api-1:/
      
    2. Восстановите данные 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.yml < "$x"; done;'
    
  11. В новых конфигурационных файлах замените пароль для NTECH USER на тот, который использовался в FindFace Multi 2.2.1. Старый пароль можно получить из файла резервной копии ~/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

  12. В новом конфигурационном файле /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py замените значения SECRET_KEY в секции GENERAL SETTINGS и 'VIDEO_DETECTOR_TOKEN' в секции FINDFACE SECURITY SETTINGS на те, которые использовались в FindFace Multi 2.2.1. Старые значения можно получить из файла резервной копии ~/backup_data/configs/findface-multi-legacy/findface-multi-legacy.py.

  13. Если вы вносили изменения в конфигурационный файл /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml версии FindFace Multi 2.2.1, то сопоставьте изменённые вами параметры с параметрами в новом конфигурационном файле /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml версии FindFace Multi 2.3 и внесите пользовательские параметры в него.

    sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
    

    Важно

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

    • Если в новом конфигурационном файле на месте старой модели нейронной сети указана новая модель, замените новую модель на ту, которая использовалась ранее (при условии, что предыдущая модель все еще включена в FindFace Multi 2.3), а если предыдущая модель отсутствует в FindFace Multi 2.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.1, то сопоставьте изменённые вами параметры с параметрами в новых конфигурационных файлах /opt/findface-multi/configs/findface-ntls/findface-ntls.yaml и /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml версии FindFace Multi 2.3 и внесите пользовательские параметры в них при необходимости.

    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
    
  14. Из директории /opt/findface-multi удалите контейнер findface-multi-postgresql-1 и каталог data/postgresql, остановите все контейнеры FindFace Multi. Если вы настраивали Тревоги и Аналитику BI, удалите также контейнер findface-multi-timescaledb-1 и каталог data/postgresql.

    cd /opt/findface-multi
    sudo docker rm -f -v findface-multi-postgresql-1
    sudo docker rm -f -v findface-multi-timescaledb-1
    sudo rm -rf data/timescaledb
    sudo rm -rf data/postgresql
    sudo docker-compose down
    
  15. Восстановите данные из резервной копии.

    1. Создайте контейнеры postgresql и timescaledb заново.

      sudo docker-compose up -d --force-recreate postgresql
      sudo docker-compose up -d --force-recreate timescaledb
      
    2. Откройте файл /opt/findface-multi/docker-compose.yaml и сохраните новые значения {NEW_POSTGRES_PASSWORD} и {NEW_TIMESCALEDB_PASSWORD} для использования на следующем шаге. Обратите внимание, что эти пароли будет отличаться от предыдущих.

      grep postgresql\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD
          environment: {POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'no', POSTGRES_PASSWORD: {NEW_POSTGRES_PASSWORD}}
      
      grep timescaledb\: docker-compose.yaml -A5 | grep POSTGRES_PASSWORD
          environment: {PGPORT: 5433, POSTGRESQL_ALLOW_REMOTE_CONNECTIONS: 'yes', POSTGRES_PASSWORD: {NEW_TIMESCALEDB_PASSWORD}}
      
    3. Восстановите данные из резервных копий. Вставьте значения {NEW_POSTGRES_PASSWORD} для postgresql и {NEW_TIMESCALEDB_PASSWORD} для timescaledb, которые вы скопировали ранее.

      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)
      sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres superset" < <(cat ~/backup_data/pg_bkp/superset.sql)
      sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={NEW_POSTGRES_PASSWORD} psql --username postgres alerts" < <(cat ~/backup_data/pg_bkp/alerts.sql)
      
      sudo docker exec -i findface-multi-timescaledb-1 /bin/bash -c "PGPASSWORD={NEW_TIMESCALEDB_PASSWORD} psql --username postgres annex" < <(cat ~/backup_data/tdb_bkp/annex.sql)
      sudo docker exec -i findface-multi-timescaledb-1 /bin/bash -c "PGPASSWORD={NEW_TIMESCALEDB_PASSWORD} psql --username postgres analytics" < <(cat ~/backup_data/tdb_bkp/analytics.sql)
      
  16. Запустите все контейнеры FindFace Multi.

    sudo docker-compose up -d
    

Примечание

Вы можете дополнительно развернуть Видеомагнитофон. См. Пошаговое развертывание Видеомагнитофона.