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: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="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:8000/$image docker tag nexus.primo-rpa.ru:8000/$image $image docker rmi nexus.primo-rpa.ru:8000/$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/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-01-7b-safetensors-fp16e255188e-d9f6-41d3-b170-0c25bc0bd02fvLLM
base-llm-01-7b-gguf-q8ddc02d8d-0117-4c67-acb3-2dd0549d2985Ollama
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-06-32b-gguf-q4_k_m68c2d421-1877-4693-b53f-2e1ca1079db8Ollama
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-10-4b-safetensors-base98291769-7a84-468f-af2a-5ea4bb02f72aДля файнтюнинга
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
filenames="e255188e-d9f6-41d3-b170-0c25bc0bd02f \ ddc02d8d-0117-4c67-acb3-2dd0549d2985 \ f55425a0-87c8-4d9e-a4cd-abc56f96ab1e \ 78e57e23-363c-4b1e-b4e2-36fb31da5b48 \ e161b94d-3272-4afa-9aad-d191b61c67d3 \ c7a88b7f-bf7e-484b-bcc4-fea147315c83 \ 68c2d421-1877-4693-b53f-2e1ca1079db8 \ 1fc223ef-7a13-42db-8bcb-5fda5a39779e \ 7be7740d-64bc-4d07-a3b2-5ba5e6815e17 \ 98291769-7a84-468f-af2a-5ea4bb02f72a \ 610d3c1c-6674-460e-8652-fc9f597aa370 \ 6383fa95-74fa-4a1f-8b05-3e57e0a37f21 \ ca4a4832-54e3-4601-bcf8-c5672ee6808a" 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" 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" done

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

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

Должна получиться следующая иерархия папок для соответствия стандартному 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 | ├── langflow_data │ ├─── langflow.db │ ├─── langflow.db-shm │ └─── langflow.db-wal | ├── lffe │ └─── logs | ├── nginx │ └─── nginx.conf | └── Logs

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

Конфигурационные файл Api и его компонентов: Api.Inference, Api.Logs, Api.Auth:

Откройте в редакторе конфигурационный файл (замените xxx на Api, Api.Inference, Api.Logs, Api.Auth):

sudo nano /app/Primo.AI/xxx/volumes/conf/Api/appsettings.ProdLinux.json

Укажите адрес портала AI Server в Security > EnabledOrigins:

"Security": { ... "EnabledOrigins": [ "https://192.168.0.4:44392", "https://ai-server-portal:44392" ], ... }

Переменные окружения для docker-compose.yaml:

Укажите реальный внешний эндпоинт AI Server:

sudo sed -i 's|https://primo-rpa-ai-server:44392|https://XXXXXXXXXXXXXXXXX:44392|g' /app/Primo.AI/Api/.env

При необходимости замените временную зону:

sudo sed -i 's|TIMEZONE=Europe/Moscow|TIMEZONE=xxxxxxxxxxx|g' /app/Primo.AI/Api/.env

При необходимости скорректируйте учётные данные.

5. SSO

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

6. Файерволл

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

sudo ufw allow 44392/tcp

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

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

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

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

9. Установка 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