Обновление 1.25.12.4 → 1.26.3.1
Значимые изменения в версии 1.26.3.1, которые следует учитывать системному администратору:
- Уничтожен Agent.NlpEngine (его функционал переехал в Agent)
- Изменились файлы конфигураций всех сервисов
- Изменилась конфигурация docker compose для сервера
- Изменилось содержимое .env-файла для сервера
- Изменилось содержимое nginx.conf для сервера
- Обновлена модель Умного OCR
- Добавлены модели NLP, RAG
- Обновились все образы
- Добавлен компонент “Агентские системы”
Загрузка образов
Загрузите обновленные образы в соответствии со статьями для сервера и целевых машин
| Где используется | Наименование | Старое имя образа | Новое имя образа | Изменение |
|---|---|---|---|---|
| Машина сервера | UI | primo-rpa/ai-server-ui | primo-rpa/ai-server-ui | Обновлен |
| Машина сервера | Api | primo-rpa/ai-server-api | primo-rpa/ai-server-api | Обновлен |
| Машина сервера | Auth | primo-rpa/ai-server-auth | primo-rpa/ai-server-auth | Обновлен |
| Машина сервера | Inference | primo-rpa/ai-server-inference | primo-rpa/ai-server-inference | Обновлен |
| Машина сервера | Logs | primo-rpa/ai-server-logs | primo-rpa/ai-server-logs | Обновлен |
| Машина сервера | Конструктор агентских систем (Backend) | - | primo-rpa/ai-server-langflow-backend | Добавлен |
| Машина сервера | Конструктор агентских систем (UI) | - | primo-rpa/ai-server-langflow-frontend | Добавлен |
| Целевая машина | IDP-сервер (cpu) | primo-rpa/ai-server-smartocr-cpu | primo-rpa/ai-server-idp-cpu | Обновлен |
| Целевая машина | IDP-сервер (gpu) | primo-rpa/ai-server-smartocr-gpu | primo-rpa/ai-server-idp-gpu | Обновлен |
| Целевая машина | NLP-сервер | primo-rpa/ai-server-logics | primo-rpa/ai-server-nlp | Обновлен |
| Целевая машина | FT-сервер | - | primo-rpa/ai-server-ft | Обновлен |
| Целевая машина | vLLM (cpu) | primo-rpa/ai-server-vllm-cpu | primo-rpa/ai-server-vllm-cpu | Обновлен |
| Целевая машина | vLLM (gpu) | primo-rpa/ai-server-vllm-gpu | primo-rpa/ai-server-vllm-gpu | Обновлен |
| Целевая машина | Ollama | primo-rpa/ai-server-ollama | primo-rpa/ai-server-ollama | Обновлен |
| Целевая машина | RAG-сервер | - | primo-rpa/ai-server-rag-gpu | Добавлен |
| Целевая машина | PostgreSQL + pgVector | - | externals/pgvector:pg18 | Добавлен |
| Целевая машина | Исполнитель агентских систем (Backend) | - | primo-rpa/ai-server-langflow-backend | Добавлен |
| Целевая машина | IgX-сервер | - | primo-rpa/ai-server-igx | Добавлен |
Машина сервера
1. Создайте бэкап БД:
docker exec -it postgres mkdir -p /var/lib/postgresql/data/backups && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-identity -F c -f /var/lib/postgresql/data/backups/identity_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-application -F c -f /var/lib/postgresql/data/backups/application_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-filestore -F c -f /var/lib/postgresql/data/backups/filestore_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-license -F c -f /var/lib/postgresql/data/backups/license_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-logs -F c -f /var/lib/postgresql/data/backups/logs_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-inference -F c -f /var/lib/postgresql/data/backups/inference_$(date +%F).dump && \
mkdir -p /app/Primo.AI/Api/backups && \
sudo mv /app/Primo.AI/Api/volumes/pgsql-data/backups/*.dump /app/Primo.AI/Api/backups/.2. Обновите образы.
Через архивы:
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Если есть доступ к 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
done3. Подготовьте Центр управления к запуску
- Скачайте актуальный файл конфигурации docker compose и замените содержимое
/app/Primo.AI/Api/docker-compose.yaml, учитывая нестандартные параметры конфигурации.
ℹ️
Выполните шаг вручную.
- Скачайте актуальный файл с переменными окружения для docker compose и замените содержимое
/app/Primo.AI/Api/.env, учитывая нестандартные параметры конфигурации.
ℹ️
Выполните шаг вручную.
- Скачайте актуальный файл с переменными окружения для docker compose и замените содержимое
/app/Primo.AI/Api/volumes/nginx/nginx.conf, учитывая нестандартные параметры конфигурации.
ℹ️
Выполните шаг вручную.
- Подготовьте Конструктор агенстких систем к запуску:
sudo mkdir /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 && \
sudo chmod -R 777 /app/Primo.AI/Api/volumes/langflow_data /app/Primo.AI/Api/volumes/lffe- Отредактируйте файл конфигурации
/app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json:
- Добавьте параметры Конструктора агентских систем в
Api:
...
"Api": {
...
"LangflowConstructor": {
"ApiBaseUrl": "https://192.168.1.2:44392"
}
...
},
...- Добавьте параметры запуска компонентов Агентских систем:
...
"Rag": {
"StartTimeoutSeconds": 180,
"StopTimeoutSeconds": 10
},
"Langflow": {
"StartTimeoutSeconds": 180,
"StopTimeoutSeconds": 10
},
...- Отредактируйте файл конфигурации
/app/Primo.AI/Api/volumes/conf/Auth/appsettings.ProdLinux.json:
- Скорректируйте время жизни токенов:
...
"Security": {
"Jwt": {
...
"SessionLifetimeMin": 10, // access токен: 10 минут
"SessionLifetimeTailMin": 60,
"SessionRefreshTokenLifetimeMin": 600 // refresh токен: 10 часов
},
...
},
...- Отредактируйте файл конфигурации
/app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json:
- Добавьте ключ
ServerLoad:
...
"ServerLoad": {
"PeriodMilliseconds": 1000,
"Cpu": {
"DegradationLimitPercents": 95,
"DegradationLimitElapsedSeconds": 30
}
},
...4. Перезапустите компоненты Api:
docker compose -f /app/Primo.AI/Api/docker-compose.yaml down && \
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d5. Обновите Api.MachineInfo
- Обновите сервис Api.MachineInfo, скачав файл
Api.MachineInfo-linux.zipиз каталогаdistr:
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.MachineInfosudo 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.MachineInfosudo chown primo:primo-ai /app/Primo.AI/Api.MachineInfo/sudo systemctl start Primo.AI.Api.MachineInfo6. Обновите модель УПД:
wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdata%2Fmodels%2FSmartOCR&files=9a529a4c-2807-41a9-bee9-72a511681000" -P /app/Primo.AI/Api/volumes/Api_Models/7. Скачайте новые LLM для NLP:
| Имя модели | Имя файла | Исполнение |
|---|---|---|
| base-llm-06-7b-gguf-fp16 | c7a88b7f-bf7e-484b-bcc4-fea147315c83 | 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 |
filenames="c7a88b7f-bf7e-484b-bcc4-fea147315c83 \
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" -P /app/Primo.AI/Api/volumes/Api_Models/
done8. Скачайте новые LLM для RAG-сервера:
ℹ️
Только при наличии GPU и для проектов “Агентская система”.
| Имя модели | Имя файла |
|---|---|
| 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 --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Целевые машины
Уничтожение Agent.NlpEngine
- Уничтожьте службу Primo.AI.Agent.NlpEngine.service:
sudo systemctl stop Primo.AI.Agent.NlpEngine
sudo systemctl disable Primo.AI.Agent.NlpEngine
sudo rm /etc/systemd/system/Primo.AI.Agent.NlpEngine.service
sudo systemctl daemon-reload- Удалите сервис Agent.NlpEngine:
sudo mkdir -p /app/Primo.AI/backups
sudo zip -r /app/Primo.AI/backups/Agent.NlpEngine.zip /app/Primo.AI/Agent.NlpEngine
sudo rm -r /app/Primo.AI/Agent.NlpEngine- Перенесите модели:
sudo mv /app/Primo.AI/Agent.NlpEngineData/ModelTemplates/* /app/Primo.AI/AgentData/ModelTemplates/.Агент
- Актуализируйте файл конфигурации:
- Добавьте таймаут ожидания ответа при инференсе моделей:
...
"Api": {
...
"InferenceTimeoutSeconds": 600 // Таймаут запроса к LLM / IDP-серверу. Если null: 5 минут
},
...- Удалите блок
NlpProcess>Engines. - Добавьте блок
LlmEngineProcess:
...
"LlmEngineProcess": {
"HealthCheck": {
"Vllm": {
"Url": "http://localhost:8000/version",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
},
"Ollama": {
"Url": "http://localhost:8004/v1/models",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
},
"LlamaCppPython": {
"Url": "http://localhost:8003/v1/models",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
}
},
"EnginesDockerRun": {
"Vllm": {
"ImageName": "primo-rpa/ai-server-vllm-cpu", // primo-rpa/ai-server-vllm-gpu
"ContainerName": "vllm",
"Port": 8000,
"Subnet": "agent_agent_ai"
},
"Ollama": {
"ImageName": "primo-rpa/ai-server-ollama",
"ContainerName": "ollama",
"Port": 8004,
"Subnet": "agent_agent_ai",
"PostRunCommands": [
"ln {modelFilePath} {blobFilePath}",
"ollama create {modelId} -f {modelMetaFilePath}",
"ollama run {modelId} \"\""
]
},
"LlamaCppPython": {
"ImageName": "primo-rpa/ai-server-llama-cpp-python",
"ContainerName": "llama",
"Port": 8003,
"Subnet": "agent_agent_ai"
}
}
},
...При наличии GPU замените имя образа vLLM: primo-rpa/ai-server-vllm-cpu > primo-rpa/ai-server-vllm-gpu.
- Добавьте блок
Rag:
...
"Rag": {
"Cpus": null,
"HealthCheck": {
"TimeoutSeconds": 90,
"PeriodMilliseconds": 500
},
"DockerOptions": {
"PortsRangeFrom": 9400,
"PortsRangeTo": 9499,
"ImageName": "primo-rpa/ai-server-rag-gpu",
"ContainerNamePrefix": "rag",
"Subnet": "agent_agent_ai",
"SharedMemorySize": 2
}
},
...- Добавьте блок
RagPostgres:
...
"RagPostgres": {
"DbName": "rag_db",
"Password": "postgres",
"User": "postgres",
"Cpus": null,
"HealthCheck": {
"TimeoutSeconds": 30,
"PeriodMilliseconds": 500
},
"DockerOptions": {
"PortsRangeFrom": 5433,
"PortsRangeTo": 5440,
"ImageName": "externals/pgvector:pg18",
"ContainerNamePrefix": "rag_postgres",
"Subnet": "agent_agent_ai",
"SharedMemorySize": 2
},
"Volumes": {
"/app/Primo.AI/AgentData/PostgresData": "/var/lib/postgresql"
}
},
...- Добавьте блок
Lfx:
...
"Lfx": {
"Cpus": null,
"Password": "JLWIyl1xZNDVVx8tcVllOg==",
"HealthCheck": {
"TimeoutSeconds": 30,
"PeriodMilliseconds": 500
},
"DockerOptions": {
"PortsRangeFrom": 9500,
"PortsRangeTo": 9599,
"ImageName": "primo-rpa/ai-server-langflow-backend",
"ContainerNamePrefix": "lfx",
"Subnet": "agent_agent_ai",
"SharedMemorySize": 2
},
"Volumes": {
"/app/Primo.AI/AgentData/LangflowData": "/app/data"
}
},
...- Добавьте блок
IgX:
...
"IgX": {
"Cpus": null,
"HealthCheck": {
"TimeoutSeconds": 30,
"PeriodMilliseconds": 500
},
"DockerOptions": {
"PortsRangeFrom": 9600,
"PortsRangeTo": 9699,
"ImageName": "primo-rpa/ai-server-igx",
"ContainerNamePrefix": "igx",
"Subnet": "agent_agent_ai",
"SharedMemorySize": 2
}
},
...- Обновите файлы агента:
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 rm /app/Primo.AI/Agent/InMemoryProcessStore.json
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Образы
- Удалите старые образы.
images=(
"primo-rpa/ai-server-idp-gpu"
"primo-rpa/ai-server-idp-cpu"
"primo-rpa/ai-server-nlp"
"primo-rpa/ai-server-ollama"
"primo-rpa/ai-server-vllm-cpu"
"primo-rpa/ai-server-vllm-gpu"
"primo-rpa/ai-server-ft"
)
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[@]}"- Загрузите новые образы:
- Вариант загрузки образов 1: скачайте необходимые архивы из официальной поставки AI Server:
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 ai-server-igx"
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
images+=" ai-server-vllm-gpu"
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 "vLLM? y/n"
read vllm
if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then
images+=" ai-server-vllm-cpu"
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..."
wget --content-disposition "https://disk.primo-rpa.ru/index.php/s/t9BHBjR6PP06Yax/download?path=%2FRelease%2FAI%20Server%2Fdistr%2Fexternals&files=$external.tar.7z"
7z x $external.tar.7z
docker load -i $external.tar
rm -f $external.tar.7z $external.tar
done
echo "Готово!"- Вариант загрузки образов 2: используя репозиторий Docker:
Работает при наличии подключения к
nexus.primo-rpa.ru:8000.
#!/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 ai-server-igx"
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
images+=" ai-server-vllm-gpu"
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 "vLLM? y/n"
read vllm
if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then
images+=" ai-server-vllm-cpu"
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:8000/primo-rpa/$image
docker tag nexus.primo-rpa.ru:8000/primo-rpa/$image primo-rpa/$image
docker rmi nexus.primo-rpa.ru:8000/primo-rpa/$image
done
for external in $externals; do
docker pull nexus.primo-rpa.ru:8000/externals/$external
docker tag nexus.primo-rpa.ru:8000/externals/$external externals/$external
docker rmi nexus.primo-rpa.ru:8000/externals/$external
done
echo "Готово!"