Действия

RES. Руководство администратора: различия между версиями

Материал из Флора AI

 
(не показано 29 промежуточных версий 2 участников)
Строка 1: Строка 1:
===== '''Общее описание''' =====
===== '''Общее описание''' =====
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе URS и отправки в elasticsearch статистики работы роботов ses.
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов SES.
 
===== '''Термины и определения''' =====
===== '''Термины и определения''' =====
Report Engine Service (RES) – сервис проксирования запросов к отчетам kibana в интерфейсе UPS. Сервис отображает все отчеты kibana.
Report Engine Service (RES) – сервис проксирования запросов к отчетам Kibana в интерфейсе UPS. Сервис отображает все отчеты Kibana.
===== '''Требования к окружению''' =====
===== '''Требования к окружению''' =====
Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:
Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:
     • UPS – настройка осуществляется через файл /opt/ups/config.json
     • UPS – настройка осуществляется через файл /opt/ups/config.json
     • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположена на другом хосте
     • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположен на другом хосте
     • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположена на другом хосте
     • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположен на другом хосте
     • SES – настраивается через файл /opt/res/config.json. SES может быть расположена на другом хосте
     • SES – настраивается через файл /opt/res/config.json. SES может быть расположен на другом хосте
===== '''Установка RES''' =====  
===== '''Установка RES''' =====  


Раздел в разработке
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.
 
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
 
* Установка/обновление RES осуществляется скриптом <code>chmod +x ./res-<версия>-<релиз>.sh && ./res-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./res-<версия>-<релиз>.sh</code> без ключей.
* Загрузить последнюю версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/res/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/res</nowiki> --user '[user]:[pass]' 2>&1)"</code>.
* Обновить RES <code>/opt/res/inupdate</code> в интерактивном режиме. Или запустить с ключом:
** <code>/opt/res/inupdate -b</code> —  обновить до последней beta версии;
** <code>/opt/res/inupdate -r</code> —  обновить до последней release версии;
** <code>/opt/res/inupdate -n</code> —  обновить до последней версии (неважно beta или release).
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/res/version</nowiki></code>.
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/res/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Полное описание всех команд API репозитория можно найти по ссылке '''<nowiki>https://repo.connect2ai.net/api</nowiki>'''. <code>[user]:[pass]</code> —  это тот же логин и пароль, что и от '''Nextcloud'''.
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
** echo -n <code>"[user]:[pass]"</code> > /opt/res/.userapi (это файл авторизации в API, нужен для обновления и загрузки )
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/res/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки, при отсутствующем прямом подключении к интернету)
 
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
 
Не забудьте запустить сервис и включить в автозапуск в системе:
 
<code>sudo systemctl enable res.service && sudo systemctl start res.service</code>
 
Удостоверьтесь, что сервис стартовал:
 
<code>systemctl status res.service</code>
 
Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.


==='''Настройка'''===
==='''Настройка'''===
Строка 26: Строка 54:
|port
|port
|6189
|6189
|порт api интерфейса, используется в UPS - настройка servers.res в конфиге UPS
|Порт API интерфейса используется в UPS настройка servers.res в конфиге UPS.
|-
|-
|servers.ses.urls
|servers.ses.urls
|"http://127.0.0.1:6190/ses"
|"http://127.0.0.1:6190/ses"
|список серверов ses для получения статистики
|Список серверов ses для получения статистики.
|-
|-
|servers.ses.timers.connect
|servers.ses.timers.connect
|60
|60
|таймаут на подключение к серверам ses. При превышении в журнал будет записана ошибка таймаута
|Таймаут на подключение к серверам ses. При превышении в журнал будет записана ошибка таймаута.
|-
|-
|servers.ses.timers.read
|servers.ses.timers.read
|120
|120
|таймаут на чтение статистики с серверов ses. При превышении в журнал будет записана ошибка таймаута
|Таймаут на чтение статистики с серверов ses. При превышении в журнал будет записана ошибка таймаута.
|-
|servers.ses.scores
|["one", "two", "three",
 "four", "five"]
