Установка и подключение
Установка и подключение модуля симуляций
На этой странице — развёртывание контейнера storm-des и его подключение к основному приложению. Предполагается, что базовая установка StormBPMN уже выполнена по разделу «Установка».
Порядок действий:
- Получить образ
storm-des; - Запустить контейнер рядом с основным приложением (общая база данных, общая docker-сеть);
- Указать основному приложению адрес сервиса (
DES_BASE_URL) и перезапустить его; - Проверить работоспособность.
Лицензия
Модуль симуляций лицензируется отдельно — убедитесь, что он включён в вашу лицензию (см. обзор модуля). Доступ к образу выдаётся вместе с модулем.
Шаг 1. Получение образа
Образ storm-des находится в том же приватном реестре, что и основной образ StormBPMN, и доступен по тем же учётным данным:
docker pull cr.selcloud.ru/stormbpmn-enterprise/storm-des:<версия>
Версии должны совпадать
Используйте storm-des той же версии, что и основной образ StormBPMN — они собираются из одной кодовой базы, и совместимость гарантируется только для одинаковых версий. Актуальная версия указана в разделе Changelog.
Перенос образа в корпоративный реестр и проверка подписи Cosign выполняются теми же шагами, что и для основного образа — см. «Ручная установка» и Changelog → «Проверка подписи образа».
Шаг 2. Запуск контейнера
Пример docker-compose.yml (или добавьте сервис в существующий compose-файл основного приложения — тогда контейнеры автоматически окажутся в одной docker-сети):
services:
storm-des:
image: cr.selcloud.ru/stormbpmn-enterprise/storm-des:<версия>
container_name: storm-des
restart: unless-stopped
environment:
# Та же база PostgreSQL, что у основного приложения
- SPRING_DATASOURCE_URL=jdbc:postgresql://<хост-БД>:5432/<база>
- SPRING_DATASOURCE_USERNAME=<пользователь>
- SPRING_DATASOURCE_PASSWORD=<пароль>
# ОБЯЗАТЕЛЬНО: тот же часовой пояс, что у контейнера основного приложения
- TZ=Europe/Moscow
# Память JVM — под рекомендуемую конфигурацию (16 GB на контейнер)
- JAVA_OPTS=-Xms4g -Xmx12g -XX:+UseG1GC -XX:+ExitOnOutOfMemoryError
deploy:
resources:
limits:
memory: 14G
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8081/actuator/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Часовой пояс: TZ обязан совпадать с основным приложением
Отметки времени запуска и завершения симуляций пишутся в базу в часовом поясе JVM. Если TZ контейнера storm-des не совпадает с TZ основного приложения, защитный механизм приложения считает идущие симуляции «зависшими» и принудительно завершает их с ошибкой. Симптом — симуляции падают с сообщением «DES-нода не ответила», хотя сервис жив.
Порт наружу не публиковать
Порт 8081 нужен только основному приложению. Если оба контейнера в одной docker-сети, секция ports не нужна вовсе — приложение обратится по имени сервиса (http://storm-des:8081). Если контейнеры на разных хостах — откройте порт только для хоста приложения средствами файрвола.
Переменные окружения storm-des
| Переменная | По умолчанию | Описание |
|---|---|---|
SPRING_DATASOURCE_URL | — | JDBC-адрес базы приложения. Обязательно |
SPRING_DATASOURCE_USERNAME | — | Пользователь БД. Обязательно |
SPRING_DATASOURCE_PASSWORD | — | Пароль БД. Обязательно |
TZ | — | Часовой пояс. Обязательно, должен совпадать с основным приложением |
JAVA_OPTS | автоматически по памяти контейнера | Параметры JVM; для предсказуемости рекомендуем задать -Xmx явно |
SIMULATION_MAX_CONCURRENT | 2 | Сколько симуляций считается параллельно; остальные ждут в очереди |
SIMULATION_TIMEOUT_MINUTES | 10 | Жёсткий лимит одного прогона — дольше этого симуляция принудительно останавливается |
DES_NODE_ID | имя хоста контейнера | Имя ноды в отчётах и метриках; менять нужно только при нескольких нодах на одном хосте |
HIKARI_MAX_POOL_SIZE | 5 | Размер пула соединений с БД |
SIMULATION_DEBUG_ENABLED | false | Сохранять файлы отладки прогонов (см. Эксплуатация) |
Шаг 3. Подключение основного приложения
Добавьте контейнеру основного приложения переменные окружения и перезапустите его:
| Переменная | По умолчанию | Описание |
|---|---|---|
DES_BASE_URL | http://localhost:8081 | Адрес сервиса симуляций, например http://storm-des:8081. По нему приложение проверяет конфигурации симуляций и строит предпросмотры |
SIMULATION_JANITOR_STALE_QUEUED_MINUTES | 30 | Через сколько минут ожидания в очереди симуляция помечается ошибкой (защита от неработающего storm-des) |
SIMULATION_JANITOR_STUCK_RUNNING_MINUTES | 20 | Через сколько минут без ответа от ноды идущая симуляция помечается ошибкой |
Сам прогон симуляции через DES_BASE_URL не ходит — он передаётся через очередь в базе данных. Поэтому кратковременная недоступность storm-des не роняет запущенные из очереди задачи: они дождутся, пока сервис вернётся (в пределах лимита SIMULATION_JANITOR_STALE_QUEUED_MINUTES).
Шаг 4. Проверка работоспособности
Здоровье сервиса — с хоста, где работает
storm-des:curl -s http://localhost:8081/actuator/health # {"status":"UP"}Связность с приложением — из контейнера основного приложения должен отвечать адрес из
DES_BASE_URL:docker exec <контейнер-приложения> wget -qO- http://storm-des:8081/actuator/healthСквозная проверка — в приложении откройте раздел «Симуляции», создайте симуляцию на любой диаграмме и запустите её. Прогон должен перейти из «В очереди» в «Выполняется» и завершиться отчётом.
Если на каком-то шаге не получилось — см. «Типовые проблемы».
Масштабирование
Несколько контейнеров storm-des (на одном или разных хостах) разбирают общую очередь параллельно — задача достаётся ровно одной ноде. Чтобы увеличить пропускную способность:
- поднимите дополнительные контейнеры с теми же настройками БД (при нескольких нодах на одном хосте задайте каждой свой
DES_NODE_ID); - либо увеличьте
SIMULATION_MAX_CONCURRENTи память одной ноды.
Балансировщик не нужен: очередь в базе сама распределяет задачи. DES_BASE_URL при этом указывает на любую живую ноду (или на балансировщик, если хотите отказоустойчивости и для синхронных операций).