Skip to Content

Обновление 1.26.6.1 → 1.26.8.0

ℹ️

Примечания к релизам: 1.26.6.2 · 1.26.6.3 · 1.26.6.4

Значимые изменения, которые следует учитывать системному администратору:

  • Обновлены все образы Docker: ai-server-api, ai-server-auth, ai-server-ft, ai-server-idp-cpu, ai-server-idp-gpu, ai-server-inference, ai-server-logs, ai-server-machineinfo, ai-server-nlp, ai-server-ollama, ai-server-rag-gpu, ai-server-ui
  • Образ vLLM заменён: primo-rpa/ai-server-vllm-gpu → внешний образ externals/vllm-openai:v0.26.0
  • Добавлена новая модель base-LLM-12-35b-safetensors-nfvp4 (vLLM)
  • Изменены конфигурации сервисов: Api (LlmRunners, Agents.UsagePeriod), Inference (Orchestrator), агент (переработана секция LlmEngineProcess: Endpoint вместо Url, диапазоны портов, ExposePort)
  • Обновлены дистрибутивы Agent-linux.zip и Api.MachineInfo-linux.zip
  • TLS-сертификаты больше не встроены в образ ai-server-ui — теперь монтируются через volume в docker-compose.yaml
  • Обновлены версии Python-зависимостей в сервисах DS (устранение CVE)
  • Образ Ollama (ai-server-ollama) теперь запускается от непривилегированного пользователя (UID 1001)
  • Обновлён образ RabbitMQ: 3.10.7-management4.2.8-management-alpine (устранение уязвимостей, Alpine-база)
  • Обновлён образ PostgreSQL: postgres:17.6postgres:17.10-alpine (устранение уязвимостей, Alpine-база)
  • Обновлён образ Redis: redis:latestredis:7.4-alpine (устранение уязвимостей, Alpine-база)

Машина сервера

1. Извлеките TLS-сертификаты из текущего образа

⚠️

Начиная с версии 1.26.6.2 сертификаты не включены в образ ai-server-ui. Перед обновлением необходимо сохранить сертификаты из работающего контейнера и подключить их через volume.

Создайте директорию для сертификатов:

sudo mkdir -p /app/Primo.AI/Api/volumes/nginx/ssl

Извлеките сертификаты из работающего контейнера server_ui:

docker cp server_ui:/etc/nginx/cert1.crt /app/Primo.AI/Api/volumes/nginx/ssl/cert1.crt docker cp server_ui:/etc/nginx/cert1.rsa /app/Primo.AI/Api/volumes/nginx/ssl/cert1.rsa

Установите права доступа:

sudo chmod 644 /app/Primo.AI/Api/volumes/nginx/ssl/cert1.crt sudo chmod 600 /app/Primo.AI/Api/volumes/nginx/ssl/cert1.rsa
ℹ️

Если контейнер server_ui уже остановлен или сертификаты недоступны, сгенерируйте новые по инструкции.

2. Обновите docker-compose.yaml

Откройте файл /app/Primo.AI/Api/docker-compose.yaml и внесите следующие изменения:

a) Обновите образ PostgreSQL:

postgres: image: externals/postgres:17.10-alpine

b) Обновите образ RabbitMQ:

rabbitMQ: image: externals/rabbitmq:4.2.8-management-alpine

c) Обновите образ Redis:

redis: image: externals/redis:7.4-alpine

d) Добавьте в секцию nginxvolumes монтирование сертификатов:

nginx: image: primo-rpa/ai-server-ui ... volumes: - ./volumes/nginx/nginx.conf:/etc/nginx/nginx.conf - ./volumes/nginx/ssl/cert1.crt:/etc/nginx/cert1.crt:ro - ./volumes/nginx/ssl/cert1.rsa:/etc/nginx/cert1.rsa:ro - ./volumes/nginx/:/var/log/nginx

3. Обновите образы Docker

Через архив:

sudo apt update && sudo apt install 7z names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-machineinfo ai-server-ui" externals="postgres:17.10-alpine rabbitmq:4.2.8-management-alpine redis:7.4-alpine" 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 rm $name.tar.7z $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 rm $filename.tar.7z $filename.tar done

Если есть доступ к nexus.primo-rpa.ru:8005:

names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-machineinfo ai-server-ui" externals="postgres:17.10-alpine rabbitmq:4.2.8-management-alpine redis:7.4-alpine" for name in $names; do docker pull nexus.primo-rpa.ru:8005/primo-rpa/$name docker tag nexus.primo-rpa.ru:8005/primo-rpa/$name primo-rpa/$name docker rmi nexus.primo-rpa.ru:8005/primo-rpa/$name done for external in $externals; do docker pull nexus.primo-rpa.ru:8005/externals/$external docker tag nexus.primo-rpa.ru:8005/externals/$external externals/$external docker rmi nexus.primo-rpa.ru:8005/externals/$external done

4. Скачайте новую модель

Имя моделиИмя файлаИсполнение
base-llm-12-35b-safetensors-nfvp463e56e59-6c96-4fc7-9ecb-afab3d79bb21vLLM
filenames="63e56e59-6c96-4fc7-9ecb-afab3d79bb21" 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

5. Обновите конфигурацию сервисов

a) Api. В файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте параметр UsagePeriod в секцию Agents и новую секцию LlmRunners:

... "Agents": { ... "StopProcessAfterUnavailablePeriod": 300, "UsagePeriod": 10000 }, ... "LlmRunners": { "StartTimeoutSeconds": 1200, "StopTimeoutSeconds": 300 }, ...

b) Inference. В файле /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию Orchestrator:

... "Orchestrator": { "Login": "aiserver", "Password": "JLWIyl1xZNDVVx8tcVllOg==", "Address": "https://<адрес Центра управления>:44392" }, ...
ℹ️

Укажите в Address реальный внешний адрес Центра управления. Password — зашифрованное значение.

6. Обновите 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" sudo systemctl stop Primo.AI.Api.MachineInfo sudo unzip -o Api.MachineInfo-linux.zip -x "appsettings*" -d /app/Primo.AI/Api.MachineInfo/ sudo chmod +x /app/Primo.AI/Api.MachineInfo/Primo.AI.Api.MachineInfo sudo chown primo:primo-ai /app/Primo.AI/Api.MachineInfo/ sudo systemctl start Primo.AI.Api.MachineInfo

7. Перезапустите компоненты:

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

Убедитесь, что Центр управления доступен по HTTPS (порт 44392).

Целевые машины

⚠️

Перед началом работ на целевой машине остановите все её процессы через Центр управления (UI).

1. Настройте права доступа для Ollama

⚠️

Шаг обязателен, если на целевой машине используется Ollama. Образ ai-server-ollama теперь запускается от непривилегированного пользователя (UID 1001). Агент создаёт файлы и поддиректории в ModelTemplates от имени agent:primo-ai, поэтому для доступа Ollama используется механизм POSIX ACL с наследованием прав — он не зависит от текущего владельца файла. Директории blobs и meta дополнительно должны принадлежать непосредственно UID 1001: Ollama изменяет временные метки файлов в них, а для этого требуется реальное владение файлом, а не только ACL.

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

sudo apt-get install -y acl

Настройте права доступа для UID 1001 на существующие файлы и директории:

sudo setfacl -R -m u:1001:rwx /app/Primo.AI/AgentData/ModelTemplates

Установите default ACL для автоматического наследования прав новыми файлами и директориями:

sudo setfacl -R -d -m u:1001:rwx /app/Primo.AI/AgentData/ModelTemplates

Верните владельца директории агенту:

sudo chown -R agent:primo-ai /app/Primo.AI/AgentData/ModelTemplates

Смените владельца файлов моделей на UID 1001:

