Skip to Content

Установка Orchestrator с помощью Docker

💡

Нет доступа к интернету? Если ваш сервер работает в закрытом контуре (без выхода в интернет), воспользуйтесь инструкцией по установке Docker в офлайн-режиме.

1. Предварительные условия и требования

Аппаратные требования минимальны: 2 ядра CPU, 4 ГБ оперативной памяти

Программное обеспечение:

  • Операционная система: Любая ОС с поддержкой Docker
  • Docker Compose: версия 2.0+

Сетевая конфигурация:

  • Открытый порт: 5080 (Orchestrator UI) - порт можно изменить, если 5080 занят
  • Разрешенный исходящий доступ к реестру образов nexus.primo-rpa.ru:8000

Получение файлов

  1. Скачайте файл docker-compose.yml для необходимой версии:

2. Предварительная настройка

  1. Скачайте файл docker-compose.yml

  2. Настройте параметры в файле:

    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 docker

4. Запуск Orchestrator

⚠️

Все команды (кроме docker login) выполняются с правами root или через sudo

  1. Авторизация в Nexus через docker login:

    sudo docker login nexus.primo-rpa.ru:8000
  2. Подготовка директории:

    sudo mkdir -p /opt/Docker # Скопируйте подготовленный docker-compose.yml в /opt/Docker
  3. Запуск контейнеров:

    cd /opt/Docker sudo docker compose up -d
  4. Проверка статуса:

    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

Тогда внесите следующие изменения:

  1. В секции environment образа webapi отредактируйте строку:

    RDP__RdpBaseUrl: http://10.0.0.18:5080/rdpstream
  2. В секции environment образа ui отредактируйте строки:

    NGINX_RDP_STREAM_HOSTNAME: 10.0.0.151 NGINX_RDP_STREAM_PORT: 5102

7. Обновление версии

  1. Остановка текущей версии:

    cd /opt/Docker sudo docker compose down sudo docker compose up -d
  2. Обновление тегов образов в docker-compose.yml

  3. Запуск новой версии:

    sudo docker compose up -d
  4. Очистка старых образов:

    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.sh
8.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. Проверка работоспособности
  1. Убедитесь, что Vault инициализирован и распечатан:

    sudo docker exec -it vault vault status

    В выводе должно быть Initialized: true и Sealed: false.

  2. Проверьте, что службы Orchestrator читают секреты из Vault.
    Например, посмотрите логи webapi:

    sudo docker logs webapi | grep -i "vault\|secret"

    Ошибки подключения к Vault или отсутствия секретов должны отсутствовать.

  3. Вручную добавьте тестовый секрет и проверьте, что служба его видит (если требуется).

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.