|Ключевые слова для поиска оценки работы.
|-
|-
|servers.elastic.url
|servers.elastic.url
|"https://10.2.0.30:9200"
|"https://10.2.0.30:9200"
|сервер elasticsearch для выгрузки статистики
|Сервер Elasticsearch для выгрузки статистики.
|-
|-
|servers.elastic.username
|servers.elastic.username
|"elastic"
|"elastic"
|пользователь elasticsearch
|Пользователь elasticsearch.
|-
|-
|servers.elastic.password
|servers.elastic.password
|"  "
|"  "
|пароль пользователя elasticsearch
|Пароль пользователя elasticsearch.
|-
|-
|servers.elastic.timers.connect
|servers.elastic.timers.connect
|60
|60
|таймаут на подключение к серверам elasticsearch. При превышении в журнал будет записана ошибка таймаута
|Таймаут на подключение к серверам Elasticsearch. При превышении в журнал будет записана ошибка таймаута.
|-
|-
|servers.elastic.timers.read
|servers.elastic.timers.read
|120
|120
|таймаут на выгрузку статистики на сервер elasticsearch. При превышении в журнал будет записана ошибка таймаута
|Таймаут на выгрузку статистики на сервер Elasticsearch. При превышении в журнал будет записана ошибка таймаута.
|-
|-
|servers.kibana.url
|servers.kibana.url
|"https://10.2.0.30:5601"
|"https://10.2.0.30:5601"
|сервер kibana для получения отчетов
|Сервер kibana для получения отчетов.
|-
|-
|servers.kibana.timers.connect
|servers.kibana.timers.connect
|60
|60
|таймаут на подключение к серверу kibana. При превышении в журнал будет записана ошибка таймаута
|Таймаут на подключение к серверу Kibana. При превышении в журнал будет записана ошибка таймаута.
|-
|-
|servers.kibana.timers.read
|servers.kibana.timers.read
|120
|120
|таймаут на чтение отчетов с сервера kibana. При превышении в журнал будет записана ошибка таймаута
|Таймаут на чтение отчетов с сервера Kibana. При превышении в журнал будет записана ошибка таймаут.а
|-
|-
|loader.time
|loader.time
|["05:00", "17:00"]
|["05:00", "17:00"]
|ежедневное расписание загрузки статистики
|Ежедневное расписание загрузки статистики. Записей может быть больше если нужно чаще актуализировать статистику.
|-
|-
|logs.path
|logs.path
|"logs/"
|"logs/"
|папка хранения журналов
|Папка хранения журналов.
|-
|-
|logs.backups
|logs.backups
|10
|10
|максимальное количество журнальных файлов
|Максимальное количество журнальных файлов.
|-
|-
|logs.maxSize
|logs.maxSize
|5242880
|5242880
|максимальный размер журнального файла
|Максимальный размер журнального файла.
|}
|}
Для того чтобы рабочие столы с отчетами были доступны в UPS по https протоколу, в конфигурации реверс прокси должны быть следующие директивы (для nginx):
  <small>proxy_set_header  Host $host;</small>
