Сервисы API Oz

Системные требования

  • Любая операционная система, поддерживаемая Docker, и установленный на ней версия Docker.
  • CPU: 4x cores
  • RAM: 8Gb
  • Disk 250Gb+:
    • 50 Гб — для операционной системы
    • от 100 Гб — для базы данных Postgres
    • от 100 Гб — для клиентских медиа-файлов

Дополнительные требования

  • Локальная установка nginx. Ниже приведена рекомендуемая конфигурация.
  • Доменное имя, связанное с текущим IP-адресом.
  • SSL-сертификат, связанный с доменным именем.
  • Доступный внешний порт 443 для HTTPS-доступа.
  • Все шаги по подготовке и настройке конфигурации выполняются от имени привилегированного пользователя.

Примечание. Доменное имя, SSL-сертификат и порт 443 не потребуются для тестирования в локальной сети.

Пошаговое описание установки

Вход в Docker Hub

Получите персональный токен Docker Hub для входа в частный репозиторий.


  docker login -u ozcustomer -p your_token_here docker.io

Скачайте и запустите образ последней версии продукта


  docker pull ozforensics/oz-api

Подготовьте файлы конфигурации и каталоги

Каталоги

Создайте корневой каталог для данных в своей системе. Здесь и далее мы будем исходить из того, что используется каталог по умолчанию /opt/oz.


  mkdir -p /opt/oz/postgres
  chown -R 999 /opt/oz/postgres

Запустите Postgres


  docker run --restart unless-stopped --name oz-api-pg \
  -v /opt/oz/postgres:/var/lib/postgresql/data
  -e POSTGRES_PASSWORD=CHANGEME postgres:13

Примечание. Как правило, вместо контейнера Docker можно использовать установленный локально экземпляр Postgres, следуя тем же инструкциям, которые приведены ниже.

Запустите API


  docker run -d --name oz-api --restart unless-stopped --privileged=true \
  --mount source=oz-api-nginx-vol,destination=/etc/nginx/sites-enabled \
  --mount source=oz-api-config-vol,destination=/opt/gateway/configs \
  --mount source=oz-api-static-vol,destination=/opt/gateway/static \
  --mount source=oz-api-log-vol,destination=/opt/gateway/log \
  --link oz-api-pg \
  -p 8000:8000 \
  ozforensics/oz-api

Примечание. Удалите строку со ссылкой oz-api-pg, если экземпляр Postgres установлен локально, просто укажите правильное имя хоста вашей машины в настройке DB_HOST ниже.

Каталоги API Oz

После успешного запуска интерфейса 1 будет создано несколько связанных с ним томов каталогов. Вы найдете их по адресу /var/lib/docker/volumes:

Several volumes related directories will be created afteroz-api succesfully started. You will find it at /var/lib/docker/volumes:

  • oz-api-nginx-vol — файл конфигурации для внутреннего сервера nginx
  • oz-api-config-vol — общие файлы конфигурации
  • oz-api-static-vol — медиа-данные
  • oz-api-log-vol — внутренние системные журналы. Актуальные данные вы найдете в подкаталогах inside _data. Ниже приведены подробные сведения о конфигурации.

Внимание! Необходимо следить за каталогом oz-api-static-vol, объем которого может расти неограниченно, при каждом запросе на анализ увеличиваясь на 10 Мб. При желании вы можете изменить место сохранения тома, указав другую команду для запуска docker:


  docker run -d --name oz-api --restart unless-stopped --privileged=true \
  --mount source=oz-api-nginx-vol,destination=/etc/nginx/sites-enabled \
  --mount source=oz-api-config-vol,destination=/opt/gateway/configs \
  --mount source=oz-api-log-vol,destination=/opt/gateway/log \
  --mount type=volume,dst=/opt/gateway/static,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/media/big-storage
  --link oz-api-pg \
  -p 8000:8000 \
  ozforensics/oz-api

где /media/big-storage — альтернативное хранилище.

Файлы конфигурации

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

oz-api-nginx-vol/_data/api.conf — конфигурация внутреннего сервера nginx. Укажите server_name с доменным именем вашего хоста или просто set _ (нижнее подчеркивание).

oz-api-config-vol/_data/config.py — этот файл содержит глобальные переменные для использования API. Настройки конфигурации см. в дополнительной информации. Необходимо правильно указать следующие переменные:

  • ALLOWED_HOSTS - добавьте в список ваше доменное имя.
  • DB_HOST, DB_USER, DB_PASS - измените, если вы планируете переместить контейнер oz-api-pg или используете собственную сборку базы данных
  • OZ_SERVICE_TFSS_HOST - укажите адрес вашего хоста сервисов Oz Bio. Пример адреса: http://oz-bio-tfss:8501/v1/

Для применения настроек необходимо перезапустить контейнер oz-api:


  docker restart oz-api

Подготовка и запуск базы данных

Создать базу данных можно двумя способами:

  1. распаковать и использовать демонстрационную версию базы данных
  2. перестроить пустую базу данных

Использование демонстрационной версии базы данных

Используйте этот метод, если вы получили индивидуальный архив с базой данных: oz-api-pg-data-COMPANY-NAME.tar.gz Просто распакуйте архив в созданный перед этим каталог. При этом содержимое каталога базы данных будет переписано.


  cd /opt/oz
  tar -zxvf oz-api-pg-data-COMPANY-NAME.tar.gz

Построитель базы данных

