Действия

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

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

Строка 151: Строка 151:
* настроить адрес websocket сервера в конфигурационном файле /opt/ups/config.json
* настроить адрес websocket сервера в конфигурационном файле /opt/ups/config.json
После получения доменного имени и сертификатов нужно правильно настроить реверс-прокси.  
После получения доменного имени и сертификатов нужно правильно настроить реверс-прокси.  
Пример настройки для nginx.
Пример настройки для nginx.
Доменное имя "https://ups.example.net/", nginx прослушивает порты 80(для letsencrypt), 443(ssl), 8091(ssl для websocket).  
Доменное имя "https://ups.example.net/", nginx прослушивает порты 80(для letsencrypt), 443(ssl), 8091(ssl для websocket).  
Адрес локального хоста с UPS и SES 10.2.1.110 (для примера, могут быть на разных)
Адрес локального хоста с UPS и SES 10.2.1.110 (для примера, могут быть на разных)
Конфиг для UPS:
Конфиг для UPS:


<small>''server {''</small>
<small>server {
 
        server_name ups.example.net;
<small>''        server_name ups.example.net;''</small>
        listen 80;
 
        listen [::]:80;
<small>''        listen 80;''</small>
        location ^~ /.well-known/acme-challenge {
 
                root /var/www/html;
<small>''        listen [::]:80;''</small>
                default_type "text/plain";
 
                index nonextistent;
<small>''        location ^~ /.well-known/acme-challenge {''</small>
        }
 
        location / { return 301 https://$host$request_uri; }
<small>''                root /var/www/html;''</small>
        location /lang { return 301 https://$host$request_uri; }
 
}
<small>''                default_type "text/plain";''</small>
server {
 
  server_name  ups.example.net;
<small>''                index nonextistent;''</small>
  listen 443 ssl;
 
  listen [::]:443 ssl;
<small>''        }''</small>
  listen 8443 ssl;
 
  listen [::]:8443 ssl;
<small>''        location / { return 301 <nowiki>https://$host$request_uri</nowiki>; }''</small>
 
<small>''        location /lang { return 301 <nowiki>https://$host$request_uri</nowiki>; }''</small>
 
<small>''}''</small>
 
<small>''server {''</small>
 
<small>''   server_name  ups.example.net;''</small>
 
<small>''   listen 443 ssl;''</small>
 
<small>''   listen [::]:443 ssl;''</small>
 
<small>''   listen 8443 ssl;''</small>
 
<small>''   listen [::]:8443 ssl;''</small>
 
<small>''   include snippets/ssl-params.conf;''</small>
 
<small>''   ssl_certificate /etc/letsencrypt/live/ups.example.net/fullchain.pem;''</small>
 
<small>''   ssl_certificate_key /etc/letsencrypt/live/ups.example.net/privkey.pem;''</small>
 
<small>''   ssl_trusted_certificate /etc/letsencrypt/live/ups.example.net/chain.pem;''</small>
 
<small>''   client_max_body_size 1000M;''</small>
 
<small>''   proxy_read_timeout 6000;''</small>
 
<small>''   proxy_connect_timeout       6000;''</small>
 
<small>''   proxy_send_timeout          6000;''</small>
 
<small>''   send_timeout                6000;''</small>
 
<small>''   large_client_header_buffers 8 256k;''</small>
 
<small>''   location @proxy {''</small>
 
<small>''        proxy_pass              <nowiki>http://10.2.1.110:6162</nowiki>;''</small>
 
<small>''        proxy_ssl_server_name   on;''</small>
 
<small>''        #proxy_set_header        Host $proxy_host;''</small>
 
<small>''        proxy_set_header        Host $host;''</small>
 
<small>''        proxy_set_header        X-Real-IP $remote_addr;''</small>
 
<small>''        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;''</small>
 
<small>''        proxy_set_header        Upgrade $http_upgrade;''</small>
 
<small>''        proxy_set_header        x-frame-options ALLOWALL;''</small>
 
<small>''        proxy_hide_header       X-Frame-Options;''</small>
 
<small>''        add_header              X-Frame-Options "ALLOWALL";''</small>
 
<small>''        proxy_set_header        X-Forwarded-Proto $scheme;''</small>
 
<small>''        # Добавляем заголовки CORS''</small>
 
<small>''        add_header 'Access-Control-Allow-Origin' '*';''</small>
 
<small>''        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';''</small>
 
<small>''        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';''</small>
 
<small>''        add_header 'Access-Control-Allow-Credentials' 'true';''</small>
 
<small>''        # Обработка OPTIONS запросов''</small>
 
<small>''        if ($request_method = 'OPTIONS') {''</small>
 
<small>''            add_header 'Access-Control-Allow-Origin' '*';''</small>
 
<small>''            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';''</small>
 
<small>''            add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';''</small>
 
<small>''            add_header 'Access-Control-Allow-Credentials' 'true';''</small>
 
<small>''            add_header 'Access-Control-Max-Age' 1728000;''</small>
 
<small>''            add_header 'Content-Type' 'text/plain charset=UTF-8';''</small>
 
<small>''            add_header 'Content-Length' 0;''</small>
 
<small>''            return 204;''</small>
 
<small>''        }''</small>
 
<small>''        # Перезапись заголовка Location (потребовалась для /lang)''</small>
 
<small>''        proxy_redirect <nowiki>http://ups.example.net</nowiki> <nowiki>https://ups.example.net</nowiki>;''</small>
 
<small>''   }''</small>
 
<small>''   location /lang {''</small>
 
<small>''    try_files $uri @proxy;''</small>
 
<small>''    proxy_ssl_server_name on;''</small>
 
<small>''   }''</small>


<small>''   location / {''</small>
  include snippets/ssl-params.conf;
  ssl_certificate /etc/letsencrypt/live/ups.example.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ups.example.net/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/ups.example.net/chain.pem;
  client_max_body_size 1000M;
  proxy_read_timeout 6000;
  proxy_connect_timeout      6000;
  proxy_send_timeout          6000;
  send_timeout                6000;
  large_client_header_buffers 8 256k;


<small>''    try_files $uri @proxy;''</small>
  location @proxy {
        proxy_pass              http://185.132.242.179:6162;
        proxy_ssl_server_name  on;
        #proxy_set_header        Host $proxy_host;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Upgrade $http_upgrade;
        proxy_set_header        x-frame-options ALLOWALL;
        proxy_hide_header      X-Frame-Options;
        add_header              X-Frame-Options "ALLOWALL";
        proxy_set_header        X-Forwarded-Proto $scheme;
        # Добавляем заголовки CORS
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';
        add_header 'Access-Control-Allow-Credentials' 'true';
        # Обработка OPTIONS запросов
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
            add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }


<small>''    proxy_ssl_server_name on;''</small>
        # Перезапись заголовка Location (потребовалась для /lang)
        proxy_redirect http://ups.example.net https://ups.example.net;
  }


<small>''   }''</small>
  location /lang {
    try_files $uri @proxy;
    proxy_ssl_server_name on;
  }


<small>''}''</small>
  location / {
    try_files $uri @proxy;
    proxy_ssl_server_name on;
  }
}</small>


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

Версия от 12:37, 22 января 2025

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

Сервис предназначен для сценарных машин.

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

script engine service (SES) – сервис обеспечивающий работу сценарных машин

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

В процессе работы сервис взаимодействует со следующими сервисами:

  • UPS – настройка осуществляется через файл /opt/ups/config.json
  • SMC, SEE, SPR, TTS, SBS, QAS - настройка осуществляется через файл /opt/ses/config.json
Установка ses

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

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

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

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

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

sudo systemctl enable ses.service && sudo systemctl start ses.service

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

systemctl status ses.service

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

Настройка сервиса

Файл config.json

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

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

Параметр По умолчанию Назначение
port 6190 порт api интерфейса, используется в UPS - настройка servers.ses в конфиге UPS
logs.path logs/ Путь к папке логов
logs.backups 10 Количество старых сохраняемых логов
logs.maxSize 5242880 Максимальный размер текущего лог-файла, в байтах
servers.{service}.url "http://127.0.0.1:PORT/{service}" адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187)
servers.{service}.timers.connect 2 таймаут подключения к серверу
servers.{service}.timers.read 10 таймаут получения данных с сервера
connectors.vk {} Параметры подключения к ботам VK

{  "имя_подключения":{

    "token":"Ключ доступа",

    "robot":"id робота",

    "group_id":"id сообщества ВКонтакте",

    "whitelist":[],

    "activators":[]

    },

...............

}

connectors.telegram {} Параметры подключения к telegram ботам

{  "имя_подключения":{

    "token":"Ключ доступа",

    "robot":"id робота",

    "variables":{

      "phone": "1234567890"

    },

    "timers": {      "getUpdates": 3    },

    "whitelist":[],

    "activators":[]

    },

...........

}

tmp "/tmp/ses" временная папка

Эмуляция сервисов интеграции

В каталоге /opt/ses/testapi могут располагаться эмуляторы сервисов интеграции. Эмулятор будет доступен по адресу htttp://<адрес ses>/testapi/<название_сервиса>. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл <название_сервиса>.reply. Содержимое файла будет отдано без изменений, как есть по адресу "http://<адрес_ses>:<порт_ses>/ses/testapi/<название_сервиса>".


Настройка каналов и виджетов

Настройка виджета для сайта

Виджет для сайта представляет собой отдельный js скрипт, который поставляется в составе UPS. Для ses виджет это один из каналов. Порядок настройки:

  • получить доменное имя для ups, получить сертификаты, настроить реверс-прокси для обработки запросов к ups и на websocket.
  • добавить к коду сайта ссылку на скрипт виджета
  • настроить коннектор в конфигурационном файле /opt/ses/config.json
  • настроить адрес websocket сервера в конфигурационном файле /opt/ups/config.json

После получения доменного имени и сертификатов нужно правильно настроить реверс-прокси.

Пример настройки для nginx.

Доменное имя "https://ups.example.net/", nginx прослушивает порты 80(для letsencrypt), 443(ssl), 8091(ssl для websocket).

Адрес локального хоста с UPS и SES 10.2.1.110 (для примера, могут быть на разных)

Конфиг для UPS:

server {

       server_name ups.example.net;
       listen 80;
       listen [::]:80;
       location ^~ /.well-known/acme-challenge {
               root /var/www/html;
               default_type "text/plain";
               index nonextistent;
       }
       location / { return 301 https://$host$request_uri; }
       location /lang { return 301 https://$host$request_uri; }

} server {

  server_name  ups.example.net;
  listen 443 ssl;
  listen [::]:443 ssl;
  listen 8443 ssl;
  listen [::]:8443 ssl;
  include snippets/ssl-params.conf;
  ssl_certificate /etc/letsencrypt/live/ups.example.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ups.example.net/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/ups.example.net/chain.pem;
  client_max_body_size 1000M;
  proxy_read_timeout 6000;
  proxy_connect_timeout       6000;
  proxy_send_timeout          6000;
  send_timeout                6000;
  large_client_header_buffers 8 256k;
  location @proxy {
       proxy_pass              http://185.132.242.179:6162;
       proxy_ssl_server_name   on;
       #proxy_set_header        Host $proxy_host;
       proxy_set_header        Host $host;
       proxy_set_header        X-Real-IP $remote_addr;
       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header        Upgrade $http_upgrade;
       proxy_set_header        x-frame-options ALLOWALL; 
       proxy_hide_header       X-Frame-Options;
       add_header              X-Frame-Options "ALLOWALL";
       proxy_set_header        X-Forwarded-Proto $scheme;
       # Добавляем заголовки CORS
       add_header 'Access-Control-Allow-Origin' '*';
       add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
       add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';
       add_header 'Access-Control-Allow-Credentials' 'true';
       # Обработка OPTIONS запросов
       if ($request_method = 'OPTIONS') {
           add_header 'Access-Control-Allow-Origin' '*';
           add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
           add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, X-Requested-With';
           add_header 'Access-Control-Allow-Credentials' 'true';
           add_header 'Access-Control-Max-Age' 1728000;
           add_header 'Content-Type' 'text/plain charset=UTF-8';
           add_header 'Content-Length' 0;
           return 204;
       }
       # Перезапись заголовка Location (потребовалась для /lang)
       proxy_redirect http://ups.example.net https://ups.example.net;
  }
  location /lang {
   try_files $uri @proxy;
   proxy_ssl_server_name on;
  }
  location / {
   try_files $uri @proxy;
   proxy_ssl_server_name on;
  }

}

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

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

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

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

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

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

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

/opt/ses/uninstall

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