<small>  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;</small>
<small>  proxy_set_header  X-Forwarded-Proto $scheme;</small>
<small>  proxy_set_header  X-Forwarded-Ssl on; # Optional</small>
<small>  proxy_set_header  X-Forwarded-Port $server_port;</small>
<small>  proxy_set_header  X-Forwarded-Host $host;</small>
Также должен быть еще один конфиг файл который перенаправляет порт 5602 ssl на порт 5602 сервиса UPS (proxy_pass   <nowiki>https://UPS_IP:5602</nowiki>;)
В конфиге должны быть директивы для заголовков CORS и обработки OPTIONS запросов.
===='''Установка и настройка kibana + elasticsearch'''====


==== '''Установка и настройка kibana + elasticsearch''' ====


Для работы res нужно установить и соответствующим образом настроить elasticsearch и kibana. Без настроенного подключения к рабочим elasticsearch и kibana RES не стартует и пишет в логи ошибку.


Пример установки на один хост, без кластера.
<span style="color:red">'''ВНИМАНИЕ - раздел в доработке'''</span>


Устанавливаем elasticsearch


<code><small>dpkg -i elasticsearch-8.15.3-amd64.deb</small></code>


Инсталлятор должен выдать
Для работы RES нужно установить и соответствующим образом настроить Elasticsearch и Kibana. Без настроенного подключения к рабочим Elasticsearch и Kibana RES не стартует и пишет в логи ошибку.


<small><code>--------------------------- Security autoconfiguration information ------------------------------</code></small>
Пример установки на один хост с IP 1.2.3.4, без кластера.


.........
'''Устанавливаем''' elasticsearch


<small><code>The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW</code></small>  
<code><small>dpkg -i elasticsearch-8.15.3-amd64.deb</small></code>


.........
Инсталлятор должен выдать


<small><code>-------------------------------------------------------------------------------------------------</code></small>
<small><code>The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW</code></small>


Копируем пароль - он будет использован в разделе servers.elastic.password файла конфигурации RES.
'''Копируем пароль''' — он будет использован в разделе servers.elastic.password файла конфигурации RES и для входа в веб-интерфейс Kibana.


Генерируем CA
'''Генерируем''' CA.


<code><small>/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;</small></code>
<code><small>/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;</small></code>
Строка 121: Строка 172:
<code><small>unzip ca.zip;</small></code>
<code><small>unzip ca.zip;</small></code>


С использованием CA генерируем сертификаты для elastik
С использованием CA '''генерируем''' сертификаты для elastik


<small>/usr/share/elasticsearch/bin/elasticsearch-certutil cert \</small>
<small><code>/usr/share/elasticsearch/bin/elasticsearch-certutil cert \</code></small>


<small>--out /etc/elasticsearch/certs/elastic.zip \</small>
<small><code>--out /etc/elasticsearch/certs/elastic.zip \</code></small>


<small>--name elastic \</small>
<small><code>--name elastic \</code></small>


<small>--ip 10.2.0.31, 127.0.0.1 \</small>
<small><code>--ip 1.2.3.4, 127.0.0.1 \</code></small>


<small>--ca-cert /etc/elasticsearch/certs/ca/ca.crt \</small>
<small><code>--ca-cert /etc/elasticsearch/certs/ca/ca.crt \</code></small>


<small>--ca-key /etc/elasticsearch/certs/ca/ca.key \</small>
<small><code>--ca-key /etc/elasticsearch/certs/ca/ca.key \</code></small>


<small>--pem;</small>
<small><code>--pem;</code></small>


<small>cd /etc/elasticsearch/certs/;</small>
<small><code>cd /etc/elasticsearch/certs/;</code></small>


<small>unzip elastic.zip</small>
<small><code>unzip elastic.zip</code></small>


Правим конфиг elasticsearch <small><code>/etc/elasticsearch/elasticsearch.yml</code></small>
'''Правим''' конфиг elasticsearch <small><code>/etc/elasticsearch/elasticsearch.yml</code></small>


Результат:
Результат:


<small>cluster.name: res # '''''имя кластера - призвольно'''''</small>
<small><code>cluster.name: res # '''''имя кластера - произвольно'''''</code></small>


<small>path.data: /var/lib/elasticsearch</small>
<small><code>path.data: /var/lib/elasticsearch</code></small>


<small>path.logs: /var/log/elasticsearch</small>
<small><code>path.logs: /var/log/elasticsearch</code></small>


<small>network.host: 10.2.0.31 # '''''здесь ip хоста'''''</small>
<small><code>network.host: 1.2.3.4 # '''''здесь ip хоста'''''</code></small>


<small>http.port: 9200</small>
<small><code>http.port: 9200</code></small>


<small>xpack.security.enabled: true</small>
<small><code>xpack.security.enabled: true</code></small>


<small>xpack.security.enrollment.enabled: true</small>
<small><code>xpack.security.enrollment.enabled: true</code></small>


<small>xpack.security.http.ssl:</small>
<small><code>xpack.security.http.ssl:</code></small>


<small>  enabled: true</small>
<small><code>  enabled: true</code></small>


<small>  key: /etc/elasticsearch/certs/elastic/elastic.key</small>
<small><code>  key: /etc/elasticsearch/certs/elastic/elastic.key</code></small>


<small>  certificate: /etc/elasticsearch/certs/elastic/elastic.crt</small>
<small><code>  certificate: /etc/elasticsearch/certs/elastic/elastic.crt</code></small>


<small>  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt</small>
<small><code>  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt</code></small>


<small>xpack.security.transport.ssl:</small>
<small><code>xpack.security.transport.ssl:</code></small>


<small>  enabled: true</small>
<small><code>  enabled: true</code></small>


<small>  verification_mode: certificate</small>
<small><code>  verification_mode: certificate</code></small>


<small>  keystore.path: certs/transport.p12</small>
<small><code>  keystore.path: certs/transport.p12</code></small>


<small>  truststore.path: certs/transport.p12</small>
<small><code>  truststore.path: certs/transport.p12</code></small>


<small>cluster.initial_master_nodes: ["hostname"] # '''''здесь подставить имя хоста'''''</small>
<small><code>cluster.initial_master_nodes: ["hostname"] # '''''здесь подставить имя хоста'''''</code></small>


<small>http.host: 0.0.0.0</small>
<small><code>http.host: 0.0.0.0</code></small><blockquote>'''''Внимание: копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела «неразрывный пробел» — yaml его не воспринимает.'''''</blockquote>'''Стартуем''' сервис
 
Внимание - копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела "неразрывный пробел" - yaml его не воспринимает
 
Стартуем сервис


<small><code>systemctl daemon-reload</code></small>
<small><code>systemctl daemon-reload</code></small>
Строка 193: Строка 240:
<small><code>systemctl start elasticsearch</code></small>
<small><code>systemctl start elasticsearch</code></small>


Проверяем с использованием пароля, сгенерированного в начале
'''Проверяем''' с использованием пароля, сгенерированного в начале


<small><code>curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW <nowiki>https://10.2.0.31:9200</nowiki> --cacert /etc/elasticsearch/certs/ca/ca.crt</code></small>
<small><code>curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW <nowiki>https://1.2.3.4:9200</nowiki> --cacert /etc/elasticsearch/certs/ca/ca.crt</code></small>


Устанавливаем kibana
'''Устанавливаем''' kibana


dpkg -i kibana-8.15.3-amd64.deb
<code><small>dpkg -i kibana-8.15.3-amd64.deb</small></code>


Папка для сертификатов : mkdir -p /etc/kibana/certs/
Папка для сертификатов: mkdir -p /etc/kibana/certs/


Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/
Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/


Генерируем сертификаты для kibana
'''Получим''' пароль для доступа из kibana в elasticsearch <small><code>/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system --auto</code></small>


/usr/share/elasticsearch/bin/elasticsearch-certutil cert \
Пароль нужен будет дальше в строке <small><code>elasticsearch.password:</code></small> конфига kibana.


--out /etc/kibana/certs/kibana.zip \
Kibana ставим в варианте http (без ssl).


--name kibana \
'''Правим''' конфиг kibana <small><code>/etc/kibana/kibana.yml</code></small>


--ip 10.2.0.31, 127.0.0.1 \
Результат


--ca-cert /etc/elasticsearch/kibana/ca/ca.crt \
<small><code>server.port: 5601</code></small>


--ca-key /etc/elasticsearch/kibana/ca/ca.key \
<small><code>server.host: 0.0.0.0</code></small>


--pem;
<small><code>server.publicBaseUrl: "<nowiki>http://1.2.3.4:5601</nowiki>"</code></small>


cd /etc/kibana/certs/;
<small><code>server.ssl.enabled: false</code></small>


unzip kibana.zip;
<small><code>elasticsearch.hosts: ["<nowiki>https://1.2.3.4:9200</nowiki>"]</code></small>
 
<small><code>elasticsearch.username: "kibana_system"</code></small>
 
<small><code>elasticsearch.password: "gfntin_083SKBYC9V5yk"</code></small>
 
<small><code>elasticsearch.ssl.certificateAuthorities: /etc/kibana/certs/ca/ca.crt</code></small>
 
<small><code>elasticsearch.ssl.verificationMode: full</code></small>
 
<small><code>logging:</code></small>
 
<small><code>  appenders:</code></small>
 
<small><code>    file:</code></small>
 
<small><code>      type: file</code></small>
 
<small><code>      fileName: /var/log/kibana/kibana.log</code></small>
 
<small><code>      layout:</code></small>
 
<small><code>        type: json</code></small>
 
<small><code>  root:</code></small>
 
<small><code>    appenders:</code></small>
 
<small><code>      - default</code></small>
 
<small><code>      - file</code></small>
 
<small><code>pid.file: /run/kibana/kibana.pid</code></small>
 
<small><code>xpack.security.authc.providers:</code></small>
 
<small><code>  basic.basic1:</code></small>
 
<small><code>    order: 0</code></small>
 
<small><code>csp.strict: false</code></small>
 
<small><code>csp.warnLegacyBrowsers: false</code></small>
 
<small><code>csp.script_src:</code></small>
 
<small><code>  - unsafe-inline</code></small>
 
<small><code>  - self</code></small>
 
<small><code>  - unsafe-eval</code></small>
 
<small><code>server.customResponseHeaders: {"x-frame-options":"ALLOWALL"}</code></small>
 
'''Запускаем''' kibana <small><code>systemctl enable kibana && systemctl start kibana</code></small>
 
Заходим по адресу <nowiki>https://1.2.3.4:5601/</nowiki> с пользователем elastic и паролем, который создал инсталлятор elasticsearch. Если видим стартовую страничку Kibana, то Elasticsearch и Kibana готовы к работе с RES. После запуска RES установит пользователя reports с паролем reports и правом доступа к рабочим столам kibana. Рекомендуется сменить после этого пароль. Этот пользователь и пароль должен быть указан в [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0 конфиг файле ups] в разделе res.


==='''Протоколы и порты'''===
==='''Протоколы и порты'''===


Сервис использует порты 6157/tcp, 6170/tcp для реверс-прокси и порт 6189/tcp для доступа к api интерфейсу. Порт доступа к api может быть изменен в конфигурационном файлк
Сервис использует порт 6156/tcp - реверс прокси кибаны и 6189/tcp для доступа к API-интерфейсу. Порт доступа к API может быть изменен в конфигурационном файле.


==='''Журналы работы'''===
==='''Журналы работы'''===
Строка 233: Строка 336:
Для проверки состояния сервиса выполните <code>sudo systemctl status res</code>.  
Для проверки состояния сервиса выполните <code>sudo systemctl status res</code>.  


Журнал ошибок пишется в системный журнал, для просмотра можно воспользоваться командой <code>sudo journalctl -u res</code>
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию —  <code>/opt/res/logs/</code>). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой <code>sudo journalctl -u res</code>
 