Для сборки своей базы данных вы должны запустить несколько скриптов. Предполагается, что у вас запущены оба контейнера oz-api и oz-api-pg. После выполнения вы получите учетные данные:

  1. имя для входа в шлюз базы данных:
  • имя: gateway_user
  • пароль: CHANGEUSERPASS
  1. Данные для входа в API Oz (с правами администратора):
  • имя: demo@ozforensics.com
  • пароль: 123456 Вы в любой момент можете отредактировать скрипт, чтобы изменить эти данные по умолчанию. Чтобы изменения вступили в силу, следует перезапустить контейнер oz-api.

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


  docker exec -ti oz-api-pg bash
  su postgres
  psql
  \c postgres
  DROP DATABASE gateway;
  DROP ROLE gateway_user;
  CREATE ROLE gateway_user WITH LOGIN PASSWORD 'CHANGEUSERPASS'
    INHERIT
    CONNECTION LIMIT -1
    NOSUPERUSER
    NOCREATEDB
    NOCREATEROLE
    NOREPLICATION ;
  CREATE DATABASE gateway
    WITH OWNER = gateway_user
         ENCODING = 'UTF8'
         TABLESPACE = pg_default
         CONNECTION LIMIT = -1
         LC_COLLATE='en_US.UTF-8'
         LC_CTYPE='en_US.UTF-8'
         TEMPLATE template0;
  \c gateway
  CREATE EXTENSION pgcrypto;
  \q
  exit
  exit

Создайте таблицы API и встроенную учетную запись администратора:


  docker exec -ti oz-api bash
  su oz
  cd /opt/gateway/
  source env/bin/activate
  python manage.py alchemy_create oz_core
  python manage.py alchemy_create lamb.execution_time
  python manage.py oz_create_admin --email=demo@ozforensics.com --password=123456
  exit
  exit

Создайте дополнительные индексы:


  docker exec -ti oz-api-pg bash
  su postgres
  psql
  \c gateway
  CREATE INDEX IF NOT EXISTS gw_folder_time_created_idx ON gw_folder(time_created DESC);
  CREATE INDEX IF NOT EXISTS gw_folder_time_created_folder_id_idx ON gw_folder(time_created DESC, folder_id DESC);
  CREATE INDEX IF NOT EXISTS gw_folder_time_created_nonarchive_idx ON gw_folder(time_created DESC) WHERE is_archive = FALSE;
              CREATE INDEX IF NOT EXISTS gw_folder_time_created_folder_id_nonarchive_idx ON gw_folder(time_created DESC, folder_id DESC) WHERE  is_archive = FALSE;
  CREATE INDEX IF NOT EXISTS gw_folder_resolution_comment_fts_idx ON gw_folder
    USING GIN (to_tsvector('english', resolution_comment));
  CREATE INDEX IF NOT EXISTS gw_analyse_source_media_association_analyse_id_idx ON gw_analyse_source_media_association
      USING BTREE(analyse_id);
  CREATE INDEX IF NOT EXISTS gw_folder_image_folder_id_idx ON gw_folder_image
      USING BTREE(folder_id);
  CREATE INDEX IF NOT EXISTS gw_folder_video_folder_id_idx ON gw_folder_video
      USING BTREE(folder_id);
  CREATE INDEX IF NOT EXISTS gw_analyse_abstract_folder_id ON gw_analyse_abstract
      USING BTREE(folder_id);
  CREATE INDEX IF NOT EXISTS gw_analyse_result_image_media_association_id_idx ON gw_analyse_result_image
      USING BTREE(media_association_id);
  CREATE INDEX IF NOT EXISTS gw_logging_event_session_time_created_idx ON gw_logging_event_session(time_created);
  CREATE INDEX IF NOT EXISTS gw_logging_event_record_time_created_idx ON gw_logging_event_record(time_created);
  CREATE INDEX IF NOT EXISTS gw_logging_event_record_session_id_idx ON gw_logging_event_record(session_id);
  CREATE INDEX IF NOT EXISTS gw_logging_event_record_timemark_idx ON gw_logging_event_record(timemark);
  \q
  exit
  exit

Перезапустите с новыми данными:


  docker restart oz-api

Дополнительные инструкции

Пример конфигурации хоста nginx

Примечание. Используйте эту конфигурацию только при наличии доступа через Интернет.

Вставьте приведенный блок в раздел http файла nginx.conf. Перед тем как выполнять эту операцию, подготовьте ключи SSL.


  server {
      listen 443 ssl http2 default_server;
      ssl_certificate "/etc/nginx/cert/fullchain.cer";
      ssl_certificate_key "/etc/nginx/cert/your-server-name.key";
      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout  10m;
      ssl_ciphers HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers on;

      client_max_body_size 50M;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

      include /etc/nginx/default.d/*.conf;

      location / {
          proxy_pass http://localhost:8000/;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header Host $http_host;
      }
  }

Проверка доступности API

Просто откройте в браузере адрес: https://your-server-name/api/version для тестирования через Интернет или http://your-server-name:8000/api/version для тестирования в локальной сети.

Тестирование при помощи мобильного приложения

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

  2. 2. Укажите адрес своего сервера при помощи доменного имени или IP-адреса.

  3. 3. Используйте предварительно заданные учетные данные для входа:

    • login: demo@ozforensics.com
    • password: 123456

После выполнения входа попробуйте выполнить команду «селфи» или любой другой жест.

Приятной работы!