Skip to main content
Skip table of contents

Установка оркестратора и его компонентов

В подразделе представлена вся необходимая информация для установки и настройки оркестратора и его компонентов:

  • Server Orchestration

  • Redis for Server Orchestrator

  • Nginx for Server Orchestrator

  • MySQL for Server Orchestrator

  • Tarantool for Server Orchestrator (Matcher Service)

  • Push1st for Server Orchestrator

  • ClickHouse for Server Orchestrator

1. Установка компонентов и зависимостей.

  • redis-server – утилита, для создания виртуального окружения

  • mysql-server mysql-client python3-dev default-libmysqlclient-dev build-essential – MySQL и его зависимости

  • nginx – HTTP-сервер и обратный прокси-сервер (если необходимо)

  • python3-virtualenv – библиотека для создания виртуального окружения

CODE
#!/bin/bash 
sudo apt update && sudo apt install -y apt-transport-https \
                                       ca-certificates \
                                       dirmngr \
                                       redis-server \
                                       mysql-server \
                                       mysql-client \
                                       python3-dev \
                                       default-libmysqlclient-dev \
                                       build-essential \
                                       nginx \
                                       python3-virtualenv \
                                       python3-pip
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start

2. Произведите клонирование проекта оркестратора из репозитория

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/<xxxx>-analytics-orchestrator-server.git /opt/analytics-orchestrator-server

git clone --branch 22.09.1.0 https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/<xxxx>-analytics-orchestrator-server.git /opt/analytics-orchestrator-server

3. В корне проекта создайте виртуальное окружение venv и активируйте его

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-server
virtualenv venv
source venv/bin/activate

4. Сделайте установку зависимых пакетов pip install -r requirements.txt

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-server
pip install -r requirements.txt

5. Загрузите схему базы, схема лежит в server/management/events_collector/db/events_extracted_xxxx.sql проекта

BASH
#!/bin/bash
clickhouse-client -n < /opt/analytics-orchestrator-server/server/management/events_collector/db/events_extracted_xxxx.sql

6. Создайте пользователя vms в clickhouse, для этого нужно отредактировать конфигурационный файл /etc/clickhouse-server/users.d/xxxx..xml

xxxx.xml
BASH
<clickhouse>
    <users>
      <xxxx>
          <profile>default</profile>
            <networks>
                  <ip>::/0</ip>
            </networks>
          <password>xxxx</password>
          <quota>default</quota>
      </xxxx>
    </users>
</clickhouse>

6.1. Измените параметр listen_host на 0.0.0.0 для clickhouse-server в файле /etc/clickhouse-server/config.xml

BASH
<!-- Listen specified address.
         Use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere.
         Notes:
         If you open connections from wildcard address, make sure that at least one of the following measures applied:
         - server is protected by firewall and not accessible from untrusted networks;
         - all users are restricted to subset of network addresses (see users.xml);
         - all users have strong passwords, only secure (TLS) interfaces are accessible, or connections are only made via TLS interfaces.
         - users without password have readonly access.
         See also: https://www.shodan.io/search?query=clickhouse
      -->
    <listen_host>0.0.0.0</listen_host>

7. Проверьте работу сервисов

BASH
systemctl restart clickhouse-server.service
systemctl status clickhouse-server.service

8. Установите push1st и необходимые компоненты/зависимости

BASH
#!/bin/bash
# Add repository key
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9A4D3B9B041D12EF0D23694D8222A313EDE992FD
# Add repository to source list and adjust auth
echo "deb [arch=amd64] https://nexus.<company>.com/repository/ubuntu-universe/ universe main" | sudo tee /etc/apt/sources.list.d/push1st.list
echo "machine nexus.<company>.com/repository login public password public" | sudo tee /etc/apt/auth.conf.d/nexus.<company>.com.conf
sudo apt update && sudo apt install -y push1st
#возможны проблемы с версией push1st
# additional dependencies (If necessary, this is optional)
sudo luarocks install lua-cjson2

