Содержание

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

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

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

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

Пример для ОС Ubuntu 22+ (репозитории-источники указанных пакетов должны быть настроены в ОС, необходимые зависимости будут установлены автоматически)

sudo apt update && \
 sudo apt install -y postgresql aspnetcore-runtime-6.0 nginx

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

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

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

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

Настройка MS SQL

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

Настройка PostgreSQL

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

При настройке базы данных нужно создать пустую БД и пользователя:
su - postgres
psql
CREATE USER user_tr WITH PASSWORD 'P@ssw0rd';
CREATE DATABASE db_tr;
GRANT ALL PRIVILEGES ON DATABASE db_tr TO user_tr;

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

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

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

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

Для других ОС и веб-серверов настройки выполняются по аналогии.
sudo service nginx start
  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;
    }
  }
sudo nginx -t
sudo ln -s /etc/nginx/sites-available/advanta_triggers /etc/nginx/sites-enabled/advanta_triggers
sudo nginx -s reload


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

dotnet Advanta.Triggers.WebClient.dll


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

Настройки компонента приложения Сайт осуществляются в файле 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:

RootPath – абсолютный путь по которому будет размещаться папка с логами. По умолчанию - полный путь до рабочей папки с компонентом приложения

BasePath – относительный от RootPath путь к папке, в которой будут создаваться файлы с логами. По умолчанию - "Logs". Конечный путь до папки с файлами логов будет сформирован объединением путей: [RootPath]/[BasePath]

LogLevel – набор фильтров сообщений поступающих в лог. Формируется по правилам стандартного логирования в Asp.Net Core. По умолчанию - "Default": "Information". Для полного отключения логов работы компонента, необходимо внутри данной секции указать параметр "Default": "None".

Раздел Advanta

    "RuntimeUser": {
	//  "Token": "your_token",
	// или
      "Login": "your_login",
      "Password": "your_password"
    },
    "Host": "https://your_instance_domain.ru/",
    "ApiRequestTimeout": 300, //секунд
    "ObjectsSyncTimeout": 60, //минут

RuntimeUser – логин и пароль (или токен с версии системы ADVANTA 3.27) пользователя, от чьего имени будут вестись запросы в API системы ADVANTA при исполнении триггеров (указываются либо параметры Login и Password, либо параметр Token). Под этим пользователем через API также осуществляется запрос на извлечение данных о типах объектов.

HostURL-адрес сервера для осуществления запросов в API системы ADVANTA.

ApiRequestTimeout – период ожидания ответа от SOAP API системы ADVANTA. Задаётся в секундах. Параметр необязательный. Если параметр не задан или его значение равно 0, то будет использовано значение по умолчанию равное 3600 (т.е. 3600 секунд, что равно одному часу).

ObjectsSyncTimeout – период синхронизации типов объектов с системой ADVANTA. Задаётся в минутах. Параметр необязательный. Значение по умолчанию 15 (т.е. 1 раз в 15 минут)

Подраздел 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"
      }
    },

Emails – список почтовых адресов, на которые необходимо рассылать уведомления о перезапуске или сбое в работе триггеров. Список необходимо указать через любой из разделителей: запятая, точка с запятой, пробел.

SmtpServer - содержит настройки smtp сервера для отправки email уведомлений:


Подраздел 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_triggers_input_queue_subscriptions", // "Bus_TriggersInputQueue_Subscriptions" - для транспорта "MSSQL"
      "PostgreSqlMessagesTableName": "bus_triggers_messages" //используется только для транспорта "PostgreSql"
    }

Transport – тип транспорта для Rebus-шины сообщений. Возможные варианты: "MSSQL" и "PostgreSql". Если параметр не указан или пустой, то по умолчанию используется значение "MSSQL".
Возможен также вариант "Emulator", который используется для запуска приложения без привязки к Rebus.

ConnectionString – строка подключения к базе данных ADVANTA, через которую публикуются сообщения шины Rebus.

InputQueueName – название очереди сообщений (канала), через которую будут поступать сообщения для данного instans-а. Для транспорта "MSSQL" по умолчанию будет "Bus_TriggersInputQueue", для "PostgreSql" по умолчанию будет "bus_triggers_queue".

SubscriptionsTableName – название таблицы БД, в которую будет размещена информация о подписках. Для "MSSQL" по умолчанию будет "Bus_TriggersInputQueue_Subscriptions", для "PostgreSql" по умолчанию будет "bus_triggers_input_queue_subscriptions" (должно совпадать с настройками публикующего сервиса).

PostgreSqlMessagesTableName – название таблицы БД, через которую будет вестись обмен сообщениями в случае "PostgreSql" транспорта. По умолчанию будет использоваться "bus_triggers_messages" (должно совпадать с настройками публикующего сервиса). Для "MSSQL" этот параметр игнорируется, так как для "MSSQL" Rebus автоматически использует (и при необходимости создаёт) таблицу с именем, совпадающим с названием входящей очереди сообщений (InputQueueName).

Раздел 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"
  },

Provider – определяет тип СУБД, используемой для модуля триггеры. Возможные варианты: "MSSQL" и "PostgreSql". Если параметр не указан или пустой, то по умолчанию используется значение "MSSQL". Возможен так же вариант "Memory". В этом варианте СУБД использоваться не будет, а все данные модуля будут храниться в памяти до завершения работы приложения. Данный режим удобно использовать в процессе разработки и тестирования.

ConnectionString – строка подключения к базе данных, в которой размещается информация о настроенных триггерах и их работе.

MigrateOnStartup – признак автоматической миграции структуры базы данных при запуске приложения. Принимаемые значения "true" или "false". Параметр необязательный. Значение по умолчанию "false".
Флаг "true" может потребоваться, только если есть возможность обновления и развёртывания схемы данных через миграции (например, во время разработки или создания локальной базы).
Если значение флага установлено в “true”, пользователю базы данных потребуются права на создание, изменение, удаление таблиц и индексов.

Раздел Module

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

InstanceName – наименование запускаемого инстанса модуля Триггеры. Данное наименование добавляется к логам и в тему email-уведомлений.  

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

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

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

dotnet Advanta.Triggers.Engine.dll

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

Раздел 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
        }
      ]
    }
  }

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

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

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

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

dotnet Advanta.Triggers.Agent.dll
dotnet Advanta.Triggers.Agent.dll -console

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

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

Раздел Logging

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

Подраздел File

RootPath – абсолютный путь по которому будет размещаться папка с логами. По умолча-нию полный путь до папки с приложением.

BasePath – относительный путь до папки, в которой будут создаваться файлы с логами. По умолчанию Logs. Конечный путь до папки с файлами логов будет сформирован объедине-нием путей: [RootPath]\[BasePath]

LogLevel – набор фильтров сообщений поступающих в лог. Формируется по правилам стан-дартного логирования в Asp.Net Core. Для полного отключения логов, необходимо внутри данной секции указать параметр “Default”: “None”.

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

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

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

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



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

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

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