Обновление 1.26.3.2 → 1.26.8.0
Значимые изменения, которые следует учитывать системному администратору:
- Обновились все образы на машине сервера и целевых машинах
- Обновлен дистрибутив агента на Целевой машине
- TLS-сертификаты больше не встроены в образ
ai-server-ui— теперь монтируются через volume вdocker-compose.yaml - Упразднён образ
ai-server-igx(функционал перенесён вai-server-langflow-backend) - Упразднён образ
ai-server-vllm-cpu - Образ 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) - Обновился файл конфигурации
nginx.conf: добавлен location для SSE-стриминга событий Конструктора агентских систем - Добавлен новый параметр конфигурации Inference —
UnprocessedExpirationSeconds(очистка устаревших необработанных запросов) - Добавлены параметры
*PrefetchCountв секциюRabbitMQконфига Inference (ограничение одновременных запросов) - Добавлена секция
LangflowScriptPresetв конфиг Api (хранилище пресетов агентских систем) - Добавлен volume
Api_LangflowScriptPresetвdocker-compose.yamlдля хранения пресетов агентских систем - Добавлены пресеты конвейеров агентских систем
- Добавлены новые модели:
base-LLM-11-30b,base-LLM-12-35b,base-LLM-13-26b,ft-base-0.6b-fp16,ft-base-2b-fp16 - Удалены модели:
base-LLM-01-*,base-LLM-06-32b-gguf-q4_k_m,base-LLM-10-4b-safetensors-base - Обновлён образ PostgreSQL:
postgres:17.6→postgres:17.10-alpine(устранение уязвимостей, Alpine-база) - Обновлён образ RabbitMQ:
3.10.7-management→4.2.8-management-alpine(устранение уязвимостей, Alpine-база) - Обновлён образ Redis:
redis:latest→redis:7.4-alpine(устранение уязвимостей, Alpine-база) - Образ Ollama (
ai-server-ollama) теперь запускается от непривилегированного пользователя (UID 1001)
Машина сервера
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. Обновите образы.
Через архивы:
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 ai-server-langflow-backend ai-server-langflow-frontend"
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 ai-server-langflow-backend ai-server-langflow-frontend"
externals="postgres:17.10-alpine rabbitmq:4.2.8-management-alpine redis:7.4-alpine"
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
done3. Обновите nginx.conf.
Добавьте в файл /app/Primo.AI/Api/volumes/nginx/nginx.conf следующий блок перед общим location ~ (?i)^\/api(\/.*)?:
location ~ (?i)^\/api\/langflowScripts\/job\/.+\/events$ {
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Connection "";
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_buffering off;
}Блок должен располагаться выше общего location ~ (?i)^\/api(\/.*)? { ... }, иначе nginx не будет его использовать. Регулярные выражения в nginx проверяются в порядке объявления.
4. Настройте очистку устаревших запросов.
В файле конфигурации /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию ClearRequestsService:
...
"ClearRequestsService": {
"DefaultExpirationSeconds": 3600,
"UnprocessedExpirationSeconds": 86400
},
...| Параметр | По умолчанию | Описание |
|---|---|---|
DefaultExpirationSeconds | 3600 | Время хранения обработанного запроса (сек). По умолчанию 1 час |
UnprocessedExpirationSeconds | 86400 | Время хранения необработанного запроса (сек). По умолчанию 24 часа |
5. Добавьте параметры PrefetchCount в конфиг Inference.
В файле конфигурации /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте в секцию RabbitMQ следующие параметры:
...
"RabbitMQ": {
...
"AgentSystemRequestEventPrefetchCount": 10,
"SmartOcrRequestEventPrefetchCount": 10,
"NlpRequestEventPrefetchCount": 10,
"PackageRequestEventPrefetchCount": 10,
"PdfGeneratingEventPrefetchCount": 10
},
...| Параметр | По умолчанию | Описание |
|---|---|---|
AgentSystemRequestEventPrefetchCount | 10 | Кол-во одновременных запросов агентских систем в обработке |
SmartOcrRequestEventPrefetchCount | 10 | Кол-во одновременных запросов Умного OCR в обработке |
NlpRequestEventPrefetchCount | 10 | Кол-во одновременных запросов NLP в обработке |
PackageRequestEventPrefetchCount | 10 | Кол-во одновременных запросов пакетной обработки |
PdfGeneratingEventPrefetchCount | 10 | Кол-во одновременных запросов генерации PDF |
Уменьшите значения PrefetchCount при нехватке ресурсов на сервере. Это ограничит количество запросов, одновременно обрабатываемых сервисом Inference.
Также в файле /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию Orchestrator:
...
"Orchestrator": {
"Login": "aiserver",
"Password": "JLWIyl1xZNDVVx8tcVllOg==",
"Address": "https://<адрес Центра управления>:44392"
},
...Укажите в Address реальный внешний адрес Центра управления. Password — зашифрованное значение.
6. Добавьте секцию LangflowScriptPreset в конфиг Api.
В файле конфигурации /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте секцию LangflowScriptPreset в блок FileUpload:
...
"FileUpload": {
...
"LangflowScriptPreset": {
"ReadBufferSize": 10000,
"ReadBufferIterationBeforeSave": 50,
"Folder": "/app/Primo.AI/Api_LangflowScriptPreset",
"StoreType": "FileSystem"
},
...
},
...Также в файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте параметр UsagePeriod в секцию Agents и новую секцию LlmRunners:
...
"Agents": {
...
"StopProcessAfterUnavailablePeriod": 300,
"UsagePeriod": 10000
},
...
"LlmRunners": {
"StartTimeoutSeconds": 1200,
"StopTimeoutSeconds": 300
},
...7. Обновите docker-compose.yaml.
В файле /app/Primo.AI/Api/docker-compose.yaml:
- Обновите образ PostgreSQL:
postgres:
image: externals/postgres:17.10-alpine- Обновите образ RabbitMQ:
rabbitMQ:
image: externals/rabbitmq:4.2.8-management-alpine- Обновите образ Redis:
redis:
image: externals/redis:7.4-alpine- Добавьте в секцию
volumesсервисаapi:
- ./volumes/Api_LangflowScriptPreset:/app/Primo.AI/Api_LangflowScriptPreset- Добавьте в секцию
volumesсервисаnginxмонтирование сертификатов:
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/nginx8. Скачайте новые модели:
| Имя модели | Имя файла | Исполнение |
|---|---|---|
| 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 |
| ft-base-0.6b-fp16 | 6dd7fb3c-d58e-427c-8845-39964df50bc5 | vLLM (FT) |
| ft-base-2b-fp16 | ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0 | vLLM (FT) |
filenames="e8dfc900-e183-4647-80b0-a97f242a7dba \
3377b494-f686-4cef-9db1-4ffb3164cc9c \
63e56e59-6c96-4fc7-9ecb-afab3d79bb21 \
1442b32b-aaee-4139-88c1-a7f313d11a09 \
6dd7fb3c-d58e-427c-8845-39964df50bc5 \
ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0"
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/
done9. Скачайте пресеты конвейеров агентских систем:
sudo mkdir -p /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/
filenames="e18c953c-6cbf-4f43-9267-76796bea018c \
fd652603-1410-49cd-a3ab-6323256753fa \
b933462a-b85e-4267-b5df-45a78f9453a4 \
3bc6dd44-226f-4a61-87e6-475e4c0e2dd0"
for filename in $filenames; do
wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdata%2Fagsys-presets&files=$filename" -P /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/
done10. Перезапустите компоненты Api:
docker compose -f /app/Primo.AI/Api/docker-compose.yaml down && \
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d11. Обновите 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Целевые машины
Перед началом работ на целевой машине остановите все её процессы через Центр управления (UI).
Настройте права доступа для 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.
Обновите файлы агента:
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Удалите упразднённые образы
Образ ai-server-igx больше не нужен. Его функционал перенесён в ai-server-langflow-backend.
Образ ai-server-vllm-cpu упразднён.
images=(
"primo-rpa/ai-server-igx"
"primo-rpa/ai-server-vllm-cpu"
)
for img in "${images[@]}"; do
echo "Удаляем образ: $img"
docker stop $(docker ps -a -q --filter ancestor="$img") 2>/dev/null || true
docker rm $(docker ps -a -q --filter ancestor="$img") 2>/dev/null || true
done
docker rmi "${images[@]}" 2>/dev/null || trueОбразы
- Вариант загрузки образов 1: скачайте необходимые архивы из официальной поставки AI Server:
images=""
echo "GPU? y/n"
read GPU
if [ "$GPU" = "y" ] || [ "$GPU" = "Y" ]; then
echo "Агентские системы? y/n"
read agent_systems
if [ "$agent_systems" = "y" ] || [ "$agent_systems" = "Y" ]; then
images+=" ai-server-rag-gpu ai-server-langflow-backend"
externals+=" pgvector_pg18"
fi
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
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"
echo "Externals: $externals"
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 "Агентские системы? y/n"
read agent_systems
if [ "$agent_systems" = "y" ] || [ "$agent_systems" = "Y" ]; then
images+=" ai-server-rag-gpu ai-server-langflow-backend"
externals+=" pgvector_pg18"
fi
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
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"
echo "Externals: $externals"
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 "Готово!"Обновите конфигурацию агента
Добавьте параметр 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Что дальше
После завершения обновления выполните проверку работоспособности системы.