9. Настройте сервис push1st

BASH
#!/bin/bash
nano /opt/<company>/push1st/server.yml 
server.yml
BASH
# ssl forward declaration
ssl:
    - &default-ssl
      key: # path to SSL private key file
      cert: # path to SSL cert file

# channels configuration section
server:
    proto: [ pusher, websocket ]       # enabled proto
    threads: 5                  # number of worker threads
    max-request-payload: 65400  # global max request payload length less or equal 65400
    listen: tcp://*:6003   # false, tcp://<host>:<port>
    ssl: { enable: false, *default-ssl }
    app-path: app/  # <proto>/<app-path>/<app-key> url
    pusher:
        path: /pusher/
        activity-timeout: 40    # pusher activity timeout (pusher ping\pong) N seconds
        whitelist: []
    websocket:
        path: /ws/
        activity-timeout: 3600    # ws activity timeout (pusher ping\pong) N seconds
        push: { public, private, presence } # enable\disable push functionality on channels
        whitelist: []
    mqtt:
        path: /mqtt/
        activity-timeout: 3600    # ws activity timeout (pusher ping\pong) N seconds
        push: { public, private, presence } # enable\disable push functionality on channels
        whitelist: []

#cluster:
#    listen: disable # udp://<host>:<port>, multicast://<multicast-group-address>:<port>/<bind-iface-ip-address>
#    ping-interval: 30 # 0 - to disable ping
#    listen: udp://*:8001 # strongly recommended bind to internal IP or close port with iptables
#    family: [ node1.push1st.local, node2.push1st.local ]
#    sync: [ register, unregister, join, leave, push ]
#    module: lua://modules/cluster.lua # cluster module

