Skip to Content

Установка Центра управления AI Server

1. Установка Docker

Настоящее краткое руководство основано на официальных инструкций:

При наличии доступа доступа к необходимым ресурсам на машине, установите docker и компоненты (compose) с официального сайта согласно официально инструкции выше и переходите к п.2.

В отсутствие интернета воспользуйтесь предоставленной версией согласно ОС (см. таблицу ниже).

ФайлОписание
distr/externals/{distribution}/docker.zipДистрибутив Docker с плагинами (compose, buildx)
docker/docker.serviceФайл службы для автоматического запуска Docker при старте системы

Скопируйте на машину с Центром управления AI Server файлы, приведенные в таблице — они находятся в комплекте поставки Primo RPA AI Server.

Определение {distribution}

ОС{distribution}
Astra Linux Special Edition 1.7astra1.7
Ubuntu 22.04ubuntu22.04
Ubuntu 24.04ubuntu24.04

Распаковка архива

Распакуйте архив во временную папку:

mkdir -p distr/externals/{distribution}/docker
unzip distr/externals/{distribution}/docker.zip -d distr/externals/{distribution}/docker
sudo dpkg -i distr/externals/{distribution}/docker/*.deb

Установка системных служб

sudo cp docker/docker.service /etc/systemd/system/
sudo systemctl enable docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker

Создание группы docker

Проверьте наличие группы docker на сервере:

cat /etc/group | grep docker

Если группы нет, добавьте:

sudo groupadd docker

Раздача прав

Добавьте текущего пользователя в группу docker. Например, для пользователя ubuntu:

sudo usermod -aG docker ubuntu && \ newgrp docker
⚠️

Центр управления использует подсеть server_ai, которая создается автоматически при первом запуске финальной команды данной статьи.

2. Загрузка образов

Вариант загрузки образов 1 (через архивы)

КомпонентОбразИмя архива
Primo.AI.Apiprimo-rpa/ai-server-api:latestdistr/ai-server-api.tar.7z
Primo.AI.Api.Inferenceprimo-rpa/ai-server-inference:latestdistr/ai-server-inference.tar.7z
Primo.AI.Api.Logsprimo-rpa/ai-server-logs:latestdistr/ai-server-logs.tar.7z
Primo.AI.Api.Authprimo-rpa/ai-server-auth:latestdistr/ai-server-auth.tar.7z
UI / nginxprimo-rpa/ai-server-ui:latestdistr/ai-server-ui.tar.7z
Backend Конструктора агентских системprimo-rpa/ai-server-langflow-backend:latestdistr/ai-server-langflow-backend.tar.7z
UI / nginx Конструктора агентских системprimo-rpa/ai-server-langflow-frontend:latestdistr/ai-server-langflow-frontend.tar.7z
PostgreSQLexternals/postgres:17.6distr/externals/postgres_17.6.tar.7z
RabbitMQexternals/rabbitmq:3.10.7-managementdistr/externals/rabbitmq_3.10.7-management.tar.7z
Redisexternals/redis:latestdistr/externals/redis_latest.tar.7z
sudo apt update && sudo apt install 7z names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-ui" externals="redis:latest rabbitmq:3.10.7-management postgres:17.6" for name in $names; do wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdistr&files=$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 --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdistr%2Fexternals&files=$filename.tar.7z" 7z x $filename.tar.7z docker load -i $filename.tar done

Вариант загрузки образов 2 (используя репозиторий Docker)

Работает при наличии подключения к nexus.primo-rpa.ru:8005.

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="redis:latest rabbitmq:3.10.7-management postgres:17.6" for name in $names; do images+=" primo-rpa/$name" done for external in $externals; do images+=" externals/$external" done for image in $images; do docker pull nexus.primo-rpa.ru:8005/$image docker tag nexus.primo-rpa.ru:8005/$image $image docker rmi nexus.primo-rpa.ru:8005/$image done

3. Размещение файлов

Создаем папку /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/ \ /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/

Для Конструктора агентских систем создаем файлы БД:

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:

sudo cp docker/server/docker-compose.yaml /app/Primo.AI/Api/
sudo cp -r docker/server/volumes/* /app/Primo.AI/Api/volumes/
sudo unzip docker/server/env.zip -d /app/Primo.AI/Api/

Размещаем файлы моделей Умного OCR:

sudo cp -r data/models/SmartOCR/* /app/Primo.AI/Api/volumes/Api_Models/

Размещаем файлы моделей AI Текст.

Файлы моделей объемные, поэтому можно выберите необходимые модели (см. таблицы) и уберите лишние имена файлов в bash-команде (ниже таблиц).

Большие языковые модели для компонента Задачи NLP:

Имя моделиИмя файлаИсполнение
base-llm-06-7b-gguf-q8f55425a0-87c8-4d9e-a4cd-abc56f96ab1eOllama
base-llm-06-7b-safetensors-fp1678e57e23-363c-4b1e-b4e2-36fb31da5b48vLLM
base-llm-07-8b-safetensors-fp16e161b94d-3272-4afa-9aad-d191b61c67d3vLLM
base-llm-06-7b-gguf-fp16c7a88b7f-bf7e-484b-bcc4-fea147315c83Ollama
base-llm-08-27b-gguf-q4_k_m1fc223ef-7a13-42db-8bcb-5fda5a39779eOllama
base-llm-09-30b-gguf-q4_k_m7be7740d-64bc-4d07-a3b2-5ba5e6815e17Ollama
base-llm-11-9b-safetensors-fp16610d3c1c-6674-460e-8652-fc9f597aa370vLLM
base-llm-11-9b-gguf-q4_k_m6383fa95-74fa-4a1f-8b05-3e57e0a37f21Ollama
base-llm-11-9b-safetensors-fp8ca4a4832-54e3-4601-bcf8-c5672ee6808avLLM
base-llm-11-30b-gguf-q4_k_me8dfc900-e183-4647-80b0-a97f242a7dbaOllama
base-llm-12-35b-gguf-q4_k_m3377b494-f686-4cef-9db1-4ffb3164cc9cOllama
base-llm-13-26b-gguf-q4_k_m1442b32b-aaee-4139-88c1-a7f313d11a09Ollama
ft-base-0.6b-fp166dd7fb3c-d58e-427c-8845-39964df50bc5vLLM (для FT)
ft-base-2b-fp16ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0vLLM (для 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 \ 1442b32b-aaee-4139-88c1-a7f313d11a09 \ 6dd7fb3c-d58e-427c-8845-39964df50bc5 \ ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0" cd /app/Primo.AI/Api/volumes/Api_Models/ for filename in $filenames; do wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdata%2Fmodels%2FNLP&files=$filename" -P /app/Primo.AI/Api/volumes/Api_Models/ done

Модели для RAG-сервера:

Имя моделиИмя файла
embeddinggemma-300m9fbc250f-fb1d-43c0-9af5-957a7f8c5aa7
jina-rerank-v33cf2d1e8-e15b-4633-933f-556823ada8ce
qwen3-embed-0.6b18851aa6-af5f-4569-8084-f7db6b820e32
qwen3-embed-4b7316ea9c-eb37-40fd-ba09-551d5568c60e
qwen3-rerank-0.6b91b8ef72-f954-4409-8b7b-26c7a9bedefe
qwen3-rerank-4ba55e5fe7-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 --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdata%2Fmodels%2FRAG&files=$filename" -P /app/Primo.AI/Api/volumes/Api_Models/ done

Размещаем стандартный контекст NLP-запросов:

sudo cp -r data/context/* /app/Primo.AI/Api/volumes/Api_ContextFiles/

Размещаем пресеты конвейеров агентских систем:

sudo cp -r data/agsys-presets/* /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/

Должна получиться следующая иерархия папок для соответствия стандартному 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 | └── Logs

4. Редактируем конфигурационные файлы

Конфигурационные файл 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):

СекцияПараметрПо умолчаниюОписание
InferencesStartTimeoutSeconds240Таймаут ожидания запуска процесса инференса на целевой машине (сек)
InferencesStopTimeoutSeconds140Таймаут ожидания остановки процесса инференса (сек)
RagStartTimeoutSeconds180Таймаут ожидания запуска RAG-сервера (сек)
RagStopTimeoutSeconds10Таймаут остановки RAG-сервера (сек)
LangflowStartTimeoutSeconds180Таймаут ожидания запуска Конструктора агентских систем (сек)
LangflowStopTimeoutSeconds10Таймаут остановки Конструктора агентских систем (сек)
FinetuningStartTimeoutSeconds60Таймаут ожидания запуска процесса файнтюнинга (сек)
FinetuningStopTimeoutSeconds10Таймаут остановки процесса файнтюнинга (сек)
ℹ️

Если процесс не успевает запуститься в отведённое время, сервер считает его зависшим и прерывает. Увеличьте значение StartTimeoutSeconds при работе на медленном оборудовании.

Параллелизм обработки запросов

Конфигурационный файл Inference (/app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json):

СекцияПараметрПо умолчаниюОписание
RabbitMQAgentSystemRequestEventPrefetchCount10Кол-во одновременных запросов агентских систем в обработке
RabbitMQSmartOcrRequestEventPrefetchCount10Кол-во одновременных запросов Умного OCR в обработке
RabbitMQNlpRequestEventPrefetchCount10Кол-во одновременных запросов NLP в обработке
RabbitMQPackageRequestEventPrefetchCount10Кол-во одновременных запросов пакетной обработки
RabbitMQPdfGeneratingEventPrefetchCount10Кол-во одновременных запросов генерации PDF

Уменьшите значения PrefetchCount при нехватке ресурсов на сервере — это ограничит количество запросов, одновременно обрабатываемых сервисом Inference.

Очистка устаревших запросов

Конфигурационный файл Inference (/app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json):

СекцияПараметрПо умолчаниюОписание
ClearRequestsServiceDefaultExpirationSeconds3600Время хранения обработанного запроса (сек). По умолчанию 1 час
ClearRequestsServiceUnprocessedExpirationSeconds86400Время хранения необработанного запроса (сек). По умолчанию 24 часа
ℹ️

После перенастройки перезапустите контейнеры: docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d

6. SSO

При необходимости можно подключить авторизацию через Keycloak.

7. Файерволл

Откройте порт 44392:

sudo ufw allow 44392/tcp

8. Настройка прав доступа к службам

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.AI
sudo chmod -R 771 /app/Primo.AI

9. Запуск контейнеров основных компонентов Центра управления

docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d

10. Установка Api.MachineInfo

Размещаем файлы компонента

sudo mkdir -p /app/Primo.AI/Api.MachineInfo

Скачиваем дистрибутив:

wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdistr&files=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

Установите пакет, если он не установлен:

sudo unzip distr/{distribution}/cpuid.zip -d distr/{distribution}/cpuid
sudo dpkg -i distr/{distribution}/cpuid/*.deb

Настройка 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