UPS. Руководство администратора: различия между версиями
Материал из Флора AI
Нет описания правки |
Нет описания правки |
||
| Строка 23: | Строка 23: | ||
** <code>/opt/ups/inupdate -r</code> - обновить до последней release версии; | ** <code>/opt/ups/inupdate -r</code> - обновить до последней release версии; | ||
** <code>/opt/ups/inupdate -n</code> - обновить до последней версии (не важно beta или release). | ** <code>/opt/ups/inupdate -n</code> - обновить до последней версии (не важно beta или release). | ||
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ups/version</nowiki></code>. | * Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ups/version</nowiki></code>. | ||
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ups/changelog</nowiki>" --user '[user]:[pass]'</code>. | * Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ups/changelog</nowiki>" --user '[user]:[pass]'</code>. | ||
* Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> - это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.] | * Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> - это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.] | ||
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/): | * В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/): | ||
** echo -n <code>"[user]:[pass]"</code> > /opt/ups/.userapi (это файл авторизации в API, нужен для обновления | ** echo -n <code>"[user]:[pass]"</code> > /opt/ups/.userapi (это файл авторизации в API, нужен для обновления) | ||
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/ups/.proxy (это файл конфигурации proxy необходим для обновления | ** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/ups/.proxy (это файл конфигурации proxy необходим для обновления, при отсутсвующем прямом подключение к интернету) | ||
При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления. | При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления. | ||
Версия от 18:43, 16 сентября 2024
Общее описание
Сервис предназначен для управления базовыми сервисами ядра, а также в качестве прокси-сервера доступа к сервисам с функцией балансировки нагрузки.
Термины и определения
Universal Proxy Server (UPS) – Сервис управления ядром с проксированием запросов.
Системные требования
Для нормальной работы сервиса требуется 4Гб оперативной памяти, 1 CPU >= 2.20GHz и 40Гб дискового пространства.
Установка/обновление UPS
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.
Для UPS необходимо устанавливать выделенное окружение.
- Установка/обновление UPS осуществляется скриптом
chmod +x ./ups-<версия>-<релиз>.sh && ./ups-<версия>-<релиз>.sh -iс правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор./ups-<версия>-<релиз>.shбез ключей. - Загрузить последнюю версию продукта
curl -s "https://repo.connect2ai.net/api/ups/new" --user '[user]:[pass]' 2>&1 | bashили в интерактивном режимеbash -c "$(curl -s https://repo.connect2ai.net/api/ups --user '[user]:[pass]' 2>&1)". - Обновить UPS
/opt/ups/inupdateв интерактивном режиме. Или запустить с ключём:/opt/ups/inupdate -b- обновить до последней beta версии;/opt/ups/inupdate -r- обновить до последней release версии;/opt/ups/inupdate -n- обновить до последней версии (не важно beta или release).
- Проверить актуальную версию продукта
curl -s "https://repo.connect2ai.net/api/ups/version. - Посмотреть лог изменений
curl -s "https://repo.connect2ai.net/api/ups/changelog" --user '[user]:[pass]'. - Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api.
[user]:[pass]- это тот же логин и пароль, что и от Nextcloud. - В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
- echo -n
"[user]:[pass]"> /opt/ups/.userapi (это файл авторизации в API, нужен для обновления) - echo -n
"http://example.com:3128 [user] [password]"> /opt/ups/.proxy (это файл конфигурации proxy необходим для обновления, при отсутсвующем прямом подключение к интернету)
- echo -n
При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
Не забудьте запустить сервис и включить в автозапуск в системе:
sudo systemctl enable ups.service && sudo systemctl start ups.service
Удостоверьтесь, что сервис стартовал:
systemctl status ups.service
Разрешите доступ к порту 6182 на нужном интерфейсе по протоколу tcp.
UPS может работать в составе кластера из двух и более серверов с UPS. Для этого необходимо создать кластер pacemaker/corosync с 2 ресурсами - ресурс systemd UPS и shared IP, и обеспечить их одновременную работу на одной ноде кластера. Синхронизацию изменений обеспечит сервис UPS с помощью lsyncd, для этого есть блок "cluster" в конфигурационном файле. Серверы кластера для этого должны иметь возможность соединения по ssh по ключу.
Внутренняя база данных
В каталоге /opt/ups/data/db находятся папки служебной базы данных. Папки созданы по разделам администрирования UPS. Каждый файл любой папки описывает один объект администрирования, например один из файлов из каталога "/opt/ups/data/db/roles"
{
"id": "ee1b3b1edb8c4376486189d6540f5635",
"name": "Только просмотр",
"rights": [
"SERVICE:smc",
"SERVICE:see",
"GET:/spr/audio",
"GET:/spr/queue",
"GET:/spr/waveform",
"SERVICE:spr",
"GET:/sbs/speakers",
"SERVICE:sbs",
"GET:/tts/dictionary/get",
"SERVICE:tts",
"GET:/qas/doc",
"GET:/qas/list",
"SERVICE:qas",
"GET:/auth/datasets",
"GET:/auth/roles",
"GET:/auth/user/get",
"GET:/auth/user/list",
"SERVICE:auth",
"GET:/model/errors",
"GET:/model/handler",
"GET:/model/log",
"GET:/corpus/get",
"GET:/corpus/list",
"GET:/transcription/audio",
"GET:/transcription/get",
"GET:/transcription/list",
"GET:/transcription/waveform",
"GET:/server/get/addresses",
"GET:/server/get/models",
"GET:/lang/wallpaper"
]
}
описывает роль и ее параметры. В каждом файле обязательно есть уникальный id и хотя бы один параметр. В примере 2 параметра "name" и "rights".
Авторизация в UPS
UPS предполагает доступ по паролю к разделам интерфейса и информации от сервисов. Доступ осуществляется при помощи токена доступа. Токен запрашивается запросом в котором передаются логин и пароль, а в ответ приходит токен авторизации и токен обновления авторизации. Пример запроса:
curl -X POST "http://127.0.0.1:6182/auth/access?username=admin&password=password" -H "accept: application/json"
пример ответа:
{
"x-access-token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMCIsImNyZWF0ZWQiOjE3MTQ2NTk5MDIuOTk5MzQzNiwidHlwZSI6ImFjY2VzcyJ9.wrTRX2de5jhVFKRQ_Xt0fNXxHWN_yLiqZ6S_inix0Jg", "x-refresh-token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMCIsImNyZWF0ZWQiOjE3MTQ2NTk5MDIuOTk5NTk1NCwidHlwZSI6InJlZnJlc2gifQ.Y3DNfIpfqJffjrPaT4TQiiF22Huvx62rmB-b9Az6UAc"
}
пример запроса с участием токена:
curl -X GET "http://127.0.0.1:6182/auth/version" -H "accept: application/json" -H "x-access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMCIsImNyZWF0ZWQiOjE3MTQ2NTk5MDIuOTk5MzQzNiwidHlwZSI6ImFjY2VzcyJ9.wrTRX2de5jhVFKRQ_Xt0fNXxHWN_yLiqZ6S_inix0Jg"
В случае если UPS работает в закрытом контуре и авторизация не требуется, методы API, которые используются, нужно добавить в раздел "nopassword" конфигурационного файла (см. ниже)
Установка модулей для UPS
Есть возможность создать любой модуль, который будет эмулировать любой API интерфейс любого стороннего сервиса через UPS. Для примера создан интерфейс Яндекс. Установка модулей возможна прямым копирование файлов модуля в директорию /opt/ups/modules/<название модуля>.
Чтобы убедиться, что модуль доступен и работает, выполните запрос
curl -X GET "http://АДРЕС_СЕРВЕРА:6182/tts/synthesize/yandex_tts_emulator?rate=100&pitch=100&volume=0" --H "accept: application/json" --data-urlencode "text=текст для синтеза" --output out.wav
out.wav должен содержать синтезированный голос озвучивший текст из запроса.
Данные пример запроса говорит о том, что написан интерфейс яндекса по синтезу. Соответственно обращение к нему идет, как к Яндексу и ответ, как от Яндекса.
Пример структуры файла модуля (файл должен иметь имя handler.py и лажать по пути /op/ups/modules/[имя модуля]/handler.py):
import uuid, io, json
from app.modules import modulesns
from flask import send_file
from flask_restplus import Resource, reqparse
from app.ups import tools
config = json.load(open('/opt/ups/modules/yandex_tts_emulator/config.json'))
parser = reqparse.RequestParser()
parser.add_argument('voice',required=True)
parser.add_argument('text',required=True)
@modulesns.route("/speech/v1/tts:synthesize"
class YandexEmulator(Resource): # имя класса можно указать свое
def post(self): # обязательный метод post класса
args = parser.parse_args()
voice = args['voice']
voice = config['voices'].get(voice,None)
if not voice:
modulesns.abort(405, message = "Wrong voice", error = 1)
reply = tools.getData(servicetype="tts",method="GET",data={'text':args['text']},url="/tts/synthesize/"+voice)
if type(reply) is dict:
return reply
# возвращаемым значение метода post должен быть правильный результат, в данном примере синтезированный аудиофайл
return send_file(
io.BytesIO(reply),
attachment_filename=str(uuid.uuid4())+'.wav',
as_attachment=True,
mimetype='audio/wav'
)
Пример структуры файла конфигурации (файл должен иметь имя config.json и лажать по пути /op/ups/modules/[имя модуля]/config.json):{
"voices": {
"alena": "Alya_8kHz"
}
}
Конфигурирование параметров сервиса
Настройка параметров сервиса ups производится в файле /opt/ups/params.json
Описание параметров приведено в таблице
| Параметр | По умолчанию | Назначение |
|---|---|---|
| logs.path | logs/ | Директория для хранения логов. Примеры абсолютного пути: "/var/log/ups/" |
| logs.backups | 10 | Количество файлов ротации |
| logs.maxSize | 5242880 | Максимальный размер файла в байтах, триггер для ротации |
| auth.accessLifeTime | 1800 | Время жизни access token |
| auth.refreshLifeTime | 86400 | Время жизни refresh token |
| servers.{service}.trainer | http://127.0.0.1:PORT | Ссылка на сервер для обучения моделей сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183) |
| servers.{service}.cluster | [http://127.0.0.1:PORT] | Список ссылок на рабочие серверы сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183), tts (6186), sbs (6185). |
| servers.{service}.timers.connect | 0.5 | Лимит времени на подключение к сервису, сек. |
| servers.{service}.timers.read | 300 | Лимит времени на получение данных от сервиса, сек. |
| servers.{service}.timers.failed | 600 | Длительность паузы обращений к сервису при сбое, сек. |
| servers.{service}.timers.install | 60 | Лимит времени на установку модели на сервис |
| servers.{service}.timers.info | 3 | Лимит времени на получение информации о модели |
| cluster.logfile | logs/sync.log | Расположение лога синхронизации для работы в кластере |
| cluster.statusFile | logs/sync.status | Файл для периодической записи отчета о состоянии синхронизации |
| cluster.nodes | [ ] | Перечень нод кластера UPS на которые будет отправляться содержимое папки "data" |
| interface.wallpaper.login | true | Разрешение показа обоев на странице логина |
| interface.wallpaper.desktop | true | Разрешение показа обоев на начальном экране |
| interface.wallpaper.workarea | true | Разрешение показа обоев на страницах сервисов |
| nopassword | [
"GET:/auth/refresh", "GET:/auth/rights", "POST:/auth/access", "GET:/lang/", "GET:/tts/synthesize", "POST:/sbs/embedding", "GET:/smc/classify", "GET:/auth/version", "GET:/smc/compress", "GET:/smc/emotion", "GET:/see/entities", "POST:/sbs/analyze", "POST:/sbs/verify", "POST:/sbs/search", "POST:/spr/stt", "GET:/spr/result", "GET:/auth/user/info", "GET:/model/info", "POST:/auth/user/password" ] |
Список методов, которые не требуют авторизации |
Сбор данных об ошибках
Логи сервиса по умолчанию находятся в файле /opt/ups/logs/log.txt
Удаление UPS
Для удаления выполните команду: /opt/ups/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.
Часто задаваемые вопросы
| Вопрос | Ответ |
|---|---|