Установка Оркестратора на веб-сервер Nginx

Конфигурация:

  • Windows Server 2019

  • Nginx

  • PostgreSQL

  • RabbitMQ

Видеоинструкция

С видеоинструкцией по установке Оркестратора можно ознакомиться здесь.

Начальная подготовка

Подробнее в «Руководстве по предварительной настройке машины Оркестратора под Windows 2016 Server.docx».

  1. Переименуем сервер, дав ему простое и понятное название. Например, ORCHESTRATOR.

  2. Раскомментируем в файле C:\Windows\System32\drivers\etc\hosts следующую строку:

  1. Разрешаем удаленные подключения к хосту. Заходим в Start Menu > Control Panel > System > Advanced System Settings > Remote и включаем настройку, как на рисунке ниже:

Шаг 1. Подготовка и установка дистрибутивов

Подробнее в «Руководстве по предварительной настройке машины Оркестратора под Windows 2016 Server.docx».

  1. Создаем папку C:\Primo.

  2. Создаем папку C:\Install и копируем в нее нужные дистрибутивы:

  1. Устанавливаем Google Chrome. Обновляем его до последней версии и делаем браузером по умолчанию.

  2. Устанавливаем Notepad++. Все опции оставляем по умолчанию.

  3. Устанавливаем PowerShell. При установке включаем все чекбоксы:

  1. Создаем папку docs на рабочем столе и копируем туда следующую документацию из комплекта поставки:

Шаг 2. Настройка PostgreSQL

Подробнее в «Руководстве по установке PostgreSQL под Windows 2016 Server.docx».

Устанавливаем PostgreSQL Server:

  1. Распаковываем архив postgresql-13.4-1-windows.zip в папку C:\Install.

  2. Кликаем по файлу C:\Install\postgresql-13.4-1-windows-x64.exe.

  3. Выбираем Да в появившемся окне:

  1. В следующем окне выбираем Далее.

  1. Выбираем директорию (1), куда будет установлена программа. Оставляем все без изменения и жмем Далее (2).

  1. В окне выбора компонентов тоже все оставляем по умолчанию и нажимаем Далее.

  1. Прописываем путь C:\Primo\PostgreSQL\Data (1), где будут располагаться файлы базы данных Оркестратора и конфигурационные файлы, нажимаем Далее (2).

  1. Вводим пароль* (1) и его подтверждение (2) для суперпользователя БД (postgres), нажимаем Далее.

*В дальнейшем пароль можно будет изменить в PostgreSQL.

  1. В следующем окне не меняем настройки порта по умолчанию (5432) и нажимаем Далее.

  1. Из выпадающего меню (1) выбираем Русский, Россия (2) и нажимаем Далее (3).

  1. Перепроверяем введенные данные (1). В случае необходимости можно вернуться, кликнув Назад, и исправить параметры. Если все верно, выбираем Далее.

  1. В следующем окне нажимаем Далее.

  1. Дожидаемся завершения процесса установки.

  1. Stack Builder не понадобится, убираем галочку (1) и нажимаем Завершить (2):

  1. Заходим в PostgreSQL через pgAdmin (пользователь postgres/postgres). pgAdmin установится вместе с PostgreSQL и доступен через меню Пуск**.

**Требуется для определения параметров оборудования. Если для этого используется сервис MachineInfo, то не нужно.

15.1. Создаем пользователя, под которым будут работать компоненты Оркестратора, и необходимые БД:

CREATE ROLE orch_user WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  NOCREATEDB
  NOCREATEROLE
  NOREPLICATION
  PASSWORD 'postgres';
GRANT pg_execute_server_program TO orch_user;

CREATE DATABASE ltools WITH OWNER orch_user;
CREATE DATABASE ltoolslogs WITH OWNER orch_user;
CREATE DATABASE ltoolsidentity WITH OWNER orch_user;
CREATE DATABASE ltoolslicense WITH OWNER orch_user;

15.2. В БД ltoolslicense выполняем скрипты из папки C:\Install\ltoolslicense:

  • get_cpu_id.sql;

  • get_hdd_id.sql;

  • get_host_name.sql.

