Содержание

Инструкция по развёртыванию модуля Триггеров в Linux: версия 17.Х+


Версия модуля триггеров 17.Х и выше работает только c версией системы ADVANTA 3.23 и выше.

Требования к ПО на сервере

  1. Операционная система последней стабильной LTS-версии на базе ядра Linux - например, Astra Linux, Red OS, дистрибутивы на базе Debian, Ubuntu, CentOS, Fedora, OpenSUSE, Red Hat и другие производные от них (тестировалось на ОС Ubuntu 22.04.4 LTS).
  2. Веб-сервер последней стабильной версии - например, Apache, Nginx или аналоги (тестировалось на Nginx 1.18.0).
  3. Среда выполнения Dot Net 6.0 с поддержкой ASP.NET Core (для версии модуля Триггеров 17.25 и выше. Для версий до 17.22 включительно достаточно Dot Net 5.0).
  4. Один из вариантов СУБД:

Подготовка сервера к установке модуля триггеров

  1. Устанавливаем на сервер Операционную систему на базе Linux.
  2. Устанавливаем выбранную СУБД. Рекомендуется использовать PostgreSQL (из пакетов репозитория выбранной ОС или с официального сайта разработчика).
  3. Устанавливаем Среду выполнения ASP.NET Core 6.0 (Документация по вариантам установки)
  4. Устанавливаем Веб-сервер (например, Nginx)
    Пример для ОС Ubuntu 22+ (репозитории-источники указанных пакетов должны быть настроены в ОС, необходимые зависимости будут установлены автоматически)
    sudo apt update && \
    sudo apt install -y postgresql aspnetcore-runtime-6.0 nginx
  5. Средствами операционной системы добавляем учетную запись пользователя, от имени которого будут запускаться компоненты Модуля триггеров.

Компоненты модуля Триггеров

Версия модуля Триггеров 17.x может корректно работать только с версиями ADVANTA 3.23 и выше.

Начиная с версии 17 модуль Триггеров является многокомпонентным. Каждая компонента должна разворачиваться отдельно.

Перечень компонент:

Получение архива для распространения с исполняемыми файлами из VisualStudio (для разработчиков)

  1. Открываем проект Advanta в Visual Studio 2022.
  2. В проекте Advanta.Triggers.WebClient редактируем appsettings.json, в соответствии с требуемыми настройками (редактирование конфигурации можно сделать позже, на этапе установки приложения).
  3. Вызываем контекстное меню на проекте Advanta.Triggers.WebClient и выбираем пункт Publish.
  4. Выбираем профиль «Distribute» и нажимаем кнопку Publish, после успешного завершения процесса скомпилированные исполняемые файлы будут доступны в папке «Advanta.Triggers.WebClient/bin/Release/net5/publish/» относительно пути расположения исходных файлов.
  5. Данные файлы можно заархивировать и распространять клиентам вместе с данной инструкцией по развертыванию приложения на периферии.

Настройка MS SQL

  1. Открываем SSMS и подключаемся к нашему инстансу MSSQL.
  2. Заходим в глобальную секцию «Безопасность» и добавляем туда объект «Все пользователи, успешно прошедшие аутентификацию».
  3. Создаем новую БД.
  4. Во вновь созданной БД в параметрах «Безопасность» добавляем созданную нами учетную запись пользователя.
  5. При первичном развёртывании или обновлении мажорной версии модуля триггеров, необходимо обновить схему базы данных. Для этого первый запуск модуля триггеров должен выполняться с ключом Advanta/Database/MigrateOnStartup = true в конфигурационных файлах компонентов Сайт и Движок. Последующие запуски могут осуществляться с любым значением данного ключа.
  6. Сохраняем информацию о созданной БД и учетных данных пользователя для использования в строке подключения конфигурационных файлов Модуля триггеры.

Подробная настройка БД MS SQL представлена на странице Настройка базы данных MS SQL.