==='''Удаление и обновление RES'''===
Для увеличения информативности журналов можно выполнить от суперпользователя команду:
<code>sed -i 's/log-level error/log-level debug/g' /etc/systemd/system/res.service && systemctl daemon-reload && systemctl restart res.service</code>
==='''Удаление и обновление URS'''===
Для удаления выполните команду:
Для удаления выполните команду:


<code>/opt/res/uninstall</code>  
<code>/opt/res/uninstall</code>  


Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки как указано в п 4. При этом, обновление не изменяет файл /opt/res/config.json.
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/res/config.json.

Текущая версия от 10:06, 27 марта 2025

Общее описание

Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов SES.

Термины и определения

Report Engine Service (RES) – сервис проксирования запросов к отчетам Kibana в интерфейсе UPS. Сервис отображает все отчеты Kibana.

Требования к окружению

Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:

   • UPS – настройка осуществляется через файл /opt/ups/config.json
   • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположен на другом хосте
   • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположен на другом хосте
   • SES – настраивается через файл /opt/res/config.json. SES может быть расположен на другом хосте
Установка RES

Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.

Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.

  • Установка/обновление RES осуществляется скриптом chmod +x ./res-<версия>-<релиз>.sh && ./res-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор ./res-<версия>-<релиз>.sh без ключей.
  • Загрузить последнюю версию продукта curl -s "https://repo.connect2ai.net/api/res/new" --user '[user]:[pass]' 2>&1 | bash или в интерактивном режиме bash -c "$(curl -s https://repo.connect2ai.net/api/res --user '[user]:[pass]' 2>&1)".
  • Обновить RES /opt/res/inupdate в интерактивном режиме. Или запустить с ключом:
    • /opt/res/inupdate -b — обновить до последней beta версии;
    • /opt/res/inupdate -r — обновить до последней release версии;
    • /opt/res/inupdate -n — обновить до последней версии (неважно beta или release).
  • Проверить актуальную версию продукта curl -s "https://repo.connect2ai.net/api/res/version.
  • Посмотреть лог изменений curl -s "https://repo.connect2ai.net/api/res/changelog" --user '[user]:[pass]'.
  • Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api. [user]:[pass] — это тот же логин и пароль, что и от Nextcloud.
  • В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
    • echo -n "[user]:[pass]" > /opt/res/.userapi (это файл авторизации в API, нужен для обновления и загрузки )
    • echo -n "http://example.com:3128 [user] [password]" > /opt/res/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки, при отсутствующем прямом подключении к интернету)

