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

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

Начиная с версии 4.1, FindFace Security использует новую версию Tarantool. Биометрическая база данных из предыдущих версий FindFace Security (4.0 и более ранних) НЕСОВМЕСТИМА с FindFace Security 4.2. При обновлении продукта до 4.2 обязательно используйте функцию резервного копирования / восстановления (см. полный алгоритм ниже).

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

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

    sudo vi /etc/ffsecurity/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*
    
  3. Создайте резервную копию биометрической базы данных на основе Tarantool в любой выбранной директории, например, /tmp/dump.

    mkdir -p /tmp/dump
    cd /tmp/dump
    sudo findface-storage-api-dump -config /etc/findface-sf-api.ini
    
  4. Установите apt-репозиторий с новой версией FindFace Security, используя консольный инсталлятор согласно инструкции в этом разделе.

  5. Установите пакет pgbouncer следующим образом:

    sudo apt update
    sudo apt install -y pgbouncer
    
  6. Предоставьте надежный пароль пользователю ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере ниже). Внесите учетные данные в список пользователей pgbouncer.

    echo '"ntech" "9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3"' | sudo tee -a /etc/pgbouncer/userlist.txt
    
  7. Настройте pgbouncer. Откройте файл /etc/pgbouncer/pgbouncer.ini и добавьте базу данных ffsecurity в раздел databases. Настройте другие параметры, как показано в примере ниже.

    sudo vi /etc/pgbouncer/pgbouncer.ini
    
    [databases]
    ffsecurity = dbname=ffsecurity host=localhost port=5432 user=ntech
    
    ...
    auth_type = plain
    pool_mode = transaction
    max_client_conn = 16384
    syslog = 1
    listen_port = 5439
    
  8. Скопируйте пароль пользователя ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере). В PostgreSQL установите скопированный пароль для роли ntech. Откройте интерактивный терминал PostgreSQL. Появится строка postgres=#. После знака # введите следующую команду: ALTER ROLE ntech PASSWORD ‘<скопированный пароль>’.

    sudo -u postgres psql
    
    postgres=# ALTER ROLE ntech PASSWORD '9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3';
    
  9. Через интерактивный терминал 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;
    
  10. Создайте и настройте pgbouncer.service.

    sudo touch /etc/systemd/system/pgbouncer.service
    sudo vim /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
    
  11. Добавьте pgbouncer.service в автозагрузку и перезапустите сервис:

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

    CPU-версия:

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

    GPU-версия:

    sudo apt update
    sudo apt install ffsecurity ffsecurity-ui findface-extraction-api-gpu findface-ntls findface-sf-api findface-tarantool-server findface-upload findface-video-manager findface-video-worker-gpu findface-gpudetector-data findface-counter
    

    Важно

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

  13. Добавьте сервис findface-counter в автозагрузку.

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

    sudo vi /etc/ffsecurity/config.py
    
    EXTERNAL_ADDRESS = "http://172.20.77.58"
    
    ...
    
    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 = 'c8b533847bbf7142102de1349d33a1f6'
    
    FFSECURITY = {
       'VIDEO_DETECTOR_TOKEN': '381b0f4a20495227d04185ab02f5085f',
       ...
       'ROUTER_URL': 'http://172.20.77.58',
       ...
    }
    
  15. Измените структуру базы данных Tarantool с помощью файла tnt_schema.lua из новой версии.

    sudo findface-security make_tnt_schema | sudo tee /etc/ffsecurity/tnt_schema.lua
    
  16. Остановите шарды findface-tarantool-server. Удалите базу данных Tarantool (базу по умолчанию или шарды).

    sudo systemctl stop 'tarantool@*'
    
    sudo rm -R /opt/ntech/var/lib/tarantool/shard-00*/index/*
    sudo rm -R /opt/ntech/var/lib/tarantool/shard-00*/snapshots/*
    sudo rm -R /opt/ntech/var/lib/tarantool/shard-00*/xlogs/*
    
  17. Перезапустите шарды findface-tarantool-server.

    TNT=$(ls /etc/tarantool/instances.enabled/ | wc -l)
    for i in $(seq 1 $TNT); do sudo systemctl start tarantool@shard-00$i.service ; done
    
  18. Перезагрузите сервисы.

    sudo systemctl restart findface-security.service
    sudo systemctl restart findface-ntls findface-extraction-api findface-video-worker* findface-video-manager findface-sf-api findface-counter
    
  19. Восстановите базу данных Tarantool из резервной копии.

    cd /tmp/dump
    
    for x in *.json; do sudo findface-storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done
    
  20. Перенесите схему базы данных из FindFace Security в PostgreSQL, заново создайте группы пользователей с предустановленными правами и первого пользователя с правами администратора.

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

    На Ubuntu 16.04:

    sudo systemctl restart postgresql@9.5-main.service
    

    На Ubuntu 18.04:

    sudo systemctl restart postgresql@10-main.service