Установка Центра управления AI Server
Обязательные пакеты: Docker с плагином compose (docker.io, docker-compose-v2), unzip, cpuid.
Необязательные: 7zip и wget — для загрузки образов через архивы, ufw — если брандмауэр настраивается через него.
Отсутствующие пакеты можно установить из репозитория ОС или из комплекта поставки — способы указаны в соответствующих разделах ниже.
Рекомендуемая разметка диска
Центр управления хранит данные в двух местах: в каталоге Docker и в папке установки /app. Выделите под них отдельные разделы при установке ОС — тогда переполнение одного раздела не остановит ОС и другие компоненты. Разделы удобно создавать в LVM: при нехватке места их можно расширить без переустановки.
Таблица: Разметка диска 1 ТБ.
| Точка монтирования | Что хранится | Объём |
|---|---|---|
/boot, /boot/efi, swap | Системные разделы — в объёме, который предлагает установщик ОС | ~10 ГБ |
/ | ОС, пакеты, системные журналы, архивы образов при загрузке | 50 ГБ |
/var/lib/docker | Образы Docker — после обновления прежние версии остаются, пока их не удалить; данные RabbitMQ и Redis; журналы контейнеров; временные файлы и наборы данных для обучения и файнтюнинга, которые сервисы Api и Inference хранят внутри контейнеров | 200 ГБ |
/app | Файлы моделей (Api_Models), база данных PostgreSQL (pgsql-data) с запросами и загруженными изображениями, контекст NLP-запросов, пресеты, журналы сервисов | Остаток |
Установщик ОС показывает диск 1 ТБ как ~931 ГБ, поэтому на /app остаётся ~670 ГБ. Если ОС установлена на отдельный диск, диск данных 1 ТБ разделите на два раздела: 200 ГБ — /var/lib/docker, остаток (~730 ГБ) — /app.
При другом объёме диска сохраняйте соотношение: около 1/5 — /var/lib/docker, остальное за вычетом системных разделов — /app. Минимальный объём хранилища указан в системных требованиях.
Объём /app определяется в первую очередь моделями: полный набор больших языковых моделей из поставки занимает ~270 ГБ, каждая обученная модель добавляет 1–2 ГБ. Скачивайте только модели, которые будете использовать. База данных растёт на ~1 ГБ в сутки при обработке 1000 изображений.
Путь /var/lib/docker указан для Docker из пакета docker.io. Если docker info показывает в разделе Storage Driver значение driver-type: io.containerd.snapshotter.v1, образы хранятся в /var/lib/containerd — раздел под образы монтируйте туда.
1. Установка Docker
Настоящее краткое руководство основано на официальных инструкциях:
При наличии доступа доступа к необходимым ресурсам на машине, установите docker и компоненты (compose) с официального сайта согласно официально инструкции выше и переходите к п.2.
В отсутствие интернета установите Docker из комплекта поставки: пакеты docker.io и docker-compose-v2 согласно статье Установка пакета из комплекта поставки.
Запуск службы Docker
Пакет docker.io устанавливает службу Docker. Включите её автозапуск и запустите:
sudo systemctl enable --now dockerСоздание группы docker
Проверьте наличие группы docker на сервере:
cat /etc/group | grep dockerЕсли группы нет, добавьте:
sudo groupadd dockerРаздача прав
Добавьте текущего пользователя в группу docker. Например, для пользователя ubuntu:
sudo usermod -aG docker ubuntu && \
newgrp dockerЦентр управления использует подсеть server_ai, которая создается
автоматически при первом запуске финальной команды данной статьи.
2. Загрузка образов
Вариант загрузки образов 1 (через архивы)
Комплект поставки AI Server размещён в Nexus: https://nexus.primo-rpa.ru/repository/raw/, авторизация для скачивания не нужна. Пути в таблице указаны относительно этого адреса.
| Компонент | Образ | Архив в Nexus |
|---|---|---|
Primo.AI.Api | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-api:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-api.tar.7z |
Primo.AI.Api.Inference | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-inference:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-inference.tar.7z |
Primo.AI.Api.Logs | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-logs:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-logs.tar.7z |
Primo.AI.Api.Auth | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-auth:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-auth.tar.7z |
UI / nginx | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-ui:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-ui.tar.7z |
Backend Конструктора агентских систем | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-langflow-backend:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-langflow-backend.tar.7z |
UI / nginx Конструктора агентских систем | nexus.primo-rpa.ru:8000/primo-rpa/ai-server-langflow-frontend:1.26.10.0 | 1.26.10/ai-server/docker/images/ai-server-langflow-frontend.tar.7z |
PostgreSQL | nexus.primo-rpa.ru:8000/library/postgres:17.10-alpine | data/libraries/docker/images/postgres_17.10-alpine.tar.7z |
RabbitMQ | nexus.primo-rpa.ru:8000/library/rabbitmq:4.2.8-management-alpine | data/libraries/docker/images/rabbitmq_4.2.8-management-alpine.tar.7z |
Redis | nexus.primo-rpa.ru:8000/library/redis:7.4-alpine | data/libraries/docker/images/redis_7.4-alpine.tar.7z |
Для этого варианта нужны 7z (пакет 7zip) и wget. Если их нет, установите из репозитория ОС (sudo apt install -y 7zip wget) или, при желании, из комплекта поставки согласно статье Установка пакета из комплекта поставки. Вместо wget архивы можно скопировать на машину из комплекта поставки.
names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-ui ai-server-langflow-backend ai-server-langflow-frontend"
externals="library/redis:7.4-alpine library/rabbitmq:4.2.8-management-alpine library/postgres:17.10-alpine"
for name in $names; do
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/docker/images/$name.tar.7z"
7z x $name.tar.7z
docker load -i $name.tar
done
for external in $externals; do
filename=$(echo "${external##*/}" | sed 's/:/_/g')
wget "https://nexus.primo-rpa.ru/repository/raw/data/libraries/docker/images/$filename.tar.7z"
7z x $filename.tar.7z
docker load -i $filename.tar
doneВариант загрузки образов 2 (используя репозиторий Docker)
Работает при наличии подключения к nexus.primo-rpa.ru:8000.
names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-ui ai-server-langflow-backend ai-server-langflow-frontend"
externals="library/redis:7.4-alpine library/rabbitmq:4.2.8-management-alpine library/postgres:17.10-alpine"
for name in $names; do
docker pull nexus.primo-rpa.ru:8000/primo-rpa/$name:1.26.10.0
done
for external in $externals; do
docker pull nexus.primo-rpa.ru:8000/$external
done3. Размещение файлов
Для распаковки файлов поставки нужен пакет unzip. Если его нет, установите из репозитория ОС (sudo apt install -y unzip) или из комплекта поставки согласно статье Установка пакета из комплекта поставки.
Создаем папку /app/Primo.AI/Api и дочерние:
sudo mkdir -p /app/Primo.AI/Api/volumes/conf/Api/ \
/app/Primo.AI/Api/volumes/conf/Auth/ \
/app/Primo.AI/Api/volumes/conf/Logs/ \
/app/Primo.AI/Api/volumes/conf/MachineInfo/ \
/app/Primo.AI/Api/volumes/conf/Inference/ \
/app/Primo.AI/Api/volumes/nginx/ssl/ \
/app/Primo.AI/Api/volumes/Api_Models/ \
/app/Primo.AI/Api/volumes/Api_ContextFiles/ \
/app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/ \
/app/Primo.AI/Api/volumes/langflow_data/ \
/app/Primo.AI/Api/volumes/lffe/Сгенерируйте TLS-сертификат для nginx по инструкции.
Для Конструктора агентских систем создаем файлы БД:
sudo touch /app/Primo.AI/Api/volumes/langflow_data/langflow.db \
/app/Primo.AI/Api/volumes/langflow_data/langflow.db-shm \
/app/Primo.AI/Api/volumes/langflow_data/langflow.db-walРазмещаем окружение сервера в /app/Primo.AI/Api — docker-compose.yaml, переменные окружения, конфигурации сервисов и nginx.conf:
release="https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server"
sudo wget "$release/docker/docker-compose.yaml" -O /app/Primo.AI/Api/docker-compose.yaml
sudo wget "$release/docker/.env" -O /app/Primo.AI/Api/.env
for service in Api Auth Inference Logs; do
sudo wget "$release/data/conf/$service/appsettings.ProdLinux.json" -O /app/Primo.AI/Api/volumes/conf/$service/appsettings.ProdLinux.json
done
sudo wget "$release/data/nginx/nginx.conf" -O /app/Primo.AI/Api/volumes/nginx/nginx.confФайлы моделей, пресетов и контекста не имеют расширения, и AI Server ищет их по точному имени. Скачивайте их командами из статьи. Браузер добавляет к имени расширение по типу содержимого (например, .txt) — если файл скачан браузером, удалите это расширение.
Размещаем файлы моделей Умного OCR:
filenames="8502296a-9608-4672-bd7a-05acb32b50ef \
9a529a4c-2807-41a9-bee9-72a511681000 \
3901af0a-8c50-4b76-b96f-481cae5e4a35 \
5ed5d6eb-d7c0-4d67-8433-0119d922f14c \
707dd4a6-da8f-40f8-bfda-4854956b0d68 \
16201dec-7f46-497c-8f4d-0b77016167fe \
f93a6a88-756c-4137-b130-64df763fc6b7"
for filename in $filenames; do
sudo wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/$filename" -O /app/Primo.AI/Api/volumes/Api_Models/$filename
doneРазмещаем эмбеддинг-модель SDC-сервера qwen3vl-embed-2B — она нужна проектам Классификация (семантическая). Модель семантического классификатора уже входит в список моделей Умного OCR выше.
sudo wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/2263ec5f-b843-422f-b9e0-78e98549e738" -O /app/Primo.AI/Api/volumes/Api_Models/2263ec5f-b843-422f-b9e0-78e98549e738Размещаем файлы моделей AI Текст.
Файлы моделей объемные, поэтому можно выберите необходимые модели (см. таблицы) и уберите лишние имена файлов в bash-команде (ниже таблиц).
Большие языковые модели для компонента Задачи NLP:
| Имя модели | Имя файла | Исполнение |
|---|---|---|
| base-llm-06-7b-gguf-q8 | f55425a0-87c8-4d9e-a4cd-abc56f96ab1e | Ollama |
| base-llm-06-7b-safetensors-fp16 | 78e57e23-363c-4b1e-b4e2-36fb31da5b48 | vLLM |
| base-llm-07-8b-safetensors-fp16 | e161b94d-3272-4afa-9aad-d191b61c67d3 | vLLM |
| base-llm-06-7b-gguf-fp16 | c7a88b7f-bf7e-484b-bcc4-fea147315c83 | Ollama |
| base-llm-08-27b-gguf-q4_k_m | 1fc223ef-7a13-42db-8bcb-5fda5a39779e | Ollama |
| base-llm-09-30b-gguf-q4_k_m | 7be7740d-64bc-4d07-a3b2-5ba5e6815e17 | Ollama |
| base-llm-11-9b-safetensors-fp16 | 610d3c1c-6674-460e-8652-fc9f597aa370 | vLLM |
| base-llm-11-9b-gguf-q4_k_m | 6383fa95-74fa-4a1f-8b05-3e57e0a37f21 | Ollama |
| base-llm-11-9b-safetensors-fp8 | ca4a4832-54e3-4601-bcf8-c5672ee6808a | vLLM |
| base-llm-11-30b-gguf-q4_k_m | e8dfc900-e183-4647-80b0-a97f242a7dba | Ollama |
| base-llm-12-35b-gguf-q4_k_m | 3377b494-f686-4cef-9db1-4ffb3164cc9c | Ollama |
| base-llm-12-35b-safetensors-nfvp4 | 63e56e59-6c96-4fc7-9ecb-afab3d79bb21 | vLLM |
| base-llm-13-26b-gguf-q4_k_m | 1442b32b-aaee-4139-88c1-a7f313d11a09 | Ollama |
| base-llm-12-35b-safetensors-4bit | 471c79fa-17b3-46a6-a42f-b93eef012012 | vLLM |
| base-llm-14-27b-gguf-q4_k_m | 40d9afa6-de73-46e6-a85d-8816d54cafb7 | Ollama |
| base-llm-14-27b-safetensors-4bit | 312244b9-9d2e-4553-8bd1-b135e739af13 | vLLM |
| ft-base-0.6b-fp16 | 6dd7fb3c-d58e-427c-8845-39964df50bc5 | vLLM (для FT) |
| ft-base-2b-fp16 | ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0 | vLLM (для FT) |
filenames="f55425a0-87c8-4d9e-a4cd-abc56f96ab1e \
78e57e23-363c-4b1e-b4e2-36fb31da5b48 \
e161b94d-3272-4afa-9aad-d191b61c67d3 \
c7a88b7f-bf7e-484b-bcc4-fea147315c83 \
1fc223ef-7a13-42db-8bcb-5fda5a39779e \
7be7740d-64bc-4d07-a3b2-5ba5e6815e17 \
610d3c1c-6674-460e-8652-fc9f597aa370 \
6383fa95-74fa-4a1f-8b05-3e57e0a37f21 \
ca4a4832-54e3-4601-bcf8-c5672ee6808a \
e8dfc900-e183-4647-80b0-a97f242a7dba \
3377b494-f686-4cef-9db1-4ffb3164cc9c \
63e56e59-6c96-4fc7-9ecb-afab3d79bb21 \
1442b32b-aaee-4139-88c1-a7f313d11a09 \
471c79fa-17b3-46a6-a42f-b93eef012012 \
40d9afa6-de73-46e6-a85d-8816d54cafb7 \
312244b9-9d2e-4553-8bd1-b135e739af13 \
6dd7fb3c-d58e-427c-8845-39964df50bc5 \
ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0"
cd /app/Primo.AI/Api/volumes/Api_Models/
for filename in $filenames; do
wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/$filename" -O /app/Primo.AI/Api/volumes/Api_Models/$filename
doneМодели для RAG-сервера:
| Имя модели | Имя файла |
|---|---|
| embeddinggemma-300m | 9fbc250f-fb1d-43c0-9af5-957a7f8c5aa7 |
| jina-rerank-v3 | 3cf2d1e8-e15b-4633-933f-556823ada8ce |
| qwen3-embed-0.6b | 18851aa6-af5f-4569-8084-f7db6b820e32 |
| qwen3-embed-4b | 7316ea9c-eb37-40fd-ba09-551d5568c60e |
| qwen3-rerank-0.6b | 91b8ef72-f954-4409-8b7b-26c7a9bedefe |
| qwen3-rerank-4b | a55e5fe7-6545-4777-9e75-7eae472c3ff0 |
filenames="9fbc250f-fb1d-43c0-9af5-957a7f8c5aa7 \
3cf2d1e8-e15b-4633-933f-556823ada8ce \
18851aa6-af5f-4569-8084-f7db6b820e32 \
7316ea9c-eb37-40fd-ba09-551d5568c60e \
91b8ef72-f954-4409-8b7b-26c7a9bedefe \
a55e5fe7-6545-4777-9e75-7eae472c3ff0"
cd /app/Primo.AI/Api/volumes/Api_Models/
for filename in $filenames; do
wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/$filename" -O /app/Primo.AI/Api/volumes/Api_Models/$filename
doneРазмещаем стандартный контекст NLP-запросов:
filenames="13fb0ff5-3f31-44e1-9c99-e24276380a3f \
a9d109d6-0125-42f9-b44e-2052a0c4e164 \
d24b857c-6c21-4d5f-990f-52d6235c33dd \
e41cc59b-059f-4471-8d09-328aab8ed60f"
for filename in $filenames; do
sudo wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/data/context/$filename" -O /app/Primo.AI/Api/volumes/Api_ContextFiles/$filename
doneРазмещаем пресеты конвейеров агентских систем:
filenames="3bc6dd44-226f-4a61-87e6-475e4c0e2dd0 \
b933462a-b85e-4267-b5df-45a78f9453a4 \
e18c953c-6cbf-4f43-9267-76796bea018c \
fd652603-1410-49cd-a3ab-6323256753fa"
for filename in $filenames; do
sudo wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/data/agsys-presets/$filename" -O /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/$filename
doneДолжна получиться следующая иерархия папок для соответствия стандартному docker-compose.yaml:
/app/Primo.AI/Api/
├── .env
├── docker-compose.yaml
└── volumes
|
├── conf
│ └── Api
│ └── appsettings.ProdLinux.json
│ └── Logs
│ └── appsettings.ProdLinux.json
│ └── Inference
│ └── appsettings.ProdLinux.json
│ └── Auth
│ └── appsettings.ProdLinux.json
|
├── Api_Models
│ ├─── cf7d9f7f-ab96-4c15-873e-82c6aad7f9a4
│ ├─── 3901af0a-8c50-4b76-b96f-481cae5e4a35
│ ├─── ...
│ └─── e161b94d-3272-4afa-9aad-d191b61c67d3
|
├── Api_ContextFiles
│ ├─── 13fb0ff5-3f31-44e1-9c99-e24276380a3f
│ ├─── e41cc59b-059f-4471-8d09-328aab8ed60f
│ ├─── a9d109d6-0125-42f9-b44e-2052a0c4e164
│ └─── d24b857c-6c21-4d5f-990f-52d6235c33dd
|
├── Api_LangflowScriptPreset
│ ├─── e18c953c-6cbf-4f43-9267-76796bea018c
│ ├─── fd652603-1410-49cd-a3ab-6323256753fa
│ ├─── b933462a-b85e-4267-b5df-45a78f9453a4
│ └─── 3bc6dd44-226f-4a61-87e6-475e4c0e2dd0
|
├── langflow_data
│ ├─── langflow.db
│ ├─── langflow.db-shm
│ └─── langflow.db-wal
|
├── lffe
│ └─── logs
|
├── nginx
│ └─── nginx.conf
|
└── Logs4. Редактируем конфигурационные файлы
Конфигурационные файл Api и его компонентов: Api.Inference, Api.Logs, Api.Auth:
Укажите адрес портала AI Server в Security > EnabledOrigins:
sudo sed -i 's|"https://192.168.0.2:44392"|"https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:44392"|g' /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.jsonУкажите адрес Конструктора агентских систем в Api > LangflowConstructor:
sudo sed -i 's|"ApiBaseUrl": "https://192.168.1.2:44392"|"ApiBaseUrl": "https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:44392"|g' /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.jsonПеременные окружения для docker-compose.yaml:
Укажите реальный внешний эндпоинт AI Server:
sudo sed -i 's|AI_SERVER_BASE_URL=https://primo-rpa-ai-server:44392/|AI_SERVER_BASE_URL=https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:44392/|g' /app/Primo.AI/Api/.envУкажите реальный внешний эндпоинт AI Server:
sudo sed -i 's|BACKEND_URL=https://primo-rpa-ai-server:44392/langflow/|BACKEND_URL=https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:44392/langflow/|g' /app/Primo.AI/Api/.envПри необходимости замените часовой пояс:
sudo sed -i 's|TIMEZONE=Europe/Moscow|TIMEZONE=xxxxxxxxxxx|g' /app/Primo.AI/Api/.envПри необходимости скорректируйте учётные данные.
Подключение S3-совместимого хранилища (MinIO)
По умолчанию AI Server хранит загруженные файлы в файловой системе или базе данных. Если вы хотите использовать S3-совместимое хранилище (MinIO), внесите изменения в конфигурационные файлы Api и Api.Inference.
Добавьте секцию Minio в оба файла конфигурации:
sudo nano /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json
sudo nano /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json"Minio": {
"Endpoint": "192.168.1.2:9001",
"AccessKey": "xxxxxxxxxxxxxxxxxxxx",
"SecretKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Ssl": false,
"Bucket": "my-bucket"
}| Параметр | Описание |
|---|---|
Endpoint | Адрес и порт сервера MinIO |
AccessKey | Ключ доступа |
SecretKey | Секретный ключ |
Ssl | Использовать ли SSL-соединение (true / false) |
Bucket | Имя бакета (опционально, по умолчанию primo-ai) |
Затем укажите тип хранилища "Minio" вместо "FileSystem" или "Db" в соответствующих секциях:
- Api (
appsettings.ProdLinux.json): во всех подсекцияхFileUpload > * > StoreType - Api.Inference (
appsettings.ProdLinux.json): в секцииFileStore > StoreType
После изменения конфигурации перезапустите контейнеры:
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d
5. Настройка производительности
При необходимости скорректируйте параметры производительности в конфигурационных файлах сервера. Это может потребоваться при работе на оборудовании с ограниченными ресурсами или при высокой нагрузке.
Таймауты запуска процессов
Конфигурационный файл Api (/app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json):
| Секция | Параметр | По умолчанию | Описание |
|---|---|---|---|
Inferences | StartTimeoutSeconds | 240 | Таймаут ожидания запуска процесса инференса на целевой машине (сек) |
Inferences | StopTimeoutSeconds | 140 | Таймаут ожидания остановки процесса инференса (сек) |
Rag | StartTimeoutSeconds | 180 | Таймаут ожидания запуска RAG-сервера (сек) |
Rag | StopTimeoutSeconds | 10 | Таймаут остановки RAG-сервера (сек) |
Langflow | StartTimeoutSeconds | 180 | Таймаут ожидания запуска Конструктора агентских систем (сек) |
Langflow | StopTimeoutSeconds | 10 | Таймаут остановки Конструктора агентских систем (сек) |
Finetuning | StartTimeoutSeconds | 60 | Таймаут ожидания запуска процесса файнтюнинга (сек) |
Finetuning | StopTimeoutSeconds | 10 | Таймаут остановки процесса файнтюнинга (сек) |
Если процесс не успевает запуститься в отведённое время, сервер считает его зависшим и прерывает. Увеличьте значение StartTimeoutSeconds при работе на медленном оборудовании.
Параллелизм обработки запросов
Конфигурационный файл Inference (/app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json):
| Секция | Параметр | По умолчанию | Описание |
|---|---|---|---|
RabbitMQ | AgentSystemRequestEventPrefetchCount | 10 | Кол-во одновременных запросов агентских систем в обработке |
RabbitMQ | SmartOcrRequestEventPrefetchCount | 10 | Кол-во одновременных запросов Умного OCR в обработке |
RabbitMQ | NlpRequestEventPrefetchCount | 10 | Кол-во одновременных запросов NLP в обработке |
RabbitMQ | PackageRequestEventPrefetchCount | 10 | Кол-во одновременных запросов пакетной обработки |
RabbitMQ | PdfGeneratingEventPrefetchCount | 10 | Кол-во одновременных запросов генерации PDF |
Уменьшите значения PrefetchCount при нехватке ресурсов на сервере. Это ограничит количество запросов, одновременно обрабатываемых сервисом Inference.
Очистка устаревших запросов
Конфигурационный файл Inference (/app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json):
| Секция | Параметр | По умолчанию | Описание |
|---|---|---|---|
ClearRequestsService | DefaultExpirationSeconds | 3600 | Время хранения обработанного запроса (сек). По умолчанию 1 час |
ClearRequestsService | UnprocessedExpirationSeconds | 86400 | Время хранения необработанного запроса (сек). По умолчанию 24 часа |
После перенастройки перезапустите контейнеры:
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d
6. SSO
При необходимости можно подключить авторизацию через Keycloak.
7. Файерволл
Команды ниже — для брандмауэра ufw. Если используется другой брандмауэр, откройте те же порты его средствами. Пакет ufw можно установить из репозитория ОС (sudo apt install -y ufw) или, при желании, из комплекта поставки согласно статье Установка пакета из комплекта поставки.
Откройте порт 44392:
sudo ufw allow 44392/tcp8. Настройка прав доступа к службам
sudo groupadd primo-aiСоздайте учетную запись primo:
sudo useradd -g primo-ai -m -s /bin/bash primoДобавьте пользователя в группу docker:
sudo usermod -aG docker primoУстановите владельца папки с инсталляцией:
sudo chown -R primo:primo-ai /app/Primo.AIsudo chmod -R 771 /app/Primo.AI9. Запуск контейнеров основных компонентов Центра управления
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d10. Установка Api.MachineInfo
Размещаем файлы компонента
sudo mkdir -p /app/Primo.AI/Api.MachineInfoСкачиваем дистрибутив:
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/linux/Api.MachineInfo-linux.zip"Разархивируем Api.MachineInfo-linux.zip в /app/Primo.AI/Api.MachineInfo:
sudo unzip Api.MachineInfo-linux.zip -d /app/Primo.AI/Api.MachineInfoУстанавливаем владельца папки с инсталляцией:
sudo chown -R primo:primo-ai /app/Primo.AI/Api.MachineInfoРаздаем права на запуск:
sudo chmod +x /app/Primo.AI/Api.MachineInfo/Primo.AI.Api.MachineInfoСоздаем и настраиваем службу
Копируем файл службы из комплекта поставки в /etc/systemd/system:
sudo cp /app/Primo.AI/Api.MachineInfo/Primo.AI.Api.MachineInfo.service /etc/systemd/system/Primo.AI.Api.MachineInfo.serviceПерезагружаем systemctl:
sudo systemctl daemon-reloadПомещаем службу в автозапуск:
sudo systemctl enable /etc/systemd/system/Primo.AI.Api.MachineInfo.serviceПроверяем выполнение команды:
sudo lsblk --nodeps -no serial /dev/sdaЕсли команда выполнится с ошибкой, находим вместо /dev/sda другое блочное устройство (диск) и прописываем его (вместо xxxxxxxxxx) в конфигурационном файле:
sudo sed -i 's|"HDD": "/dev/sda"|"HDD": "xxxxxxxxxx"|g' /app/Primo.AI/Api.MachineInfo/appsettings.ProdLinux.jsonНастройка правила брандмауэра ufw
Для разрешения доступа к API сервиса только со стороны Primo.AI.Api из подсети server_ai докера выполните команду:
sudo ufw allow from 172.18.0.0/24 to 172.18.0.1 port 5051 proto tcpВспомогательные компоненты
Проверьте наличие пакета cpuid:
apt policy cpuidЕсли пакет не установлен, установите его из комплекта поставки согласно статье Установка пакета из комплекта поставки.
Настройка Primo RPA AI Server для работы с MachineInfo
Открываем в редакторе файл конфигурации Api:
sudo nano /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.jsonВариант 1. Если используется один сервер с MachineInfo, то прописываем ссылку на него:
"MachineInfo": {
"Url": "https://172.18.0.1:5051",
"Urls": null,
"Timeout": 4
}Параметр Timeout – время ответа, после которого сервис считается недоступным. По умолчанию равен 4 сек.
Вариант 2. Если используется кластер MachineInfo, или MachineInfo используется в геокластере, то прописываем ссылки на все узлы кластера:
"MachineInfo": {
"Url": null,
"Urls": [
"https://10.0.0.163:5051",
"https://10.0.0.164:5051"
],
"Timeout": 4
}Порядок узлов имеет значение. В момент генерации запроса на лицензию должны быть доступны все узлы. Узлы нельзя скрывать за балансировщиком нагрузки (load balancer).
Указанные выше URL должны быть доступны изнутри контейнера server_api.
Например, для bridge-сети (конфигурация сети задается в docker-compose-файле
сервера) адрес хоста – 172.18.0.1.
После перенастройки Api, перезапустите контейнер server_api:
docker restart server_apiЗапускаем службу
Запускаем службу:
sudo systemctl start Primo.AI.Api.MachineInfoПроверяем состояние службы:
systemctl status Primo.AI.Api.MachineInfo