При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.

Не забудьте запустить сервис и включить в автозапуск в системе:

sudo systemctl enable res.service && sudo systemctl start res.service

Удостоверьтесь, что сервис стартовал:

systemctl status res.service

Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.

Настройка

Файл config.json

Настройка параметров сервиса res производится в файле /opt/res/config.json

Описание параметров приведено в таблице

Параметр По умолчанию Назначение
port 6189 Порт API интерфейса используется в UPS — настройка servers.res в конфиге UPS.
servers.ses.urls "http://127.0.0.1:6190/ses" Список серверов ses для получения статистики.
servers.ses.timers.connect 60 Таймаут на подключение к серверам ses. При превышении в журнал будет записана ошибка таймаута.
servers.ses.timers.read 120 Таймаут на чтение статистики с серверов ses. При превышении в журнал будет записана ошибка таймаута.
servers.ses.scores ["one", "two", "three",

 "four", "five"]

Ключевые слова для поиска оценки работы.
servers.elastic.url "https://10.2.0.30:9200" Сервер Elasticsearch для выгрузки статистики.
servers.elastic.username "elastic" Пользователь elasticsearch.
servers.elastic.password " " Пароль пользователя elasticsearch.
servers.elastic.timers.connect 60 Таймаут на подключение к серверам Elasticsearch. При превышении в журнал будет записана ошибка таймаута.
servers.elastic.timers.read 120 Таймаут на выгрузку статистики на сервер Elasticsearch. При превышении в журнал будет записана ошибка таймаута.
servers.kibana.url "https://10.2.0.30:5601" Сервер kibana для получения отчетов.
servers.kibana.timers.connect 60 Таймаут на подключение к серверу Kibana. При превышении в журнал будет записана ошибка таймаута.
servers.kibana.timers.read 120 Таймаут на чтение отчетов с сервера Kibana. При превышении в журнал будет записана ошибка таймаут.а
loader.time ["05:00", "17:00"] Ежедневное расписание загрузки статистики. Записей может быть больше если нужно чаще актуализировать статистику.
logs.path "logs/" Папка хранения журналов.
logs.backups 10 Максимальное количество журнальных файлов.
logs.maxSize 5242880 Максимальный размер журнального файла.

