1 - Камунда.РФ 7 в Spring Boot приложении

Введение

В данной инструкции описан процесс создания нового пустого Spring Boot приложения, которое при запуске автоматически поднимает Камунда.РФ 7 (Spring Boot) с использованием embedded базы данных H2.

Камунда.РФ 7 подключается как зависимость, опубликованная в корпоративном Nexus-репозитории.

Инструкция ориентирована на локальный запуск разработчиком.

Предварительные требования

  • Java 17+

  • Maven 3.8+

  • Доступ к корпоративному Nexus:

    • Maven-репозиторию

Создание Spring Boot проекта

Создайте новый Spring Boot проект любым удобным способом (Spring Initializr, IDEA, вручную).

Минимальные параметры:

  • Project: Maven

  • Language: Java

  • Spring Boot: 3.x

  • Packaging: jar

Настройка доступа к Nexus (Maven)

Для загрузки зависимостей Камунда.РФ 7 из Nexus необходимо настроить аутентификацию Maven.

Откройте файл ~/.m2/settings.xml и добавьте:

<settings>
  <servers>
    <server>
      <id>kamundarf-nexus</id>
      <username>YOUR_USERNAME</username>
      <password>YOUR_PASSWORD</password>
    </server>
  </servers>
</settings>

Далее подключите репозиторий в pom.xml:

<repositories>
  <repository>
    <id>kamundarf-nexus</id>
     <url>https://nexus.boos.solutions/repository/kamundarf-mvn/</url>
  </repository>
</repositories>

Подключение Камунда.РФ 7

Добавьте зависимости Камунда.РФ 7 в pom.xml.

<dependencies>

    <!-- Содержит  ядро BPMN, ProcessEngine, сервисы (RuntimeService, TaskService и др.) -->
    <dependency>
        <groupId>rf.kamunda.bpm.springboot</groupId>
        <artifactId>camunda-bpm-spring-boot-starter</artifactId>
        <version>${kamundarf.version}</version>
    </dependency>

    <!-- REST API: RESTful эндпоинты для взаимодействия с движком через HTTP -->
    <dependency>
        <groupId>rf.kamunda.bpm.springboot</groupId>
        <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
        <version>${kamundarf.version}</version>
    </dependency>

    <!-- Веб-интерфейсы - Cockpit (мониторинг), Tasklist (задачи), Admin (управление) -->
    <dependency>
        <groupId>rf.kamunda.bpm.springboot</groupId>
        <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
        <version>${kamundarf.version}</version>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

</dependencies>

После этого нужно сконфигурировать Камунда.РФ 7 в файле application.yml и Камунда.РФ 7 будет автоматически сконфигурирована и поднята при старте приложения.

Минимальная конфигурация application.yml

Камунда.РФ 7 будет использовать embedded/in-memory H2 базу данных. Это удобно для локальной разработки и тестирования.

server:
  port: 8080
spring:
  datasource:
    url: jdbc:h2:mem:process-engine;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    driver-class-name: org.h2.Driver
    username: sa
    password: sa
  h2:
    console:
      enabled: true
      path: /h2-console
camunda:
  bpm:
    history-level: full
    admin-user:
      id: demo
      password: demo
      firstName: Demo
    filter:
      create: All tasks
    database:
      schema-update: true

Запуск приложения

Локальный запуск:

mvn spring-boot:run

Или:

mvn clean package
java -jar target/camunda-demo.jar

В логах должно появиться сообщение об успешном запуске Process Engine.

После запуска:

  • Веб-интерфейс приложения будет доступен по адресу: http://localhost:8080/camunda

  • Логин: demo

  • Пароль: demo

Использование других баз данных

Камунда.РФ 7 поддерживает различные СУБД:

  • PostgreSQL

  • H2

  • MySQL / MariaDB

  • Oracle

  • MSSQL

  • DB2

Для смены базы данных необходимо:

  1. Подключить JDBC-драйвер в pom.xml

  2. Изменить spring.datasource.*

  3. Указать тип БД

Пример для PostgreSQL:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/camunda
    username: camunda
    password: camunda
    driver-class-name: org.postgresql.Driver

