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

Если вы уже используете наш продукт FindFace Security, вы можете обновить его до FindFace Multi.

Важно

Текущая лицензия будет определять объем функций, активированных в FindFace Multi после обновления.

Предупреждение

Имейте в виду, что при обновлении с FindFace Security 4.2 или более ранней версии видеоархивы будут утеряны. Вы не сможете их повторно обработать с другими параметрами в FindFace Multi. Если вы используете данную функциональность, сначала удалите видео в веб-интерфейсе FindFace Security. После обновления повторно загрузите и обработайте те видео, которые вы хотите сохранить, в FindFace Multi.

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

Вы можете найти видеоархивы в директории /var/lib/findface-security/uploads/videos/ (путь по умолчанию). Действительный путь к директории указан в параметре MEDIA_ROOT в файле /etc/findface-security/conf.py. Рекомендуется удалить данные видео, если они вам больше не нужны.

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

  1. Откройте файл конфигурации /etc/findface-security/config.py (/etc/ffsecurity/config.py). Сохраните для последующего использования значения следующих параметров: EXTERNAL_ADDRESS, SECRET_KEY, VIDEO_DETECTOR_TOKEN, ROUTER_URL.

    # FindFace Security 4.2 and earlier
    
    sudo vi /etc/ffsecurity/config.py
    
    # FindFace Security 4.3 and later
    
    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',
       ...
    }
    
  2. Остановите сервис findface-security.

    sudo systemctl stop findface-security*.service
    
  3. Создайте резервную копию базы данных векторов признаков на основе 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
    
  4. Установите apt-репозиторий с версией FindFace Multi, используя консольный инсталлятор согласно инструкции в этом разделе.

  5. Для обновления c FindFace Security 4.1.2 или более ранней версии выполните следующие действия:

    1. Предоставьте надежный пароль пользователю ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере ниже). Внесите учетные данные в список пользователей pgbouncer.

      echo '"ntech" "9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3"' | sudo tee -a /etc/pgbouncer/userlist.txt
      
    2. Установите пакет pgbouncer следующим образом:

      sudo apt update
      sudo apt install -y pgbouncer
      
    3. Настройте pgbouncer. Откройте файл /etc/pgbouncer/pgbouncer.ini и добавьте базу данных ffsecurity в раздел databases. Настройте указанные параметры, как показано в примере ниже. Остальные параметры должны быть закомментированы.

      sudo vi /etc/pgbouncer/pgbouncer.ini
      
      [databases]
      ffsecurity = dbname=ffsecurity host=localhost port=5432 user=ntech
      [pgbouncer]
      pidfile = /var/run/postgresql/pgbouncer.pid
      listen_addr = 127.0.0.1
      listen_port = 5439
      unix_socket_dir = /var/run/postgresql
      auth_type = plain
      auth_file = /etc/pgbouncer/userlist.txt
      pool_mode = transaction
      server_reset_query = DISCARD ALL
      max_client_conn = 16384
      default_pool_size = 20
      syslog = 1
      
    4. Скопируйте пароль пользователя ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере). В PostgreSQL установите скопированный пароль для роли ntech. Откройте интерактивный терминал PostgreSQL. Появится строка postgres=#. После знака # введите следующую команду: ALTER ROLE ntech PASSWORD ‘<скопированный пароль>’.

      sudo -u postgres psql
      
      postgres=# ALTER ROLE ntech PASSWORD '9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3';
      
    5. Через интерактивный терминал PostgreSQL создайте базу данных ffcounter в PostgreSQL.

      postgres=# CREATE DATABASE ffcounter WITH OWNER ntech ENCODING 'UTF-8' LC_COLLATE='C.UTF-8' LC_CTYPE='C.UTF-8' TEMPLATE template0;
      
    6. Перезапустите PostgreSQL.

      sudo systemctl restart postgresql@10-main.service
      
    7. Создайте и настройте pgbouncer.service.

      sudo touch /etc/systemd/system/pgbouncer.service
      sudo vi /etc/systemd/system/pgbouncer.service
      

      Вставьте следующий код:

      [Unit]
      Description=Pgbouncer service
      After=postgresql.service
      Before=findface-security.service
      [Service]
      User=postgres
      Group=postgres
      ExecStart=/usr/sbin/pgbouncer "/etc/pgbouncer/pgbouncer.ini"
      [Install]
      WantedBy=multi-user.target
      
    8. Добавьте pgbouncer.service в автозагрузку и перезапустите сервис:

      sudo systemctl enable pgbouncer.service
      sudo systemctl restart pgbouncer.service
      
  6. Установите из репозитория сервисы FindFace Multi в соответствии со своей архитектурной схемой.

    CPU-версия:

    sudo apt update
    sudo apt install findface-security findface-security-ui findface-extraction-api findface-ntls findface-sf-api findface-tarantool-server findface-upload findface-video-manager findface-video-worker-cpu findface-counter findface-liveness-api
    

    GPU-версия:

    sudo apt update
    sudo apt install findface-security findface-security-ui findface-extraction-api-gpu findface-ntls findface-sf-api findface-tarantool-server findface-upload findface-video-manager findface-video-worker-gpu findface-counter findface-liveness-api
    

    Важно

    Для работы FindFace Multi на GPU требуется предварительная установка драйверов NVIDIA.

    Важно

    В какой-то момент вам будет предложено выбрать, какую версию конфигурационного файла findface-security использовать. Выберите вариант Install the packages maintainer’s version.

  7. Добавьте сервисы findface-counter и findface-liveness-api в автозагрузку.

    sudo systemctl enable findface-counter.service findface-liveness-api.service
    
  8. Откройте файл конфигурации /etc/findface-security/config.py и вставьте в него сохраненные значения параметров EXTERNAL_ADDRESS, SECRET_KEY, VIDEO_DETECTOR_TOKEN и ROUTER_URL. Заполните раздел DATABASES по аналогии: ’PORT’: 5439, ‘USER’: ‘ntech’, ‘PASSWORD’: ‘9T3g1nXy9yx3y8MIGm9fbef3dia8UTc’ (пароль из /etc/pgbouncer/userlist.txt).

    sudo vi /etc/findface-security/config.py
    ...
    # Database is used by FindFace Security to store cameras,
    # camera groups, watchlists and so on. Only PostgreSQL is supported.
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'DISABLE_SERVER_SIDE_CURSORS': True,
            'NAME': 'ffsecurity',
            'PORT': 5439, 'USER': 'ntech', 'PASSWORD': '9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3',
        }
    }
    ...
    # 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-ntls, доступную по адресу /etc/findface-ntls.cfg.dpkg-old, и сравните ее с новой версией /etc/findface-ntls.cfg. Убедитесь, что все пользовательские параметры из старой версии присутствуют в новой. Сделайте то же самое для других компонентов, например, для findface-extract-api проверьте /etc/findface-extract-api.ini.ucf-old на соответствие /etc/findface-extract-api.ini и т. д.

    sudo vi /etc/findface-ntls.cfg.dpkg-old
    sudo vi /etc/findface-ntls.cfg
    sudo vi /etc/findface-extraction-api.ini.ucf-old
    sudo vi /etc/findface-extraction-api.ini
    
    ...
    
  10. Перезагрузите сервисы.

    sudo systemctl restart findface-ntls findface-extraction-api findface-video-worker* findface-video-manager findface-sf-api findface-counter findface-liveness-api
    
  11. Измените структуру базы данных Tarantool с помощью файла tnt_schema.lua из FindFace Multi.

    sudo findface-security make_tnt_schema | sudo tee /etc/findface-security/tnt_schema.lua
    
  12. Остановите шарды findface-tarantool-server. Удалите данные из каталогов, соответствующих активным шардам.

    sudo systemctl stop 'tarantool@*'
    
    sudo rm /opt/ntech/var/lib/tarantool/shard-*/{index,snapshots,xlogs}/*
    
  13. Перейдите в директорию с файлами конфигурации Tarantool /etc/tarantool/instances.available/. Проверьте, содержит ли каждый файл конфигурации shard-*.lua команду dofile и определения meta_indexes и meta_scheme, как показано в примере ниже.

    sudo vi /etc/tarantool/instances.available/shard-*.lua
    
    ...
    dofile("/etc/findface-security/tnt_schema.lua")
    ...
    FindFace.start("127.0.0.1", 8101, {
        license_ntls_server="127.0.0.1:3133",
        meta_indexes=meta_indexes,
        meta_scheme = meta_scheme
    })
    
  14. Перезапустите шарды 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
    
  15. Восстановите базу данных Tarantool из резервной копии.

    cd /etc/findface_dump
    
    for x in *.json; do sudo findface-storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done
    
  16. Выполните миграцию старых данных с версии API v2 на v3 сервиса findface-sf-api.

    sudo findface-sf-api-migrate-v2-v3 -config /etc/findface-sf-api.ini
    
  17. Перенесите схему базы данных из FindFace Multi в PostgreSQL, заново создайте группы пользователей с предустановленными правами и первого пользователя с правами администратора.

    sudo findface-security migrate
    sudo findface-security create_groups
    sudo findface-security create_default_user
    
  18. Перезапустите сервис findface-security.

    sudo systemctl restart findface-security.service
    

Важно

Для того чтобы сохранить совместимость FindFace Multi со средой установки, настоятельно рекомендуется отключить автоматическое обновление Ubuntu. В этом случае вы сможете обновлять ОС вручную, контролируя процесс обновления отдельных пакетов.

Для отключения автоматического обновления 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