🔸 ВАЖНО! При выполнении скриптов из postgresql-13/ltoolslicense нужно следить, чтобы случайно не внести изменения в текст скрипта. Недопустимо вносить даже незначимые, с точки зрения кода скрипта, пробелы и пустые строки. В том числе, если отредактировали скрипт в редакторе, который заменил визуально ненаблюдаемые символы конца строки (отличаются для Windows- и Linux-строк).

  1. Настраиваем доступ к БД по сети (по умолчанию она доступна только локально по localhost):

    • Открываем папку C:\Primo\PostgreSQL\Data.

    • Вносим изменения в файл postgresql.conf:

    listen_addresses = '*'
    • Вносим изменения в файл pg_hba.conf:

    local    all      all                  	trust
    host     all      all     0.0.0.0/0  	trust
    • Перезапускаем службу PostgreSQL.

    • Проверяем статус работы службы:

Установка и настройка сервера БД завершена.

Шаг 3. Установка RabbitMQ

Подробнее в «Руководстве по установке RabbitMQ под Windows 2016 Server.docx».

  1. Разрешаем localhost в файле C:\Windows\System32\drivers\etc\hosts.

  1. Разархивируем rabbitmq.zip в ту же папку C:\Install\rabbitmq.

  2. Сначала устанавливаем Erlang (otp_win64_23.2.exe), все параметры оставляем по умолчанию.

  3. Затем устанавливаем сам RabbitMQ (rabbitmq-server-3.8.11.exe), все параметры оставляем по умолчанию.

  4. Производим первоначальное конфигурирование RabbitMQ:

> cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.11\sbin
> rabbitmq-plugins.bat enable rabbitmq_management
> rabbitmqctl.bat add_user "admin" "Qwe123!@#" 
> rabbitmqctl.bat set_user_tags admin administrator 
> rabbitmqctl.bat set_permissions -p / admin ".*" ".*" ".*" 
> rabbitmqctl.bat stop
> rabbitmqctl.bat start_app
  1. Открываем веб-интерфейс управления RabbitMQ на http://localhost:15672, убеждаемся, что он открывается:

Заходим под пользователем admin/Qwe123!@#.

Дальнейшее управление RabbitMQ можно осуществлять через этот веб-интерфейс.

Шаг 4. Установка и запуск служб

MachineInfo

Подробнее в «Руководстве по установке MachineInfo как службы под Windows 2016 Server.docx».

В версии Windows 2016 Server среда исполнения ASP .NET Core предустановлена. Поэтому сразу устанавливаем MachineInfo.

  1. Разархивируем C:\Install\MachineInfo.zip в папку C:\Primo\MachineInfo. Можно при помощи команды в PowerShell:

> $InstallPath = "C:\Install"
> Expand-Archive -LiteralPath "$InstallPath\MachineInfo.zip" -DestinationPath "C:\Primo\MachineInfo" -Force
  1. Создаем системную переменную окружения. Для этого в PoweShell выполняем команду:

> [System.Environment]::SetEnvironmentVariable('ASPNETCORE_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  1. Регистрируем Primo.Orchestrator.MachineInfo.exe как службу Windows и сразу запускаем её. Она должна работать как локальная служба. Для этого в PowerShell последовательно выполняем команды:

> New-Service -Name Primo.Orchestrator.MachineInfo -BinaryPathName "C:\Primo\MachineInfo\Primo.Orchestrator.MachineInfo.exe" -Description "Primo.Orchestrator.MachineInfo" -DisplayName "Primo.Orchestrator.MachineInfo" -StartupType Automatic 
> $s = Get-Service "Primo.Orchestrator.MachineInfo"
> $s.Start()
  1. После чего созданная служба Primo.Orchestrator.MachineInfo будет отображаться в списке всех служб как запущенная:

  1. Открываем порт 5051 на файерволе.

  2. Если используется один сервер с MachineInfo, в конфигурационном файле службы WebApi прописываем ссылку на него.

    Параметр Timeout (по умолчанию 4 сек.) – это время ответа, после которого сервис считается недоступным.

  1. Если используется кластер MachineInfo, или MachineInfo используется в гео-кластере, в конфигурационном файле службы WebApi прописываются ссылки на все узлы кластера:

Порядок узлов имеет значение. В момент генерации запроса на лицензию должны быть доступны все узлы. Узлы нельзя скрывать за балансировщиком нагрузки (load balancer)!

Notifications

Подробнее в «Руководстве по установке Notifications под Windows 2016 Server.docx».

  1. Разархивируем C:\Install\Notifications.zip в папку C:\Primo\Notifications.

  2. Редактируем конфигурацию Notifications в файле C:\Primo\Notifications\appsettings.ProdWin.json:

    • Правим секцию Email, отвечающую за SMTP-сервер, с которого будет происходить рассылка.

  1. Проверяем, что значение системной переменной окружения DOTNET_ENVIRONMENT равно ProdWin. Для этого в PoweShell выполняем команду:

> [Environment]::GetEnvironmentVariable('DOTNET_ENVIRONMENT', 'Machine')
  1. Если системная переменная окружения DOTNET_ENVIRONMENT не была создана, то создаем ее. Для этого в PowerShell выполняем команду:

> [System.Environment]::SetEnvironmentVariable('DOTNET_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  1. Регистрируем Primo.Orchestrator.Notifications.exe как службу Windows и сразу запускаем её. Она должна работать как сетевая служба. Для этого в PoweShell последовательно выполняем команды:

> New-Service -Name Primo.Orchestrator.Notifications -BinaryPathName "C:\Primo\Notifications\Primo.Orchestrator.Notifications.exe" -Description "Primo.Orchestrator.Notifications" -DisplayName "Primo.Orchestrator.Notifications" -StartupType Automatic 
> $s = Get-Service "Primo.Orchestrator.Notifications"
> $s.Start()
  1. После чего созданная служба Primo.Orchestrator.Notifications будет отображаться в списке всех служб как запущенная.

  2. Через интерфейс Оркестратора переходим в раздел Настройки > Пользователи. Редактируем для пользователей параметры рассылки - указываем e-mail и типы событий:

RDP2

Подробнее в «Руководстве по установке RDP2 под Windows 2016 Server.docx».

  1. Разархивируем C:\Install\RDP2.zip в папкуC:\Primo\RDP2.

  2. Редактируем конфигурацию RDP2 в файле C:\Primo\RDP2\appsettings.ProdWin.json:

    • Меняем в секции Orchestrator адрес Оркестратора и учетку пользователя, можно использовать только системного пользователя rdpservice:

    • Если поменялся пароль пользователя rdpservice – меняем. Пароль предварительно шифруем программой шифрования паролей.

    • При необходимости устанавливаем значение AddressFilter для фильтрации по машине Агента либо оставляем поле пустым (будут использованы все Агенты системы).

  3. Настраиваем путь до файла с логом и период ротации файла с логом (по умолчанию - день).

  4. Проверяем, что значение системной переменной окружения DOTNET_ENVIRONMENT равно ProdWin. Для этого в PoweShell выполняем команду:

> [Environment]::GetEnvironmentVariable('DOTNET_ENVIRONMENT', 'Machine')
  1. Создаем системную переменную окружения DOTNET_ENVIRONMENT, если она не создана ранее. Для этого в PowerShell выполняем команду:

> [System.Environment]::SetEnvironmentVariable('DOTNET_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  1. Регистрируем Primo.Orchestrator.RDP2.exe как службу Windows и сразу запускаем её. Она должна работать как локальная служба. Для этого в PowerShell последовательно выполняем команды:

> New-Service -Name Primo.Orchestrator.RDP2 -BinaryPathName "C:\Primo\RDP2\Primo.Orchestrator.RDP2.exe" -Description "Primo.Orchestrator.RDP2" -DisplayName "Primo.Orchestrator.RDP2" -StartupType Automatic
  1. Запускаем службу. Служба должна работать под Local System account:

  1. Переходим на вкладку Восстановление (Recovery) и проверяем, что действия при сбое установлены:

  1. Проверяем через интерфейс Оркестратора, что RDP-сессия устанавливается корректно:

  1. Параметры сессии должны быть установлены следующим образом:

  • Authentication Level = Attemp Authentication

  • Negotiate Security Layer = True

RobotLogs

Подробнее в «Руководстве по установке RobotLogs как службы под Windows 2016 Server.docx».

В версии Windows 2016 Server среда исполнения ASP .NET Core предустановлена. Поэтому сразу устанавливаем RobotLogs.

  1. Сначала требуется установить RabbitMQ (см. «Руководство по установке RabbitMQ под Windows 2016 Server.docx»).

  2. Разархивируем C:\Install\RobotLogs.zip в папку C:\Primo\RobotLogs. Можно при помощи команды в PowerShell:

> $InstallPath = "C:\Install"
> Expand-Archive -LiteralPath "$InstallPath\RobotLogs.zip" -DestinationPath "C:\Primo\RobotLogs " -Force
  1. Создаем системную переменную окружения, если не создана ранее. Для этого в PoweShell выполняем команду:

> [System.Environment]::SetEnvironmentVariable('ASPNETCORE_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  1. Настраиваем конфигурационный файл:

    • Настраиваем строки подключения в БД:

    • Настраиваем UserName и Password сервера RabbitMQ, который используется для обработки логов со скринами рабочего стола:

    • Настраиваем Host, UserName и Password сервера RabbitMQ, который используется для интеграции с Оркестратором:

    • Открываем порт 5672 на файерволе сервера RabbitMQ, который используется для интеграции с Оркестратором.

    • Сервер RabbitMQ, который используется для интеграции с Оркестратором, общий для очередей Primo.Orchestrator.RobotLogs и Primo.Orchestrator.WebApi. Поэтому требуется соблюдать соответствие названий очередей и обменников.

    • Настраиваем URL Оркестратора. При необходимости, можно поменять пароль встроенной системной записи Orchestrator – одновременно через UI Оркестратора и в этой секции конфига:

    • Настраиваем ScreenFilePath – путь до файлов со скринами рабочего стола, которые собираются с машины робота. Папка по этому пути должна быть создана заранее, и на неё должны быть настроены права на чтение и запись для всех.

    • Настраиваем в соответствии с конфигурационным файлом WebApi список тенантов:

  2. Регистрируем Primo.Orchestrator.RobotLogs.exe как службу Windows и сразу запускаем её. Она должна работать как локальная служба. Для этого в PowerShell последовательно выполняем команды:

> New-Service -Name Primo.Orchestrator.RobotLogs -BinaryPathName "C:\Primo\RobotLogs\Primo.Orchestrator.RobotLogs.exe" -Description "Primo.Orchestrator.RobotLogs" -DisplayName "Primo.Orchestrator.RobotLogs" -StartupType Automatic 
> $s = Get-Service "Primo.Orchestrator.RobotLogs"
> $s.Start()
  1. После чего созданная служба Primo.Orchestrator.RobotLogs отобразится в списке всех служб как запущенная.

  2. Открываем порт 56748 на файерволе, если служба RobotLogs не на одном сервере с Nginx для WebApi.

  3. Проверяем, что в конфиге Nginx настроено проксирование на RobotLogs*:

*Или аналогично настроено в IIS для узла UI, если используется IIS.

  1. В конфигурационном файле Primo.Orchestrator.WebApi переключаем прием логов на сервис RobotLogs и перезапускаем Primo.Orchestrator.WebApi:

  1. Если запросы в RobotLogs проксируются через отдельный от WebApi эндпоинт, нужно указать в конфиг-файле Primo.Orchestrator.WebApi этот эндпоинт в RobotLogsBaseUrl:

В настоящее время не поддерживается. Зарезервирован для дальнейшей оптимизации приема логов от роботов.

Тонкая настройка производительности приема логов настраивается в секции InputBufferRobotLogs:

  • MaxQueueLength – максимальный размер входного буфера приема логов от робота. Чем выше, тем больший размер пачек логов робот без потерь может слать в Оркестратор.

  • MaxBatchSize – максимальный размер пачки за один раз сбрасываемый сервисом в БД ltoolslogs. Чем выше, тем меньше обращений в БД потребуется, но тем большее количество данных за один раз должно быть передано.

  • ThreadSleep – время (мс) опроса входного буфера.

States

Подробнее в «Руководстве по установке States под Windows 2016 Server.docx».

  1. Разархивируем C:\Install\States.zip в папку C:\Primo\States.

  2. Редактируем конфигурационный файл States - C:\Primo\States\appsettings.ProdWin.json:

    • Находим секцию ConnectionStrings:

    • И меняем значение HOST для всех строк подключения к БД на реальный IP серверов БД:

    Если поменялся пользователь/пароль БД – их тоже меняем.

  3. Проверяем, что значение системной переменной окружения DOTNET_ENVIRONMENT равно ProdWin. Для этого в PoweShell выполняем команду:

    > [Environment]::GetEnvironmentVariable('DOTNET_ENVIRONMENT', 'Machine')

    Создаем системную переменную окружения DOTNET_ENVIRONMENT, если она не создана ранее. Для этого в PowerShell выполняем команду:

    > [System.Environment]::SetEnvironmentVariable('DOTNET_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  4. Регистрируем Primo.Orchestrator.States.exe как службу Windows и сразу запускаем. Она должна работать как сетевая служба. Для этого в PowerShell последовательно выполняем команды:

    > New-Service -Name Primo.Orchestrator.States -BinaryPathName "C:\Primo\States\Primo.Orchestrator.States.exe" -Description "Primo.Orchestrator.States" -DisplayName "Primo.Orchestrator.States " -StartupType Automatic 
    > $s = Get-Service "Primo.Orchestrator.States"
    > $s.Start()

После чего созданная служба Primo.Orchestrator.States будет отображаться в списке всех служб как запущенная.

WebApi

Подробнее в «Руководстве по установке WebApi как службы под Windows 2016 Server.docx».

В версии Windows 2016 Server среда исполнения ASP .NET Core предустановлена. Поэтому сразу устанавливаем WebApi.

  1. Разархивируем C:\Install\WebApi.zip в папку C:\Primo\WebApi. Можно при помощи команды в PowerShell:

    > Expand-Archive -LiteralPath "$InstallPath\WebApi.zip" -DestinationPath 'C:\Primo\WebApi' -Force
  2. Редактируем конфигурацию WebApi в файле C:\Primo\WebApi\appsettings.ProdWin.json:

    • Меняем адрес на реальный IP вашего сервера. См. nginx.config и «Руководство по установке Nginx под Windows 2016 Server.docx».

  3. Создаем папку для публикации дистрибутивов робота, например, C:\tmp, и указываем её в конфиге appsettings.ProdWin.json:

  4. Меняем в файле appsettings.ProdWin.json в секции ConnectionStrings значение HOST для всех строк подключения к БД на реальный IP серверов БД.

    Для PostgreSQL это секция:

    Где меняем значение атрибута:

    Для MS SQL SERVER меняем значение здесь:

  5. Если для работы лицензий используется сервис получения параметров оборудования, то настраиваем WebApi на работу с этим сервисом – вводим адрес сервиса:

  1. Если поменялся пользователь/пароль БД – их тоже меняем.

  2. Создаем системную переменную окружения. Для этого в PoweShell выполняем команду:

    > [System.Environment]::SetEnvironmentVariable('ASPNETCORE_ENVIRONMENT', 'ProdWin', [System.EnvironmentVariableTarget]::Machine)
  3. Регистрируем Primo.Orchestrator.WebApi.exe как службу Windows и сразу запускаем. Она должна работать как локальная служба. Для этого в PowerShell последовательно выполняем команды:

    > New-Service -Name Primo.Orchestrator.WebApi -BinaryPathName "C:\Primo\WebApi\Primo.Orchestrator.WebApi.exe" -Description "Primo.Orchestrator.WebApi" -DisplayName "Primo.Orchestrator.WebApi" -StartupType Automatic 
    > $s = Get-Service "Primo.Orchestrator.WebApi"
    > $s.Start()
  4. После чего созданная служба Primo.Orchestrator.WebApi будет отображаться в списке всех служб как запущенная:

🔸 Служба может не запуститься. Наиболее вероятная причина – это неверный Connection string (пароль) в appsettings.ProdWin.json, или не развернута/не настроена какая-либо из четырех БД Оркестратора.

При обновлении службы WebApi может потребоваться дополнительная настройка для RabbitMQ. Для выполнения настройки необходимо перед стартом службы WebApi запустить скрипт из комплекта поставки:

  • deletequeues.bat – для RabbitMQ, запущенном на ОС Windows;

  • deletequeues.sh – для RabbitMQ, запущеном на ОС Linux.

Скрипты необходимо запустить на сервере, на котором запущен RabbitMQ.

Результат шага 4

После того, как все перечисленные службы установлены, они должны появиться в диспетчере служб Windows:

Шаг 5. Установка Nginx как службы Windows

Подробнее в «Руководстве по установке Nginx в качестве службы под Windows 2016 Server.docx».

Чтобы установить Nginx в качестве службы, необходимо:

  1. Разархивировать файл nginx-service.zip, который идет в комплекте поставки, в папку C:\Primo\nginx-1.21.1 (версия Nginx может измениться).