Для того чтобы рабочие столы с отчетами были доступны в UPS по https протоколу, в конфигурации реверс прокси должны быть следующие директивы (для nginx):

  proxy_set_header  Host $host;

  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_set_header  X-Forwarded-Proto $scheme;

  proxy_set_header  X-Forwarded-Ssl on; # Optional

  proxy_set_header  X-Forwarded-Port $server_port;

  proxy_set_header  X-Forwarded-Host $host;

Также должен быть еще один конфиг файл который перенаправляет порт 5602 ssl на порт 5602 сервиса UPS (proxy_pass   https://UPS_IP:5602;)

В конфиге должны быть директивы для заголовков CORS и обработки OPTIONS запросов.


Установка и настройка kibana + elasticsearch

ВНИМАНИЕ - раздел в доработке


Для работы RES нужно установить и соответствующим образом настроить Elasticsearch и Kibana. Без настроенного подключения к рабочим Elasticsearch и Kibana RES не стартует и пишет в логи ошибку.

Пример установки на один хост с IP 1.2.3.4, без кластера.

Устанавливаем elasticsearch

dpkg -i elasticsearch-8.15.3-amd64.deb

Инсталлятор должен выдать

The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW

Копируем пароль — он будет использован в разделе servers.elastic.password файла конфигурации RES и для входа в веб-интерфейс Kibana.

Генерируем CA.

/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;

cd /etc/elasticsearch/certs/;

unzip ca.zip;

С использованием CA генерируем сертификаты для elastik

/usr/share/elasticsearch/bin/elasticsearch-certutil cert \

--out /etc/elasticsearch/certs/elastic.zip \

--name elastic \

--ip 1.2.3.4, 127.0.0.1 \

--ca-cert /etc/elasticsearch/certs/ca/ca.crt \

--ca-key /etc/elasticsearch/certs/ca/ca.key \

--pem;

cd /etc/elasticsearch/certs/;

unzip elastic.zip

Правим конфиг elasticsearch /etc/elasticsearch/elasticsearch.yml

Результат:

cluster.name: res # имя кластера - произвольно

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 1.2.3.4 # здесь ip хоста

http.port: 9200

xpack.security.enabled: true

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:

  enabled: true

  key: /etc/elasticsearch/certs/elastic/elastic.key

  certificate: /etc/elasticsearch/certs/elastic/elastic.crt

  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt

xpack.security.transport.ssl:

  enabled: true

  verification_mode: certificate

  keystore.path: certs/transport.p12

  truststore.path: certs/transport.p12

cluster.initial_master_nodes: ["hostname"] # здесь подставить имя хоста

http.host: 0.0.0.0

Внимание: копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела «неразрывный пробел» — yaml его не воспринимает.

Стартуем сервис

systemctl daemon-reload

systemctl enable elasticsearch.service

systemctl start elasticsearch

Проверяем с использованием пароля, сгенерированного в начале

curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW https://1.2.3.4:9200 --cacert /etc/elasticsearch/certs/ca/ca.crt

Устанавливаем kibana

dpkg -i kibana-8.15.3-amd64.deb

Папка для сертификатов: mkdir -p /etc/kibana/certs/

Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/

Получим пароль для доступа из kibana в elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system --auto

Пароль нужен будет дальше в строке elasticsearch.password: конфига kibana.

Kibana ставим в варианте http (без ssl).

Правим конфиг kibana /etc/kibana/kibana.yml

Результат

server.port: 5601

server.host: 0.0.0.0

server.publicBaseUrl: "http://1.2.3.4:5601"

server.ssl.enabled: false

elasticsearch.hosts: ["https://1.2.3.4:9200"]

elasticsearch.username: "kibana_system"

elasticsearch.password: "gfntin_083SKBYC9V5yk"

elasticsearch.ssl.certificateAuthorities: /etc/kibana/certs/ca/ca.crt

elasticsearch.ssl.verificationMode: full

logging:

  appenders:

    file:

      type: file

      fileName: /var/log/kibana/kibana.log

      layout:

        type: json

  root:

    appenders:

      - default

      - file

pid.file: /run/kibana/kibana.pid

xpack.security.authc.providers:

  basic.basic1:

    order: 0

csp.strict: false

csp.warnLegacyBrowsers: false

csp.script_src:

  - unsafe-inline

  - self

  - unsafe-eval

server.customResponseHeaders: {"x-frame-options":"ALLOWALL"}

Запускаем kibana systemctl enable kibana && systemctl start kibana

Заходим по адресу https://1.2.3.4:5601/ с пользователем elastic и паролем, который создал инсталлятор elasticsearch. Если видим стартовую страничку Kibana, то Elasticsearch и Kibana готовы к работе с RES. После запуска RES установит пользователя reports с паролем reports и правом доступа к рабочим столам kibana. Рекомендуется сменить после этого пароль. Этот пользователь и пароль должен быть указан в конфиг файле ups в разделе res.

Протоколы и порты

Сервис использует порт 6156/tcp - реверс прокси кибаны и 6189/tcp для доступа к API-интерфейсу. Порт доступа к API может быть изменен в конфигурационном файле.

Журналы работы

Для проверки состояния сервиса выполните sudo systemctl status res.

Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию — /opt/res/logs/). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой sudo journalctl -u res

Удаление и обновление RES

Для удаления выполните команду:

/opt/res/uninstall

Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/res/config.json.