camunda:
  bpm:
    database:
      type: postgres
      schema-update: true

Основные свойства Камунда.РФ 7 в application.yml

Ниже перечислены основные параметры конфигурации Камунда.РФ 7, которые чаще всего используются в Spring Boot приложениях.

Базовый префикс

Все свойства Камунда.РФ 7 настраиваются через префикс:

camunda:
  bpm:

Настройки базы данных

camunda:
  bpm:
    database:
      type: h2                # Тип БД: h2 | postgres | mysql | oracle | mssql
      schema-update: true     # true | false | create | drop-create
Свойство Описание

database.type

Тип используемой базы данных

database.schema-update

Управление схемой БД (true — автообновление)

Администратор Камунда.РФ 7

Создание технического пользователя при старте приложения.

camunda:
  bpm:
    admin-user:
      id: admin
      password: admin
      first-name: Admin
      last-name: User
      email: admin@example.com
Свойство Описание

admin-user.id

Логин администратора

admin-user.password

Пароль администратора

admin-user.first-name

Имя

admin-user.last-name

Фамилия

admin-user.email

Email (необязательно)

Web-приложение Камунда.РФ 7

camunda:
  bpm:
    webapp:
      application-path: /camunda
Свойство Описание

webapp.application-path

Контекст Камунда.РФ 7 Web App

История и аудит

camunda:
  bpm:
    history-level: full       # none | activity | audit | full
Свойство Описание

history-level

Уровень сохранения исторических данных

Job Executor (фоновые джобы)

camunda:
  bpm:
    job-execution:
      enabled: true
      core-pool-size: 3
      max-pool-size: 10
Свойство Описание

job-execution.enabled

Включение Job Executor

job-execution.core-pool-size

Базовое количество потоков

job-execution.max-pool-size

Максимальное количество потоков

Авторизация и безопасность

camunda:
  bpm:
    authorization:
      enabled: true
Свойство Описание

authorization.enabled

Включение авторизации Камунда.РФ 7

Метрики

camunda:
  bpm:
    metrics:
      enabled: true
      db-reporter-activate: true
Свойство Описание

metrics.enabled

Сбор метрик движка

db-reporter-activate

Сбор метрик в БД

Полный минимальный пример

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.8</version>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>camunda-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>camunda-demo</name>
    <description>camunda-demo</description>

    <properties>
        <java.version>21</java.version>
        <kamundarf.version>1.0.0-SNAPSHOT</kamundarf.version>
    </properties>

    <repositories>
      <repository>
        <id>company-nexus</id>
         <url>https://nexus.boos.solutions/repository/kamundarf-mvn/</url>
      </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>rf.kamunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
            <version>${kamundarf.version}</version>
        </dependency>
        <dependency>
            <groupId>rf.kamunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
            <version>${kamundarf.version}</version>
        </dependency>
        <dependency>
            <groupId>rf.kamunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter</artifactId>
            <version>${kamundarf.version}</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml

camunda:
  bpm:
    database:
      type: h2
      schema-update: true
    admin-user:
      id: admin
      password: admin
    history-level: full
    webapp:
      application-path: /camunda

Архив с примером приложения Скачать ZIP

Итог

В результате получаем:

  • Пустой Spring Boot проект

  • Камунда.РФ 7, поднимающуюся автоматически при старте

  • Embedded H2 для локальной разработки

  • Возможность легко переключиться на любую поддерживаемую БД

2 - Развёртывание Камунда.РФ 7 в Kubernetes с Helm

Требования к внешним сервисам и инфраструктуре

В этом разделе перечислено всё, что должно быть предварительно настроено в вашем окружении перед началом установки Камунда.РФ 7.

Инфраструктура

  • Доступы, адреса, учетные записи (предоставляются после приобретения Камунда.РФ)

    • Docker Registry, в котором лежит образ Камунда.РФ 7

    • Helm Registry, где лежит helm chart для Камунда.РФ 7

  • Kubernetes 1.23+

  • Helm 3.x

  • Доступ к кластеру Kubernetes (или кластер minikube)

  • Postgresql 15+

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

Для выполнения инструкций по установке должны быть установлены следующие утилиты:

Note
Если у вас возникли сложности с установкой idn под вашу операционную систему, замените $(idn камнуда.рф) на xn–80aalwlg5b.xn–p1ai во всех командах

Компоненты

В этом разделе описываются основные компоненты приложения, которые будут развернуты в Kubernetes.

Компонент

Тип

Камунда.РФ 7

Deployment

Репозиторий и подготовка

На этом этапе подготовим окружение Kubernetes для установки Камунда.РФ 7: добавим репозиторий, настроим базу данных и создадим необходимые секреты.

Переменные окружения

Подготовьте переменные среды окружения:

export REPO_NAME="kamundarf"
export HELM_REGISTRY="oci://$(idn камунда.рф)"
export REGISTRY_USERNAME="ваш-логин"
export REGISTRY_PASSWORD="ваш-пароль"

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

kubectl config set-context --current --namespace=kamundarf7 (1)
  1. Если пространство не создано в кластере, создайте его командой:

    kubectl create namespace kamundarf7

Авторизация в Helm-registry

В этом разделе проверяем подключение к реестру с Helm-чартами.

helm registry login $HELM_REGISTRY --username $REGISTRY_USERNAME --password $REGISTRY_PASSWORD

Параметры команды:

  • $REPO_NAME - название репозитория в вашей системе

  • $HELM_REGISTRY — адрес реестра с Helm-чартом Камунда.РФ 7

  • $REGISTRY_USERNAME — имя пользователя для авторизации в реестре Helm-чартов

  • $REGISTRY_PASSWORD — пароль или токен для авторизации в реестре Helm-чартов

Настройка базы данных ( postgresql )

Если у вас нет развернутой БД в кластере Кубернетес, вы можете быстро развернуть ее, используя следующую команду:

export DB_USER=kamundarf7
helm install db oci://registry-1.docker.io/bitnamicharts/postgresql --set auth.database=$DB_USER --set auth.username=$DB_USER
export DB_PASSWORD=$(kubectl get secret db-postgresql -o jsonpath="{.data.password}" | base64 -d)

Если у вас уже есть БД, то подключитесь к ней и создайте отдельного пользователя и базу данных для Камунда.РФ 7.

Создайте секрет для подключения к БД

kubectl create secret generic database-secret \
  --from-literal=user=$DB_USER \
  --from-literal=password=$DB_PASSWORD

Где

  • $DB_USER - имя пользователя для подключения к базе данных

  • $DB_PASSWORD - пароль от пользователя для подключения к базе данных

Создание секрета доступа к Docker Registry Камунда.РФ

Чтобы Kubernetes мог скачать образ Камунда.РФ 7 из приватного реестра (docker registry), необходимо создать секрет с данными для аутентификации.

kubectl create secret docker-registry krf-registry-secret \
  --docker-server=$(idn камунда.рф) \
  --docker-username=$REGISTRY_USERNAME \
  --docker-password=$REGISTRY_PASSWORD \
  --docker-email=devops@yourdomain.com

Где

  • $REGISTRY_USERNAME - имя пользователя для доступа к реестру Камунда.РФ

  • $REGISTRY_PASSWORD - пароль от пользователя для доступа к реестру Камунда.РФ

Подготовка values.yaml

Создайте файл kamundarf7.yaml с описанием параметров установки Камунда.РФ 7.

replicaCount: 1

image:
  tag: 1.0.0-SNAPSHOT # Версия, которую необходимо установить

imagePullSecrets:
  - name: krf-registry-secret

db:
  secretName: "database-secret"
env:
  DB_DRIVER: org.postgresql.Driver
  DB_URL: jdbc:postgresql://db-postgresql:5432/kamundarf7 # Если у Вас была развернута БД или параметры подключения отличаются, измените их тут
  JAVA_OPTS: "-XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0"

Установка чарта

Используем Helm для установки Камунда.РФ 7 в наш кластер Kubernetes, используя подготовленный файл values.yaml.

helm upgrade --install kamundarf7 oci://$HELM_REGISTRY/kamundarf/helmstore/kamundarf7  --values kamundarf7.yaml

Подключение модуля истории

Модуль истории позволяет сохранять историю процессов в Kafka-совместимый брокер сообщений. Существует два сценария подключения:

Сценарий 1: Встроенный брокер сообщений

В этом сценарии брокер сообщений разворачивается вместе с Камунда.РФ 7 в кластере Kubernetes.

Для включения встроенной Kafka внесите следующие изменения в файл kamundarf7.yaml созданный на предыдущем шаге:

replicaCount: 1

image:
  tag: 1.0.0-SNAPSHOT # Версия, которую необходимо установить

imagePullSecrets:
  - name: krf-registry-secret

db:
  secretName: "database-secret"
env:
  DB_DRIVER: org.postgresql.Driver
  DB_URL: jdbc:postgresql://db-postgresql:5432/kamundarf7 # Если у Вас была развернута БД или параметры подключения отличаются, измените их тут
  JAVA_OPTS: "-XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0"

kafka:
  enabled: true
  replicaCount: 1

plugins:
  history:
    enabled: true
    useEmbedded: true
    topic: process-events
    rawTopic: process-events-raw

После внесения изменений выполните команду:

helm upgrade --install kamundarf7 oci://$HELM_REGISTRY/kamundarf/helmstore/kamundarf7  --values kamundarf7.yaml

Сценарий 2: Внешнний брокер сообщений

В этом сценарии используется существующий брокер сообщений развернутый в кластере Kubernetes.

Для подключения внешнего брокера внесите следующие изменения в файл kamundarf7.yaml:

replicaCount: 1

image:
  tag: 1.0.0-SNAPSHOT # Версия, которую необходимо установить

imagePullSecrets:
  - name: krf-registry-secret

db:
  secretName: "database-secret"
env:
  DB_DRIVER: org.postgresql.Driver
  DB_URL: jdbc:postgresql://db-postgresql:5432/kamundarf7 # Если у Вас была развернута БД или параметры подключения отличаются, измените их тут
  JAVA_OPTS: "-XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0"

kafka:
  enabled: false

plugins:
  history:
    enabled: true
    useEmbedded: false
    bootStrapServers:
      - "external-kafka:9092"
    topic: process-events

После внесения изменений выполните команду:

helm upgrade --install kamundarf7 oci://$HELM_REGISTRY/kamundarf/helmstore/kamundarf7  --values kamundarf7.yaml

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

Доступ к приложению

После установки необходимо проверить, что приложение запустилось корректно, и настроить к нему доступ извне кластера.

После установки проверьте сервис:

kubectl get pods

Пример вывода (требуется, чтобы в ready было 1/1)

NAME                                      READY   STATUS    RESTARTS   AGE
kamundarf7-78546d488d-7fr6s              1/1     Running   0          7m48s

Камунда.РФ 7 будет доступна на порту 8080 внутри кластера. Для внешнего доступа можно включить ingress.

kamundarf7.yaml
ingress:
  enabled: true
  className: nginx
  hosts:
    - host: kamundarf-7.example.com
      paths:
        - path: /
          pathType: Prefix

Либо можно прокинуть порт

kubectl port-forward  svc/kamundarf7 8080:8080

После этой команды можно будет зайти на http://localhost:8080

Настройки Камунда.РФ 7

В этом разделе подробно описаны ключевые настройки, которые позволяют гибко настроить поведение Камунда.РФ 7. Настройки можно задавать как через переменные окружения, так и через файл values.yaml.

Переменная Назначение

CATALINA_HOME

Указывает путь к корневому каталогу Apache Tomcat внутри контейнера. В данном случае: server/apache-tomcat-10.1.42/.

DB_DRIVER

Класс JDBC-драйвера базы данных. Например: org.postgresql.Driver или com.mysql.cj.jdbc.Driver.

DB_URL

JDBC-URL подключения к БД. Пример: jdbc:postgresql://db-host:5432/kamundarf7.

DB_CONN_MAXACTIVE

Максимальное количество активных соединений в пуле. Оптимальное значение зависит от размера БД и нагрузки. По умолчанию — 20.

DB_CONN_MINIDLE

Минимальное количество "ленивых" соединений — те, что доступны но неактивны. Снижает overhead на создание новых соединений.

DB_CONN_MAXIDLE