api:
    keep-alive-timeout: 10          # http api keep-alive connection timeout
    interface: pusher
    ssl: { enable: false, *default-ssl }
    path: /apps/
    whitelist: []
    listen: [ tcp://*:6002/ ]

credentials:
    - apps/*.yml

10. Настройте интеграции с оркестратором видеоаналитики

BASH
#!/bin/bash
nano /opt/<company>/push1st/apps/orchestrator.yml
orchestratot.yml
BASH
orchestrator:
  enbale: true
  name: "Orchestrator"
  key: "app-key"
  secret: "secret"
  options: { client-messages: true, statistic: false }
  channels: [ public, private, presence ]
  origins: [ ]
  hook:
    trigger:
        - register # hook on register channel
        - unregister # hook on unregister channel
        - join # hook on subscribe to channel
        - leave # hook on leave channel
#        - push # hook on subscriber push message to channel, may be increase message delivery latency
    http-pipelining: false
    endpoint:
        - http://<IP-orchestrator-server>:8000/api/events/
#        - lua://modules/hook.lua        

11. Запустите сервис и его проверьте его работу

BASH
#!/bin/bash
systemctl restart push1st.service 
systemctl status push1st.service

12. Установите Tarantool версии 2.8

BASH
#!/bin/bash
curl -L https://tarantool.io/XWleucj/release/2.8/installer.sh | bash
sudo apt update && sudo apt install -y tarantool

13. Проверьте работу сервисов

BASH
#!/bin/bash
systemctl status tarantool

В директории tarantool_app лежит файл: tarantool_service.lua. Скопируйте его в в директорию /etc/tarantool/instances.enabled:

CODE
sudo cp tarantool_app/tarantool_service.lua /etc/tarantool/instances.enabled/tarantool_service.lua

В скопированном файле укажите путь к рабочей директории с lua-скриптами (параметр work_dir):

BASH
nano /etc/tarantool/instances.enabled/tarantool_service.lua

box.cfg {
   listen = 3301,
   background = true,
   log = '/var/log/tarantool/vectors.log',
   work_dir = '/opt/analytics-orchestrator-server/tarantool_app'
}

local app = require('app').run()

Далее запустите сервис:

CODE
sudo tarantoolctl start tarantool_service.lua

Проверьте работу сервиса:

CODE
sudo tarantoolctl status tarantool_service

В директории /var/log/tarantool лежит файл с логами (vectors.log)

14. В MySQL создайте базу данных – CREATE DATABASE orchestrator_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

BASH
#!/bin/bash
mysql -u root -e "CREATE DATABASE orchestrator_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"

#если конетйнерная инсталяция и база для СС и аналитики одна и та же, то можно ее создать
из контейнера с бэкендом следующей командой:
docker exec <backend-container-name-or-id> mysql --protocol=TCP -u root -pmysql -h mysql-server --execute="CREATE DATABASE orchestrator_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"

15. Из файла example.env сделайте копию и назовите ее .env. В этом файле отредактируйте настройки для MySQL, Redis и Tarantool.

BASH
#!/bin/bash
cd/opt/analytics-orchestrator-server
cp example.env .env

16. Создайте папку логов для проекта /var/log/django

BASH
#!/bin/bash
mkdir -p /var/log/django

17. Для запуска миграций, создания учетной записи для доступа к интерфейсу администрирования оркестратора и загрузки фикстур, запустите:

CODE
#!/bin/bash
cd /opt/analytics-orchestrator-server
source venv/bin/activate
python manage.py seed

18. Настройте интерфейс администрирования оркестратора

CODE
#!/bin/bash
cd /opt/analytics-orchestrator-server
# генерация фронтенда для интерфейса администрирования оркестратора
python manage.py collectstatic

Результат выполнения последней команды – путь к папке, где лежит фронтенд оркестратора. Этот путь нужно указать в настройках nginx (django-backend-nginx) – ШАГ 21

Доступ к интерфейсу администрирования оркестратора: http://<IP-orchestrator-server>/admin/

19. В корне проекта есть папка deploy, в которой находятся 5 сервисов. Сервисы необходимо отредактировать, указав в них корректные пути к проекту и окружению.

celery.service
BASH
[Unit]
Description=Celery Simple Dev Service
After=network.target

[Service]
#Type=forking
User=root
Group=root
Environment=CELERY_BIN=/opt/analytics-orchestrator-server/venv/bin/celery
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/bin/sh -c '${CELERY_BIN} -A settings worker -B'
Restart=always

[Install]
WantedBy=multi-user.target
django.service
BASH
[Unit]
Description=Django REST API application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/gunicorn -b 0.0.0.0:8000 -w 4 --access-logfile /var/log/django/dj_access.log --error-logfile /var/log/django/dj_error.log settings.wsgi:application
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target
stats_processor.service
BASH
[Unit]
Description=Process statistics from Server and Binaries
After=network.target

[Service]
#Type=forking
User=root
Group=root
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py stats_processor
Restart=always

[Install]
WantedBy=multi-user.target
matcher.service
CODE
[Unit]
Description=Matcher python application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py matcher
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target
events_collector.service
CODE
[Unit]
Description=Matcher python application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py events_collector
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

20. После этого сервисы необходимо положить в /etc/systemd/system/ и выполнить команду systemctl daemon-reload

BASH
#!/bin/bash
ln -s /opt/analytics-orchestrator-server/deploy/celery.service  /etc/systemd/system/celery.service
ln -s /opt/analytics-orchestrator-server/deploy/django.service  /etc/systemd/system/django.service
ln -s /opt/analytics-orchestrator-server/deploy/stats_processor.service  /etc/systemd/system/stats_processor.service
ln -s /opt/analytics-orchestrator-server/deploy/matcher.service  /etc/systemd/system/matcher.service
ln -s /opt/analytics-orchestrator-server/deploy/events_collector.service  /etc/systemd/system/events_collector.service
systemctl daemon-reload
systemctl enable stats_processor.service
systemctl start stats_processor.service
systemctl enable celery.service
systemctl start celery.service 
systemctl enable django.service
systemctl start django.service
systemctl enable matcher.service
systemctl start matcher.service
systemctl enable events_collector.service
systemctl start events_collector.service

21. Далее, в этой же папке deploy лежит конфигурационный файл для nginx, его необходимо перенести в /etc/nginx/sites-available/, а затем сделать ссылку на этот конфигурационный файл в /etc/nginx/sites-enabled/. После этого нужно перезагрузить сервис nginx.

django-backend-nginx
BASH
upstream django {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4

    server_name _;

    location ^~ /static/ {
     alias /opt/analytics-orchestrator-server/static/;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header Host $host:80;
        add_header 'Access-Control-Expose-Headers' 'X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset' always;
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,hl,X-Client' always;
        add_header 'Access-Control-Allow-Methods' 'PUT, PATCH, GET, POST, DELETE, OPTIONS' always;
        # include /etc/nginx/uwsgi_params;
        # uwsgi_pass django;
        if ($request_method = OPTIONS ) {
          add_header Content-Length 0;
          add_header 'Access-Control-Allow-Origin' '*' always;
          add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,hl,X-Client' always;
          add_header 'Access-Control-Expose-Headers' 'X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset' always;
          add_header Content-Type text/plain;
          add_header 'Access-Control-Allow-Methods' 'PUT, GET, PATCH, POST, DELETE, OPTIONS' always;
          return 200;
        }

        proxy_pass http://django;
    }
}
BASH
#!/bin/bash
cp /opt/analytics-orchestrator-server/deploy/django-backend-nginx /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/django-backend-nginx /etc/nginx/sites-enabled/django-backend-nginx
systemctl restart nginx.service

22. Проверьте работу сервисов

BASH
systemctl status mysql
systemctl status redis-server 
systemctl status stats_processor.service
systemctl status events_collector.service 
systemctl status django.service
systemctl status celery.service
systemctl status matcher.service
systemctl status nginx
tarantoolctl status tarantool_service

Клиент оркестратора

  • Orchestrator Client

  • Supervisor

Клиент оркестратора должен устанавливаться там же, где стоят исполняемые модули аналитики (т.к. запуск исполняемых файлов осуществляется через супервизор; также это пока что блокирует запуск клиента аналитики в контейнере).

1. Установка компонентов и зависимостей. Установите supervisor (v. 4.2.2). Подходящий вариант установки можно выбрать тут. python3-virtualenv – библиотека для создания виртуального окружения.

BASH
#!/bin/bash
sudo apt update && sudo apt install -y apt-transport-https ca-certificates dirmngr python3-pip python3-virtualenv supervisor

2. Сделайте клонирование клиента из репозитория

BASH
#!/bin/bash
git clone --branch release/22.12.0.0 git@bitbucket.org:<company>/<xxxx>-analytics-orchestrator-client.git /opt/analytics-orchestrator-client

git clone --branch release/22.12.0.0 https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/<xxxx>-analytics-orchestrator-client.git /opt/analytics-orchestrator-client

3. В корне проекта создайте виртуальное окружение venv и активируйте его

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-client
virtualenv venv
source venv/bin/activate

4. Из активного окружения venv выполните установку зависимых пакетов pip install -r requirements.txt

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-client
pip install -r requirements.txt

5. В файле settings.py необходимо указать корректный url для подключения к push1st по websocket для отправки статистики

/opt/<vms>-analytics-orchestrator-client/settings.py
PY
LISTENER_WEBSOCKET_URL = "ws://<IP-address-pushIst>:6003/ws/app/app-key/"
LISTENER_WEBSOCKET_CHANNEL = "stats"

HOST = "0.0.0.0"
PORT = 8800

STATS_PUSH_PERIOD = 2

6. В папке deploy находится сервис or-client.service. Сервисы необходимо отредактировать, указав в них корректные пути к проекту и окружению (другие настройки – по необходимости).

BASH
#!/bin/bash
nano /opt/analytics-orchestrator-client/deploy/or-client.service
or-client.service
BASH
[Unit]
Description=Orchestrator client application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-client/
ExecStart=/opt/analytics-orchestrator-client/venv/bin/python main.py
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

7. После изменения файлов сервиса необходимо сделать ссылки на сервисы и скопировать их в

/etc/systemd/system/, потом выполнить команду systemctl daemon-reload и запустить сервисы.

BASH
#!/bin/bash
ln -s /opt/analytics-orchestrator-client/deploy/or-client.service /etc/systemd/system/or-client.service
systemctl daemon-reload
systemctl enable or-client.service
systemctl start or-client.service

8. Проверьте работу сервисов

BASH
#!/bin/bash
systemctl status or-client.service
systemctl status supervisor.service

Исполняемый модуль для аналитики

  • VSaaS video analytics bin

  • VSaaS video analytics models

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

ВАЖНО!!! Для корректной работы исполняемый модуль аналитики и его конфигурационные файлы должны располагаться в определенном месте, а именно:

  • /opt/video-analytics/<xxxx>-video-analytics-cpu.out – сам исполняемый модуль

  • /opt/video-analytics/config – конфигурационные файлы

1. Сделайте клонирование исполняемого модуля аналитики из репозитория в папку /opt/

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/xxxx-video-analytics-bin.git /opt/xxxx-video-analytics-bin

git clone https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/xxxx-video-analytics-bin.git /opt/xxxx-video-analytics-bin

2. Сделайте клонирование модели для аналитики из репозитория в папку /opt/

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/xxxx-video-analytics-models.git /opt/xxxx-video-analytics-models

git clone https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/xxxx-video-analytics-models.git /opt/xxxx-video-analytics-models

3. Из корня проекта исполняемого модуля аналитики запустите скрипт install.sh

BASH
#!/bin/bash
cd /opt/xxxx-video-analytics-bin
bash install.sh

Результатом выполнения скрипта будет директория /opt/video-analytics/. Там будут находиться сам исполняемый модуль, модели, конфигурации и необходимые зависимости.

4. Отредактируйте настройки конфигурации для запуска исполняемого модуля аналитики. Конфигурации лежат в папке /opt/video-analytics/config, нужно изменить параметр events_endpoint на url вебкоскета push1st во всех .ini файлах.

CODE
sed -i -e "s/10.1.16.238:6001/<push1st_ip_address>:6003/" /opt/video-analytics/config/*

При необходимости отредактируйте диапазон ядер, на которых будут запускаться бинари:

CODE
sed -i -e "s/cores.*/cores = <cores_range>/" /opt/video-analytics/config/*

Frontend

Перед началом установки убедитесь, что у вас установлен Node.JS

Установите Node.js

Для этого используйте команды:

  • sudo apt update

  • sudo apt install nodejs

  • sudo apt install npm

  1. Сделайте клонирование удаленного репозитория на ваш компьютер

  2. Перейдите в ветку Master, выполнив команду git checkout master

  3. Выгрузите последние изменения в этой ветке, выполнив команду git pull

  4. В директории проекта выполните команду npm i

  5. В корне проекта зайдите в файл .env и установите нужные адреса

  6. Затем выполните команду npx react-scripts build

  7. Подключитесь к серверу по SSH

  8. Убедитесь, что в директории /var/www/html/ нет файлов, если там есть файлы, выполните команду sudo rm -rf /var/www/html/*

  9. Скопируйте файлы из build в папке проекта в директорию var/www/html на сервере

  10. В файле конфигурации nginx, в конец блока http, добавить:

    CODE
    server {
      listen 8080;
      server_name localhost;
      root /var/www/html/;
      location / {
        try_files $uri $uri/ /index.html;
      }
    }

  11. Перезапустите nginx, выполнив команду sudo systemctl restart nginx.service

  12. Проверьте статус nginx, выполнив команду sudo systemctl status nginx.service

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.