Creatio development guide
PDF
Документация по разработке
Описание платформы

Сервис бандлирования статического контента

Glossary Item Box

Общие сведения

Для повышения производительности весь клиентский контент (исходный код клиентских схем, css-стили) генерируется в специальном каталоге приложения bpm'online. Преимущества такого подхода приведены в статье "Статический клиентский контент в файловой системе". Однако, из-за большого количества файлов браузеру необходимо выполнять большое количество запросов к приложению при его первоначальной загрузке. Чтобы избежать этого, обычно выполняется объединение всех однотипных файлов в один bundle-файл — бандлирование.

Для объединения однотипных файлов статического контента bpm'online разработан сервис бандлирования статического контента.

Структура и принцип работы

Приложение-наблюдатель (ContentWatcher) мониторит файлы в каталоге со статическим контентом и сообщает об изменениях в них веб-сервису. Веб-сервис (ContentService) выполняет перегенерацию bundle-файлов приложения при поступлении определенных запросов (например, от ContentWatcher или вручную). После бандлирования веб-сервис изменяет определенный конфигурационный файл bpm'online таким образом, чтобы он содержал информацию о необходимости использовать bundle-файлы вместо оригинального статического контента.

Общая схема работы сервиса приведена на рис. 1.

Рис. 1. — Принципиальная схема сервиса бандлирования статического контента

К СВЕДЕНИЮ

Веб-сервис может быть установлен без приложения-наблюдателя (ContentWatcher). В таком случае запросы к ContentService на бандлирование или минификацию необходимо выполнять вручную.

К СВЕДЕНИЮ

Компоненты сервиса могут быть установлены на том же компьютере, что и bpm'online, или на отдельном компьютере. Если они установлены отдельно, то у них должен быть сетевой доступ к файлам статического контента bpm'online.

ContentService

Является .NET Core 2.1 веб-сервисом и имеет следующие операции (точки доступа):

  • / — проверка работоспособности сервиса (метод GET).
  • /process-content — генерирует минифицированные bundle-файлы (метод POST).
  • /clear-bundles — очищает bundle-файлы (метод POST).
  • /minify-content — минифицирует контент (метод POST).

ВАЖНО

Каждая операция, (кроме /) не только выполняет действия над файлами, но и изменяет конфигурационный файл _ContentBootstrap.js.

Параметры операций:

  • ContentPath — путь к статическому контенту приложения. Обязательный параметр.
  • OutputPath — локальный или сетевой путь для ContentService, куда будут сохранятся бандлированные и/или минифицированные файлы. По умолчанию ContentPath + "/bundles".
  • SchemasBundlesRequireUrl — путь, который будет использоваться в конфигурационном файле RequireJs для бандлированных и/или минифицированных файлов. При изменении OutputPath со значения по умолчанию на любое другое этот параметр нужно тоже указывать. По умолчанию считается, что OutputPath = ContentPath + "/bundles".
  • BundleMinLength — пороговое значение длины одного бандла. Длина, при которой создается новый бандл. По умолчанию 204800Б (200КБ).
  • MinifyJs — применять ли минификацию к JavaScript файлам (true/false). По умолчанию true.
  • MinifyCss — применять ли минификацию к CSS файлам (true/false). По умолчанию true.
  • MinifyConfigs — применять ли минификацию к конфигурационным файлам RequireJs (true/false). По умолчанию true.
  • ApplyBundlesForSchemas — применять ли бандлирование к схемам (true/false). По умолчанию true.
  • ApplyBundlesForSchemasCss — применять ли бандлирование к CSS схем (true/false). По умолчанию false..
  • ApplyBundlesForAloneCss — применять ли бандлирование к отдельным CSS файлам, у которых нет связанного JavaScript-модуля (true/false). По умолчанию false.
  • ApplyBundlesForResources — применять ли бандлирование к ресурсам схем (true/false). По умолчанию true.

ContentWatcher

Является .NET Core 2.1 приложением. Запускается как служба (также может запускаться через .NET Core CLI Tools). Основная задача — наблюдать за изменением указанного в параметре fileFilter файла, который находится по пути, указанном в параметре directory. По умолчанию это файл _MetaInfo.json. Изменение файла сообщает об обновлении статического контента. При обнаружении изменений ContentWatcher оповещает ContentService о необходимости перегенерировать bundle-файлы.

Параметры запуска (указываются в appsettings.json):

  • ContentServiceUrl — ссылка на приложение ContentService.
  • CloudServiceId — идентификатор сервиса для считывания настроек из базы данных AzManager. Необязательный параметр. Необходим для считывания настроек облачной инфраструктуры bpm'online.
  • DefaultFileFilter — имя по умолчанию отслеживаемого файла.
  • AzManagerConnectionString — строка подключения к базе данных AzManager. Необязательный параметр. Необходим для считывания настроек облачной инфраструктуры bpm'online.
  • ConfigurationRefreshInterval — период обновления конфигурации сервиса.
  • ContentWorkers — массив конфигурационных объектов всех приложений, за которыми будет следить ContentWatcher. Свойства конфигурационных объектов:
    • name — имя для отслеживаемого сайта, которое будет отображено в логах работы службы.
    • directory — путь к отслеживаемому файлу для настраиваемого сайта.
    • fileFilter — имя отслеживаемого файла.
    • ContentWorkerArguments — массив дополнительных параметров, которые будут передаваться в ContentService. Элементы массива — объекты ключ-значение. Свойства объектов:
      • key — ключ. По умолчанию "contentPath".
      • value — путь к каталогу с файлами статического контента настраиваемого сайта.

