Установка Orchestrator с помощью Docker
Нет доступа к интернету? Если ваш сервер работает в закрытом контуре (без выхода в интернет), воспользуйтесь инструкцией по установке Docker в офлайн-режиме.
1. Предварительные условия и требования
Аппаратные требования минимальны: 2 ядра CPU, 4 ГБ оперативной памяти
Программное обеспечение:
- Операционная система: Любая ОС с поддержкой Docker
- Docker Compose: версия 2.0+
Сетевая конфигурация:
- Открытый порт:
5080(Orchestrator UI) - порт можно изменить, если 5080 занят - Разрешенный исходящий доступ к реестру образов
nexus.primo-rpa.ru:8000
Получение файлов
- Скачайте файл
docker-compose.ymlдля необходимой версии:
2. Предварительная настройка
-
Скачайте файл
docker-compose.yml -
Настройте параметры в файле:
10.0.0.18 заменить на ip хоста, где запущен docker-compose (в двух местах: - base-url: &base-url http://10.0.0.18:5080 - RDP__RdpBaseUrl: http://10.0.0.18:5080/rdpstream) 10.0.0.151 после настройки службы RDP2 (см. п.6) заменить на ip RDP2 (в одном месте: NGINX_RDP_STREAM_HOSTNAME: 10.0.0.151)
3. Установка Docker
Инструкции по установке Docker см. в официальной документации: - Docker для Ubuntu - Docker для Astra Linux
# Обновление пакетов
sudo apt-get update
sudo apt-get install -y ca-certificates curl
# Добавление официального репозитория Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установка Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПроверка установки:
docker --version
docker compose version
sudo systemctl status docker4. Запуск Orchestrator
Все команды (кроме docker login) выполняются с правами root или через
sudo
-
Авторизация в Nexus через docker login:
sudo docker login nexus.primo-rpa.ru:8000 -
Подготовка директории:
sudo mkdir -p /opt/Docker # Скопируйте подготовленный docker-compose.yml в /opt/Docker -
Запуск контейнеров:
cd /opt/Docker sudo docker compose up -d -
Проверка статуса:
sudo docker ps # Все контейнеры должны быть в статусе "Up"
5. Проверка работоспособности
После запуска контейнеров откройте в браузере:
- Orchestrator UI:
http://ваш_ip_сервера:5080/
Проверка через командную строку:
curl -I http://ваш_ip_сервера:5080/
6. Настройка RDP2
Служба Primo.Orchestrator.RDP2 не устанавливается в рамках докера, поэтому потребуется отдельное разворачивание согласно инструкции:
Настройка конфигурации RDP2
В конфигурации RDP2 указать IP и порт сервера, на котором развернут Оркестратор (параметры EnabledOrigins, BaseUrl, Host):
"EnabledOrigins": ["http://10.0.0.18:5088"],
"ConfigPasswordEncryptor": {
"Algorithm": "AES" //AES или RSA
},
"Orchestrator": {
"BaseUrl": "http://10.0.0.18:5088"
},
"Host": "10.0.0.151", // IP машины с сервисом RDP2, если не задан, то IP определяется из http-запросаOrchestrator в Docker контейнере работает по протоколу HTTP. Убедитесь, что в
настройках RDP2 для параметров EnabledOrigins и BaseUrl указан протокол
http://, а не https://.
Настройка docker-compose.yml
После настройки RDP2 необходимо прописать его адрес в файле docker-compose.yml.
Предположим, что:
- UI Оркестратора доступен по адресу:
http://10.0.0.18:5080 - Адрес и порт RDP2-сервера:
10.0.0.151:5102
Тогда внесите следующие изменения:
-
В секции
environmentобразаwebapiотредактируйте строку:RDP__RdpBaseUrl: http://10.0.0.18:5080/rdpstream -
В секции
environmentобразаuiотредактируйте строки:NGINX_RDP_STREAM_HOSTNAME: 10.0.0.151 NGINX_RDP_STREAM_PORT: 5102
7. Обновление версии
-
Остановка текущей версии:
cd /opt/Docker sudo docker compose down sudo docker compose up -d -
Обновление тегов образов в
docker-compose.yml -
Запуск новой версии:
sudo docker compose up -d -
Очистка старых образов:
sudo docker image prune
Примечание: docker compose restart НЕ применит изменения переменных окружения
8. Интеграция с HashiCorp Vault
Начиная с версии Orchestrator 1.26.5 поддерживается внешнее хранилище секретов — HashiCorp Vault.
Это позволяет не хранить пароли, строки подключения и ключи в базе данных Orchestrator, а централизованно управлять ими.
Если Vault не требуется, пропустите этот раздел — Orchestrator продолжит использовать встроенное хранилище секретов (БД).
8.1. Добавьте сервисы Vault в docker-compose.yml
Скопируйте следующие строки в ваш файл docker-compose.yml (например, после сервиса ui или в конец файла):
vault:
image: hashicorp/vault:latest
container_name: vault
hostname: vault
ports:
- 8400:8200
volumes:
- ./vault-config/config.hcl:/vault/config/config.hcl
- ../vault-data:/vault/file/
environment:
- VAULT_ADDR=http://0.0.0.0:8200
cap_add:
- IPC_LOCK
command: server
restart: always
vault-init:
image: hashicorp/vault:latest
container_name: vault-init
environment:
- VAULT_ADDR=http://vault:8200
- MY_VAULT_TOKEN=${MY_VAULT_TOKEN:-test}
volumes:
- ../vault-data/vault-root-token:/vault/file/vault-root-token
- ./vault-config/vault-init.sh:/usr/local/bin/vault-init.sh
- ../vault-data:/vault/file/
command: /usr/local/bin/vault-init.sh
restart: on-failure
depends_on:
- vault- Порт
8400на хосте пробрасывается на8200внутри контейнера Vault. - Данные Vault сохраняются в../vault-dataна хосте, чтобы при перезапуске не потерять секреты. - Сервисvault-initзапускается один раз и инициализирует Vault (создаёт ключи, распечатывает, записывает корневой токен).
8.2. Создайте конфигурационный файл Vault
Создайте директорию и файл ./vault-config/config.hcl:
mkdir -p ./vault-config
cat > ./vault-config/config.hcl <<EOF
storage "file" {
path = "/vault/file"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = true
}
ui = false
EOFВ примере отключён TLS (tls_disable = true) для упрощения тестовой
установки. Для production-среды обязательно настройте HTTPS-сертификат.
8.3. Скрипт инициализации vault-init.sh
Создайте файл ./vault-config/vault-init.sh со следующим содержимым:
#!/bin/sh
# Ожидание готовности Vault
until vault status &> /dev/null; do
echo "Waiting for Vault to start..."
sleep 2
done
# Проверка, инициализирован ли уже Vault
if vault status | grep -q "Initialized.*true"; then
echo "Vault already initialized. Skipping init."
exit 0
fi
# Инициализация Vault (1 ключ, порог 1 — только для тестов)
vault operator init -key-shares=1 -key-threshold=1 > /tmp/vault_init.txt
# Извлечение ключа и токена
UNSEAL_KEY=$(grep 'Unseal Key 1:' /tmp/vault_init.txt | awk '{print $4}')
ROOT_TOKEN=$(grep 'Initial Root Token:' /tmp/vault_init.txt | awk '{print $4}')
# Сохранение токена в файл (будет смонтирован на хост)
echo "$ROOT_TOKEN" > /vault/file/vault-root-token
# Распечатывание Vault
vault operator unseal "$UNSEAL_KEY"
# Авторизация с корневым токеном
vault login "$ROOT_TOKEN"
# Включение KV-движка версии 2 (рекомендуется для секретов)
vault secrets enable -path=secret kv-v2
echo "Vault initialized and unsealed. Root token saved to /vault/file/vault-root-token"Сделайте скрипт исполняемым:
chmod +x ./vault-config/vault-init.sh8.4. Настройте сервисы Orchestrator для работы с Vault
В каждом сервисе Orchestrator, который должен получать секреты из Vault (например, webapi, analytic, queues, robotlogs и др.), добавьте следующие переменные окружения в секцию environment:
environment:
- SecretsExternal=Vault
- VAULT_ADDR=http://vault:8200
- VAULT_TOKEN_FILE=/vault/file/vault-root-token # путь к файлу с токеном (если используется)SecretsExternal=Vault(илиSecretsExternal=1) переключает службу на чтение секретов из Vault вместо БД. - ПараметрExternal(bool) оставлен для обратной совместимости, но рекомендуется использовать новыйSecretsExternal.- Если переменная
SecretsExternalне задана или имеет значениеDB/0, поведение остаётся старым.
Также убедитесь, что в конфигурации служб (например, appsettings.json) удалены или закомментированы чувствительные параметры — они будут автоматически подтягиваться из Vault.
8.5. Запустите Orchestrator с Vault
Выполните команды:
cd /opt/Docker
sudo docker compose down
sudo docker compose up -dПроверьте, что все контейнеры запущены:
sudo docker psВы должны увидеть контейнеры vault, vault-init (который после успешной инициализации будет в статусе Exited (0)), а также сервисы Orchestrator.
8.6. Проверка работоспособности
-
Убедитесь, что Vault инициализирован и распечатан:
sudo docker exec -it vault vault statusВ выводе должно быть
Initialized: trueиSealed: false. -
Проверьте, что службы Orchestrator читают секреты из Vault.
Например, посмотрите логиwebapi:sudo docker logs webapi | grep -i "vault\|secret"Ошибки подключения к Vault или отсутствия секретов должны отсутствовать.
-
Вручную добавьте тестовый секрет и проверьте, что служба его видит (если требуется).
8.7. Важные замечания
- При использовании Vault на Linux (не в Docker) службам Orchestrator потребуется указать переменные окружения через
EnvironmentFile=/etc/default/primo-common— см. документацию по установке на Linux. - Для корректной работы с HTTPS-сертификатами Vault необходимо добавить доверенный корневой сертификат в контейнеры Orchestrator или использовать переменную
VAULT_SKIP_VERIFY=true(только для тестов). - Если после настройки Vault какие-то службы не запускаются (например, Agent), проверьте, что все обязательные секреты (вроде пароля сертификата Kestrel) присутствуют в Vault с правильными ключами.
Подробнее о структуре секретов, настройке политик и методах аутентификации Vault см. в статье Хранение секретов в Vault.