Максимальное количество неиспользуемых соединений, которые могут оставаться в пуле. Балансирует скорость против потребления ресурсов.

DB_VALIDATE_ON_BORROW

Если true, соединение будет валидироваться при взятии из пула (например, через SELECT 1).

DB_VALIDATION_QUERY

Запрос для проверки активности соединения. Обычно SELECT 1 — универсальный для любой БД.

SKIP_DB_CONFIG

Если не пусто, пропускает конфигурацию БД во время старта.

WAIT_FOR

Список зависимостей (например, адреса БД, Kafka и т.д.), которые Камунда.РФ 7 должна дождаться перед стартом. Указывается через запятые.

WAIT_FOR_TIMEOUT

Максимальное время (в секундах) ожидания всех зависимостей из WAIT_FOR. После превышения таймера контейнер завершится с ошибкой.

TZ

Часовой пояс внутри контейнера. UTC — стандарт для продакшн, чтобы избежать рассинхронизации логов.

DEBUG

Включение отладочного режима. При true будут активированы расширенные логи.

JAVA_OPTS

Аргументы JVM. Например: -Xms512m -Xmx1024m -XX:+UseG1GC. Позволяет тонко настроить GC, heap, профилирование и безопасность.

Настройка через values.yaml

Кроме переменных окружения, настройки можно задавать через файл values.yaml. Ниже приведены основные параметры, которые можно настроить:

Параметр Назначение

replicaCount

Количество реплик приложения. По умолчанию: 1.

image.repository

Репозиторий образа Камунда.РФ 7. По умолчанию: камунда.рф/kamundarf/kamundarf-tomcat.

image.tag

Тег образа Камунда.РФ 7. По умолчанию: 1.0.0.

image.pullPolicy

Политика загрузки образа. По умолчанию: IfNotPresent.

serviceAccount.create

Создавать ли ServiceAccount. По умолчанию: false.

service.type

Тип сервиса. По умолчанию: ClusterIP.

service.port

Порт сервиса. По умолчанию: 8080.

ingress.enabled

Включить ли Ingress. По умолчанию: false.

db.secretName

Имя секрета с данными для подключения к БД. По умолчанию: database-secret.

db.driver

Драйвер БД. По умолчанию: org.postgresql.Driver.

db.url

URL подключения к БД. По умолчанию: jdbc:postgresql://{{ .Release.Name }}-postgresql:5432/kamundarf7.

plugins.history.enabled

Включен ли модуль истории. По умолчанию: false.

plugins.history.topic

Топик Kafka для модуля истории. По умолчанию: data.

postgresql.enabled

Включить ли встроенную PostgreSQL. По умолчанию: false.

kafka.enabled

Включить ли встроенную Kafka. По умолчанию: false.

Параметры плагина истории

Параметр Назначение

plugins.history.image

Образ плагина истории. По умолчанию: камунда.рф/kamundarf/other/ginger-ext-c7-history:1.0.2.

plugins.history.enabled

Включен ли модуль истории. По умолчанию: false.

plugins.history.mode

Режим работы плагина. По умолчанию: ALL.

plugins.history.source

Источник данных. По умолчанию: пусто.

plugins.history.sourceAddress

Адрес источника данных. По умолчанию: пусто.

plugins.history.bootStrapServers

Список серверов Kafka. По умолчанию: пустой список.

plugins.history.topic

Топик Kafka для модуля истории. По умолчанию: data.

plugins.history.rawTopic

Топик Kafka для сырых данных. По умолчанию: raw-data.

plugins.history.contentType

Тип контента. По умолчанию: JSON.

plugins.history.keySerializer

Сериализатор ключей. По умолчанию: org.apache.kafka.common.serialization.StringSerializer.

plugins.history.acks

Уровень подтверждения сообщений. По умолчанию: all.

plugins.history.retries

Количество попыток повторной отправки. По умолчанию: 3.

plugins.history.lingerMs

Время задержки перед отправкой сообщений. По умолчанию: 1.

plugins.history.libs

Путь к библиотекам. По умолчанию: /libs.

plugins.history.useEmbedded

Использовать ли встроенную Kafka. По умолчанию: false.