Пример конфигурационного файла appsettings.json:

{
    "ContentServiceUrl": "http://localhost:9563/process-content",
    "ConfigurationRefreshInterval": "60000",
    "DefaultFileFilter": "_MetaInfo.json",
    "CloudServiceId": "151",
    "AzManagerConnectionString": "Data Source=azserver\\mssql2016;Initial Catalog=azmanager;Integrated Security=SSPI;",
    "ContentWorkers": [
        {
            "name": "My bpm'online",
            "directory": "C:/bpmonline7.12.4/Terrasoft.WebApp/conf",
            "fileFilter": "_MetaInfo.json",
            "ContentWorkerArguments": [
                {
                    "key": "contentPath",
                    "value": "C:/bpmonline7.12.4/Terrasoft.WebApp/conf/content"
                }
            ]
        }
    ]
}

Метрики InfluxDb

ContentWatcher и ContentService при необходимости могут записывать метрики успешных и неуспешных операций в InfluxDb. Для этого в соответствующем файле appsettings.json следует указать строку InfluxDbConnectionString с параметрами подключения:

  • url — адрес сервера InfluxDb, обязательный параметр.
  • db — имя базы данных, куда будут записываться метрики. Необязательный параметр, значение по умолчанию: content.
  • user — имя пользователя для соединения с сервером. Необязательный параметр, значение по умолчанию: <пустая строка>.
  • password — пароль для соединения с сервером. Необязательный параметр, значение по умолчанию: <пустая строка>.
  • version — версия сервера InfluxDb. Возможные значения: Latest, v_1_3, v_1_0_0, v_0_9_6, v_0_9_5, v_0_9_2, v_0_8_x. Необязательный параметр, значение по умолчанию: Latest.

Пример:

"InfluxDbConnectionString": "url=http://1.2.3.4:5678; db=content; user=User1; password=QwErTy; version=v_1_3"

Метрики, записываемые ContentWatcher:

  • watcher_notifying_duration — длительность оповещения ContentService.
  • watcher_error — ошибки при загрузке настроек, мониторинге, оповещении ContentService.

Метрики, записываемые ContentService:

  • service_processing_duration — длительность обработки контента.
  • service_error — ошибки при генерации бандлов, удалении временных папок, очистке бандлов.

Инструкция по разворачиванию в Docker

Системные требования

  • сервер под управлением Linux OS (рекомендуются стабильные версии Ubuntu или Debian), с установленной и настроенной стабильной версией docker. С этого сервера должны быть разрешены запросы к хранилищу образов https://hub.docker.com/.
  • на сервере должны быть установлены Docker и Docker Compose (см. документацию Docker).

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

  • ets/content-watcher/appsettings.json — конфигурационный файл ContentWatcher.
  • docker-compose.yml — конфигурационный файл утилиты docker-compose.
  • .env — файл с переменными окружения для запуска компонентов.

Установка сервисов

1. В произвольный каталог (например, /opt/services) скачайте файлы конфигурации сервисов и разархивируйте их. Архив доступен по ссылке.

2. В ./docker-compose/.env укажите необходимые параметры:

  • ContentServicePort — порт, на котором будет работать ContentService.
  • ContentPath — каталог с сайтами/контентом сайтов, который будет смонтирован в контейнер.

3. В ./docker-compose/etc/content-watcher/appsettings.json настройте список сайтов для отслеживание ContentWatcher (см. выше).

4. Из каталога, в котором находятся конфигурационные файлы (например, /opt/services) выполните команду:

sudo docker-compose pull

Результатом выполнения команды будет загрузка из hub.docker.com необходимых docker-образов сервисов.

ВАЖНО

Если на сервере запрещен доступ в интернет, скачайте на машине с открытым доступом все необходимые образы вручную (см.конфигурационный файл docker-compose.yml). Затем воспользуйтесь командами sudo docker export и sudo docker import для переноса образов в виде файлов на целевую машину.

5. Из каталога, в котором находятся конфигурационные файлы (например, /opt/services) выполните команду:

sudo docker-compose up -d

Результатом выполнения команды будет запуск сервисов.

6. Проверьте установку, отправив GET-запрос по адресу: {IP-адрес сервера}: {ContentServicePort}, где:

  • IP-адрес сервера — IP-адрес сервера, на котором установлены сервисы.
  • ContentServicePort — порт, на котором работает ContentService. Должен совпадать с портом, указанном в файле ./docker-compose/.env (см. п. 2).

Пример:

10.17.17.7:9999

Ожидаемый ответ:

"Service is running"

© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?