Настройка PostgreSQL

  1. Открываем pgAdmin, либо используем режим командной строки psql, запущенной под админом сервера БД.
  2. Добавляем пользователя (например, CREATE USER user_name WITH PASSWORD 'user_password'; ).
  3. Создаем новую Базу данных (например, CREATE DATABASE db_name; ).
  4. Предоставляем новому пользователю полные права на созданную Базу данных (например, GRANT ALL PRIVILEGES ON DATABASE db_name TO user_name; ).
  5. При первичном развёртывании или обновлении мажорной версии модуля триггеров, необходимо обновить схему базы данных. Для этого первый запуск модуля триггеров должен выполняться с ключом Advanta/Database/MigrateOnStartup = true в конфигурационных файлах компонентов Сайт и Движок. Последующие запуски могут осуществляться с любым значением данного ключа.
  6. Сохраняем информацию о созданной БД и учетных данных пользователя для использования в строке подключения конфигурационных файлов Модуля триггеры.

Подробная настройка БД PostgreSQL представлена на странице Настройка базы данных PostgreSQL.

Развёртывание компонента "Сайт"

Веб-приложение Панели управления триггерами

Настройка веб-сервера

На примере Nginx в ОС Ubuntu 22+ (документация).

  1. Веб-сервер должен быть установлен в операционной системе (см. выше раздел «Подготовка сервера к установке …»). Запускаем его командой:
    sudo service nginx start
  2. Создаем отдельный файл конфигурации nano/etc/nginx/sites-available/advanta_triggers. Заполняем его следующими данными:
      map $http_connection $connection_upgrade {
        "~*Upgrade" $http_connection;
        default keep-alive;
      }
     
      server {
        listen        80;
        server_name   example.com *.example.com;
        location / {
            proxy_pass         http://127.0.0.1:5000/;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection $connection_upgrade;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
      }
  3. В параметрах сервера listen и server_name указываем корректные данные порта и адреса домена(ов), по которым будет доступно веб-приложение. При необходимости, настройте иные параметры самостоятельно стандартными средствами конфигурирования веб-сервера (например, SSL-шифрование трафика).
  4. Параметр proxy_pass в разделе location содержит указание на локальный адрес и порт сервера http://127.0.0.1:5000/, на котором будет работать компонент модуля триггеров Сайт после его запуска. Изменяйте данный параметр только при скорректированных параметрах работы компонента Сайт, отличных от установленных по умолчанию. Обеспечьте средствами сервера (например, используя firewall) защиту указанного порта (5000) от доступа к нему извне, т.к. он должен быть доступен только локально для работы приложений в рамках одного сервера.
  5. Сохраняем созданный файл конфигурации и выполняем следующую команду, чтобы проверить корректность синтаксиса файлов конфигурации веб-сервера:
    sudo nginx -t
  6. При наличии ошибок, исправляем их до тех пор, пока проверка конфигурации не будет проходить успешно.
  7. Создаем символическую ссылку на наш файл конфигурации веб-приложения:
    sudo ln -s /etc/nginx/sites-available/advanta_triggers /etc/nginx/sites-enabled/advanta_triggers
  8. Применяем изменения в конфигурационных файлах веб-сервера командой:
    sudo nginx -s reload
  9. Веб-приложение с Панелью управления триггерами будет доступно через браузер по адресу и порту server_name:listen, указанным в конфигурационном файле веб-сервера, но только после запуска на сервере компонента Сайт (см. далее).

В случае, если компонент Сайт Модуля триггеров не запущен или запущен с ошибками, веб-сервер будет сообщать об ошибке 502 «Bad Gateway».

Установка, настройка и запуск "Сайта"

  1. Копируем в отдельную папку на сервере все файлы из полученного архива с дистрибутивом приложения Модуль триггеров. Например, создав новую директорию /home/<username>/triggers/ в домашней папке пользователя сервера , под которым планируется запуск приложения. Для размещения файлов компонента можно использовать и любую другую папку на ваш выбор. Главное, чтобы она была доступна запускающему приложение пользователю ОС.
  2. Проверяем, что именно в этой рабочей папке находится основной исполняемый файл компонента Сайт - Advanta.Triggers.WebClient.dll
  3. Открываем в рабочей папке компонента файл appsettings.json и находим секцию ConnectionStrings. Меняем в ней тип подключения, адрес SQL-сервера, название БД, логин и пароль пользователя, созданные на этапе настройки Базы данных для модуля триггеров.
  4. При необходимости, вносим изменения в остальные параметры файла appsettings.json (см. ниже раздел «Описание настроек Сайта»).
  5. Запускаем компонент Сайт командой в рабочей папке под нужным пользователем ОС:
    dotnet Advanta.Triggers.WebClient.dll

    Приложение работает в консольном режиме и может быть остановлено сочетанием клавиш Ctrl+C.

  6. В случае успешного запуска компонента Сайт веб-приложение Панели управления триггерами отобразит в браузере форму авторизации для входа.

Приложение компонента Сайт должно быть постоянно запущено на сервере для функционирования панели управления в веб-браузере. При необходимости, средствами операционной системы его можно настроить в виде службы с автозапуском и автоматической перезагрузкой в случае сбоев (документация).

В ходе работы компонент Сайт сохраняет журналы своей работы в подпапке рабочего каталога, указанной в файле appsettings.json в разделе Logging/File/BasePath.

Если необходима диагностика, почему не запускается компонент Сайт, то необходимо в файле web.config найти секцию aspNetCore и поменять параметр stdoutLogEnabled на значение true.

Описание настроек "Сайта"

Настройки компонента приложения Сайт осуществляются в файле appsettings.json, размещенном в рабочей папке компонента. Так как приложение можно запустить в различных конфигурациях, то в проекте есть несколько файлов типа: appsettings.ConfigurationName.json.

При получении архива для распространения с исполняемыми файлами используется файл с настройками appsettings.json для запуска компонента в режиме Production.

Основной раздел настроек "Сайта"

WorkingDirectory – относительный или абсолютный путь, по которому размещается рабочая папка компонента. Необязательный параметр. Значение по умолчанию: "<external>" (относительный путь к рабочей папке от размещения файла appsettings.json).

Раздел Logging

"Logging": {
    "File": {
      "RootPath": "/home/<username>/triggers",
      "BasePath": "Logs",
      "LogLevel": {
        "Default": "Information"
      }
    }
  },

Данный раздел настраивается в соответствии с правилами ведения журнала в .NET Core.

Подраздел File

Раздел ADVANTA

    "RuntimeUser": {
	//  "Token": "your_token",
	// или
      "Login": "your_login",
      "Password": "your_password"
    },
    "Host": "https://your_instance_domain.ru/",
    "ApiRequestTimeout": 300, //секунд
    "ObjectsSyncTimeout": 60, //минут
Подраздел Alerts
    "Alerts": {
      "Emails": "admin_email@my_email_hosting.ru; admin_email2@my_email_hosting.ru",
      "SmtpServer": {
        "Address": "smtp.my_email_hosting.ru",
        "Login": "mylogin@my_email_hosting.ru",
        "Password": "12345",
        "Port": "587",
        "UseSSL": "true"
      }
    },
Подраздел Rebus

В данном разделе указываются параметры подключения к Базе данных Системы ADVANTA к шине обмена сообщениями Rebus.

Вид транспорта и строка подключения к БД ConnectionString должны быть идентичны параметрам, используемым в настройках Системы ADVANTA.

    "Rebus": {
      //Варианты транспорта: "MSSQL", "PostgreSql"
      "Transport": "PostgreSql",
 
      // пример строки подключения для транспорта "MSSQL"
      //"ConnectionString": "Data Source = SqlServerName;Database=AdvantaRebus;Trusted_Connection=True;MultipleActiveResultSets=true", 
 
      // пример строки подключения для транспорта "PostgreSql"
      "ConnectionString": "User ID=username;Password=userpwd;Host=localhost;Port=5432;Database=AdvantaRebus;", 
 
      "InputQueueName": "bus_triggers_queue", // "Bus_TriggersInputQueue" - для транспорта "MSSQL"
      "SubscriptionsTableName": "Bus_TriggersInputQueue_Subscriptions"
      "PostgreSqlMessagesTableName": "bus_triggersinputqueue" //используется только для транспорта "PostgreSql"
    }

Раздел Database

В этом разделе указываются настройки подключения к собственной служебной Базе данных модуля Триггеров, отдельной от БД Системы ADVANTA.

  "Database": {
    //Варианты провайдеров: "MSSQL", "PostgreSql"
    "Provider": "PostgreSql",
 
    // пример строки подключения для провайдера "MSSQL"
    //"ConnectionString": "Data Source = SqlServerName;Database=AdvantaTriggers;Trusted_Connection=True;MultipleActiveResultSets=true",
 
    // пример строки подключения для провайдера "PostgreSql"
    "ConnectionString": "User ID=username;Password=userpassword;Host=localhost;Port=5432;Database=AdvataTriggers;",
    "MigrateOnStartup": "true"
  },

Раздел Module

  "Module": {
    "InstanceName": "My Triggers Module"
  },

Раздел HashiCorpVault

Данный раздел настраивается только в том случае, если требуется часть конфиденциальных строк получать через HashiCorp Vault.

Ссылка на секрет в Vault могут прописываться для любых значений строковых параметров в любых разделах файла конфигурации (кроме раздела HashiCorpVault) в формате: {$your_hashicorp_vault_key$}.

Развёртывание "Движка" (Engine)

Консольное приложение, которое обрабатывает события Системы ADVANTA, поступающие в Модуль триггеров через шину данных Rebus.

Установка и настройка "Движка" (Engine)

Исполняемые файлы Движка размещаются в подпапку Engine общего дистрибутива при публикации всех компонентов Модуля триггеров.

Содержимое папки Engine может быть целиком перенесено в любую другую папку сервера (например, в папку /home/<username>/triggers_engine - в имени каталогов рекомендуется использовать буквы только в нижнем регистре).

Движок является консольным приложением ОС Linux, которое запускается из рабочей папки данного компонента командой:

dotnet Advanta.Triggers.Engine.dll

Движок должен располагаться на том же хосте (сервере), что и компонент Сайт.

Движок может быть запущен вручную либо передан под управление Агенту.

Одному Сайту должен соответствовать один экземпляр работающего Движка.

Описание настроек "Движка" (Engine)

Настройки компонента Движок осуществляются в отдельном файле appsettings.json, который расположен в корне рабочей папки данного компонента. Так как приложение можно запустить в различных конфигурациях, то в проекте есть несколько файлов типа: appsettings.ConfigurationName.json. При получении архива для распространения с исполняемыми файлами используется файл с настройками appsettings.json для запуска компонента Движок в режиме "Production".

Для запуска Движка необходимо использовать те же настройки файла appsettings.json, которые используются для запуска компонента Сайт. Отличаться может только необязательный раздел Logging. При отсутствии в настройках данного раздела журналы событий компонента создаются по умолчанию в подкаталоге logs рабочей папки компонента.

В случае несовпадения ключевых настроек в разделах "Database", "Advanta", "Rebus" конфигурационных файлов appsettings.json Движка и Сайта, они не смогут «найти» друг друга в процессе инициализации канала коммуникации по UDP-протоколу.

Начиная с версии Модуля триггеров 18.4 в настройках Движка может использоваться дополнительный опциональный раздел "Integration", отвечающий за его подключение к очереди сообщений RabbitMQ.

Раздел Integration

  "Integration": {
    "RabbitMQ": {
      "Endpoints": [
        {
          "EndpointName": "publisher", // Название точки подключения
          "EndpointMode": "Publish", // Варианты: Publish, Consume
          "ConnectionString": null, // Необходимо указать либо ConnectionString, либо Connection
          "Connection": { // Если указаны оба параметра, то будет использован ConnectionString
            "Host": "localhost",
            "Port": 5672,
            "VirtualHost": null
          },
          "Channel": {
            "Exchange": "test",
            "Queue": "test"
          },
          "RoutingKey": null,
          "ReconnectTimeoutInMinutes": 1
        },
        {
          "EndpointName": "consumer", // Название точки подключения
          "EndpointMode": "Consume", // Варианты: Publish, Consume
          "ConnectionString": null, // Необходимо указать либо ConnectionString, либо Connection
          "Connection": { //Если указаны оба параметра, то будет использован ConnectionString
            "Host": "localhost",
            "Port": 5672,
            "VirtualHost": null
          },
          "Channel": {
            "Exchange": "test",
            "Queue": "test"
          },
          "RoutingKey": null,
          "ReconnectTimeoutInMinutes": 1
        }
      ]
    }
  }

Развёртывание "Агента"

Приложение для автоматического перезапуска Движка (Engine) модуля триггеров при обновлении связанной с ним Системы ADVANTA.

Установка и настройка "Агента"

Исполняемые файлы Агента размещаются в подпапку Agent общего дистрибутива при публикации всех компонентов Модуля триггеров. Содержимое папки Agent может быть целиком перенесено в любую другую папку сервера (например, в папку /home/<username>/triggers_agent).

По умолчанию Агент сконфигурирован как консольное приложение ОС Linux, которое запускается из рабочей папки данного компонента:

dotnet Advanta.Triggers.Agent.dll

Запущенный такой командой Агент по умолчанию выводит логи своей работы и в консоль, из которой он запущен, и в файл журнала.

Для прекращения работы Агента необходимо в консоли с запущенным приложением нажать Ctrl+C.

Для развёртывания Агента как службы можно воспользоваться инструкцией, чтобы обеспечить автоматический запуск компонента при загрузке Системы и перезапуск в случае сбоев приложения.

Для запуска Агента в режиме вывода логов только в файл необходимо запустить приложение с ключом -console.

dotnet Advanta.Triggers.Agent.dll -console

При старте Агент будет пытаться запустить все экземпляры Движков (Engine), перечисленные в разделе "ModulesPaths" файла настроек appsettings.json, которая расположена в корне рабочей папки компонента Агент.

Описание настроек "Агента"

Настройки приложения осуществляются в файле appsettings.json. Так как приложение можно запустить в различных конфигурациях, то в проекте несколько файлов типа: appsettings.ConfigurationName.json. При получении архива для распространения с исполняемыми файлами используется файл с настройками appsettings.json.

Раздел Logging

Данный раздел настраивается в соответствии с правилами ведения журнала в .NET Core.

Подраздел File

Основной раздел

ModulesPaths – массив относительных или абсолютных путей, по которым размещаются ра-бочие папки управляемых Engine модулей. Данный раздел в файле appsettings.json мониторится агентом динамически, поэтому пути до управляемых Engine могут быть прописаны как до старта, так и после старта агента.

При добавлении очередного пути, агент пытается определить есть ли Engine по этому пути. Если есть, то определяет стартовал ли Engine, если нет, то стартует его.

При удалении пути агент посылает соответствующему Engine модулю команду shutdown.

Запрос состояния "Агента"

Для получения информации по текущему состоянию агента, необходимо в папку агента положить файл “status” без расширения. Содержимое файла не читается. После того как агент обнаружит файл, он сформирует информацию о текущем состоянии движков и создаст или обновит файл output.txt. Информация о статусе так же будет записана в лог. Файл “status” будет автоматически удалён.

Перечень использованных сторонних компонентов

Компонент "Сайт" (веб-приложение Панели управления)

Компоненты "Движок" (Engine) и "Агент"