sudo chown -R 1001:1001 /app/Primo.AI/AgentData/ModelTemplates/blobs/* sudo chown -R 1001:1001 /app/Primo.AI/AgentData/ModelTemplates/meta/*

Проверьте результат:

getfacl /app/Primo.AI/AgentData/ModelTemplates

В выводе должны присутствовать строки user:1001:rwx и default:user:1001:rwx.

2. Замените ln на cp в конфигурации агента

⚠️

Шаг обязателен, если на целевой машине используется Ollama. Ранее агент создавал жёсткую ссылку (ln) на файл модели. Жёсткая ссылка сохраняет владельца исходного файла (agent:primo-ai), а Ollama (UID 1001) не может изменить временные метки чужого файла. Операция chtimes завершается ошибкой operation not permitted. Замена на копирование (cp) решает проблему: копия создаётся от имени пользователя контейнера (UID 1001), и Ollama получает полный доступ.

Откройте файл /app/Primo.AI/Agent/appsettings.ProdLinux.json, найдите секцию OllamaPostRunCommands и замените ln на cp:

"PostRunCommands": [ "cp {modelFilePath} {blobFilePath}", "ollama create {modelId} -f {modelMetaFilePath}", "ollama run {modelId} \"\"" ]

3. Обновите файлы агента

wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdistr&files=Agent-linux.zip&downloadStartSecret=uf3pctriscf" sudo systemctl stop Primo.AI.Agent sudo unzip -o Agent-linux.zip -x "appsettings*" -d /app/Primo.AI/Agent/ sudo chmod +x /app/Primo.AI/Agent/Primo.AI.Agent sudo chown -R agent:primo-ai /app/Primo.AI/Agent/ sudo systemctl start Primo.AI.Agent

4. Обновите образы DS

  • Вариант загрузки 1: скачайте необходимые архивы из официальной поставки AI Server:
images="" externals="" echo "GPU? y/n" read GPU if [ "$GPU" = "y" ] || [ "$GPU" = "Y" ]; then echo "FT-сервер? y/n" read ft_server if [ "$ft_server" = "y" ] || [ "$ft_server" = "Y" ]; then images+=" ai-server-ft" fi echo "NLP-сервер? y/n" read nlp_server if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then images+=" ai-server-nlp" fi echo "Ollama? y/n" read ollama if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then images+=" ai-server-ollama" fi echo "vLLM? y/n" read vllm if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then externals+=" vllm-openai:v0.26.0" fi echo "IDP-сервер? y/n" read idp_server if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then images+=" ai-server-idp-gpu" fi echo "RAG? y/n" read rag if [ "$rag" = "y" ] || [ "$rag" = "Y" ]; then images+=" ai-server-rag-gpu" fi else echo "NLP-сервер? y/n" read nlp_server if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then images+=" ai-server-nlp" fi echo "Ollama? y/n" read ollama if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then images+=" ai-server-ollama" fi echo "IDP-сервер? y/n" read idp_server if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then images+=" ai-server-idp-cpu" fi fi # Удаляем ведущий пробел images=$(echo $images | sed 's/^ //') names=$(echo $images | tr ' ' '\n') echo "Загружаемые images: $images" sudo apt update && sudo apt install -y 7z for name in $names; do echo "Загрузка $name..." 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 rm -f $name.tar.7z $name.tar done for external in $externals; do echo "Загрузка external $external..." 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 rm -f $filename.tar.7z $filename.tar done echo "Готово!"
  • Вариант загрузки 2: используя репозиторий Docker: Работает при наличии подключения к nexus.primo-rpa.ru:8005.
#!/bin/bash images="" externals="" echo "GPU? y/n" read GPU if [ "$GPU" = "y" ] || [ "$GPU" = "Y" ]; then echo "FT-сервер? y/n" read ft_server if [ "$ft_server" = "y" ] || [ "$ft_server" = "Y" ]; then images+=" ai-server-ft" fi echo "NLP-сервер? y/n" read nlp_server if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then images+=" ai-server-nlp" fi echo "Ollama? y/n" read ollama if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then images+=" ai-server-ollama" fi echo "vLLM? y/n" read vllm if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then externals+=" vllm-openai:v0.26.0" fi echo "IDP-сервер? y/n" read idp_server if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then images+=" ai-server-idp-gpu" fi echo "RAG? y/n" read rag if [ "$rag" = "y" ] || [ "$rag" = "Y" ]; then images+=" ai-server-rag-gpu" fi else echo "NLP-сервер? y/n" read nlp_server if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then images+=" ai-server-nlp" fi echo "Ollama? y/n" read ollama if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then images+=" ai-server-ollama" fi echo "IDP-сервер? y/n" read idp_server if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then images+=" ai-server-idp-cpu" fi fi # Удаляем ведущий пробел images=$(echo $images | sed 's/^ //') names=$(echo $images | tr ' ' '\n') echo "Загружаемые images: $images" for name in $names; do docker pull nexus.primo-rpa.ru:8005/primo-rpa/$name docker tag nexus.primo-rpa.ru:8005/primo-rpa/$name primo-rpa/$name docker rmi nexus.primo-rpa.ru:8005/primo-rpa/$name done for external in $externals; do docker pull nexus.primo-rpa.ru:8005/externals/$external docker tag nexus.primo-rpa.ru:8005/externals/$external externals/$external docker rmi nexus.primo-rpa.ru:8005/externals/$external done echo "Готово!"

5. Обновите конфигурацию агента

Добавьте параметр ExtraEnvs в секцию Ollama файла /app/Primo.AI/Agent/appsettings.ProdLinux.json:

"Ollama": { ... "PostRunCommands": [ "cp {modelFilePath} {blobFilePath}", "ollama create {modelId} -f {modelMetaFilePath}", "ollama run {modelId} \"\"" ], "ExtraEnvs": [ "-e OLLAMA_GO_TEMPLATE=1" ] }

Также переработана секция LlmEngineProcess (проверка доступности через Endpoint вместо Url, диапазоны портов PortsRangeFrom/PortsRangeTo вместо Port, параметр ExposePort). Приведите секцию к следующему виду:

"LlmEngineProcess": { "HealthCheck": { "Vllm": { "Endpoint": "/version", "TimeoutSeconds": 600, "PeriodMilliseconds": 500 }, "Ollama": { "Endpoint": "/v1/models", "TimeoutSeconds": 600, "PeriodMilliseconds": 500 }, "LlamaCppPython": { "Endpoint": "/v1/models", "TimeoutSeconds": 600, "PeriodMilliseconds": 500 } }, "EnginesDockerRun": { "Vllm": { "ImageName": "externals/vllm-openai:v0.26.0", "ContainerName": "vllm", "PortsRangeFrom": 8000, "PortsRangeTo": 8019, "Subnet": "agent_agent_ai", "ExposePort": true }, "Ollama": { "ImageName": "primo-rpa/ai-server-ollama", "ContainerName": "ollama", "PortsRangeFrom": 8020, "PortsRangeTo": 8039, "Subnet": "agent_agent_ai", "PostRunCommands": [ "cp {modelFilePath} {blobFilePath}", "ollama create {modelId} -f {modelMetaFilePath}", "ollama run {modelId} \"\"" ], "ExtraEnvs": [ "-e OLLAMA_GO_TEMPLATE=1" ] }, "LlamaCppPython": { "ImageName": "primo-rpa/ai-server-llama-cpp-python", "ContainerName": "llama", "PortsRangeFrom": 8040, "PortsRangeTo": 8059, "Subnet": "agent_agent_ai", "ExposePort": true } } },

Перезапустите агент:

sudo systemctl restart Primo.AI.Agent

Что дальше

После завершения обновления выполните проверку работоспособности системы.

Last updated on