Docker 部署 Flowable 和 Camunda 工作流引擎的详细方案

在这里插入图片描述

1. Flowable Docker 部署

使用官方镜像部署

# 拉取 Flowable 官方镜像
docker pull flowable/flowable-rest:latest
x86架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/flowable-rest:latest
ARM架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_flowable-rest:latest

运行 Flowable REST 应用

docker run -d \
  --name flowable-rest \
  -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/flowable \
  -e SPRING_DATASOURCE_USERNAME=flowable \
  -e SPRING_DATASOURCE_PASSWORD=flowable \
  flowable/flowable-rest:latest

创建目录并下载驱动

mkdir -p /data/flowable/lib
cd /data/flowable/lib
wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar
docker run -d -p 3306:3306 --name mysql --privileged=true -e MYSQL_ROOT_PASSWORD="68WcxQhIcN206LrO" -e MYSQL_USER="appuser" -e MYSQL_PASSWORD="68WcxQhIcN206LrO" -v=/data/mysql/my.cnf:/etc/my.cnf -v=/data/mysql/data:/var/lib/mysql -v=/data/mysql/logs:/var/log -v=/etc/localtime:/etc/localtime registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_mysql:5.7.43

1. 创建自定义网络

docker network create flowable-network
2. 将 MySQL 加入网络

docker network connect flowable-network mysql
# 进入 MySQL
docker exec -it mysql mysql -u root -p

# 在 MySQL 中执行以下命令:
CREATE DATABASE flowable CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flowable'@'%' IDENTIFIED BY 'flowable';
GRANT ALL PRIVILEGES ON flowable.* TO 'flowable'@'%';
FLUSH PRIVILEGES;
EXIT;

docker run -d \
  --name flowable-rest \
  --network flowable-network \
  -p 8080:8080 \
  -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/app/lib/mysql-connector-java-8.0.33.jar \
  -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/app/WEB-INF/lib/mysql-connector-java-8.0.33.jar \
  -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/opt/bitnami/flowable/lib/mysql-connector-java-8.0.33.jar \
  -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/flowable \
  -e SPRING_DATASOURCE_USERNAME=flowable \
  -e SPRING_DATASOURCE_PASSWORD=flowable \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_flowable-rest:latest

拉取镜像

```bash
x86架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/flowable-ui
docker run -d \
  --name flowable-ui \
  --network flowable-network \
  -p 8081:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/flowable \
  -e SPRING_DATASOURCE_USERNAME=flowable \
  -e SPRING_DATASOURCE_PASSWORD=flowable \
 registry.cn-hangzhou.aliyuncs.com/qiluo-images/flowable-ui:latest

使用 Docker Compose 完整部署

# docker-compose-flowable.yml
version: '3.8'

services:
  flowable-mysql:
    image: mysql:8.0
    container_name: flowable-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: flowable
      MYSQL_USER: flowable
      MYSQL_PASSWORD: flowable
    ports:
      - "3306:3306"
    volumes:
      - flowable_mysql_data:/var/lib/mysql
    networks:
      - flowable-network

  flowable-rest:
    image: flowable/flowable-rest:latest
    container_name: flowable-rest
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://flowable-mysql:3306/flowable
      SPRING_DATASOURCE_USERNAME: flowable
      SPRING_DATASOURCE_PASSWORD: flowable
      SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver
    ports:
      - "8080:8080"
    depends_on:
      - flowable-mysql
    networks:
      - flowable-network

  flowable-ui:
    image: flowable/flowable-ui:latest
    container_name: flowable-ui
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://flowable-mysql:3306/flowable
      SPRING_DATASOURCE_USERNAME: flowable
      SPRING_DATASOURCE_PASSWORD: flowable
    ports:
      - "8081:8080"
    depends_on:
      - flowable-mysql
      - flowable-rest
    networks:
      - flowable-network

volumes:
  flowable_mysql_data:

networks:
  flowable-network:
    driver: bridge

启动命令:

docker-compose -f docker-compose-flowable.yml up -d
  1. Camunda Docker 部署
# 拉取 Camunda 官方镜像
docker pull camunda/camunda-bpm-platform:latest
x86架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/camunda-bpm-platform:latest
ARM架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_camunda-bpm-platform:latest
# 运行 Camunda 平台
docker run -d \
  --name camunda-platform \
  -p 8080:8080 \
  -e DB_DRIVER=org.h2.Driver \
  -e DB_URL=jdbc:h2:./camunda-h2-database \
  -e DB_USERNAME=sa \
  -e DB_PASSWORD=sa \
  camunda/camunda-bpm-platform:latest
docker run -d -p 3306:3306 --name mysql --privileged=true   -e MYSQL_ROOT_PASSWORD="68WcxQhIcN206LrO"   -v=/data/mysql/my.cnf:/etc/my.cnf   -v=/data/mysql/data:/var/lib/mysql   -v=/data/mysql/logs:/var/log   -v=/etc/localtime:/etc/localtime   registry.cn-hangzhou.aliyuncs.com/qiluo-images/mysql:8.4.5

flowable-ui:latest

docker run -d   --name flowable-ui   --network flowable-network   -p 8081:8080   -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/app/lib/mysql-connector-java-8.0.33.jar   -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/app/WEB-INF/lib/mysql-connector-java-8.0.33.jar   -v /data/flowable/lib/mysql-connector-j-8.0.33.jar:/opt/bitnami/flowable/lib/mysql-connector-java-8.0.33.jar   -e SPRING_DATASOURCE_URL="jdbc:mysql://mysql:3306/flowable_v1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"   -e SPRING_DATASOURCE_USERNAME="flowable_v1"   -e SPRING_DATASOURCE_PASSWORD="flowable_v1"   -e SPRING_DATASOURCE_DRIVER_CLASS_NAME="com.mysql.cj.jdbc.Driver"   registry.cn-hangzhou.aliyuncs.com/qiluo-images/flowable-ui:latest

使用 Docker Compose 完整部署(MySQL)

# docker-compose-camunda.yml
version: '3.8'

services:
  camunda-mysql:
    image: mysql:8.0
    container_name: camunda-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: camunda
      MYSQL_USER: camunda
      MYSQL_PASSWORD: camunda
    ports:
      - "3307:3306"
    volumes:
      - camunda_mysql_data:/var/lib/mysql
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    networks:
      - camunda-network

  camunda-platform:
    image: camunda/camunda-bpm-platform:latest
    container_name: camunda-platform
    environment:
      DB_DRIVER: com.mysql.cj.jdbc.Driver
      DB_URL: jdbc:mysql://camunda-mysql:3306/camunda?characterEncoding=UTF-8
      DB_USERNAME: camunda
      DB_PASSWORD: camunda
      WAIT_FOR: camunda-mysql:3306
    ports:
      - "8080:8080"
    depends_on:
      - camunda-mysql
    networks:
      - camunda-network

  camunda-optimize:
    image: camunda/optimize:latest
    container_name: camunda-optimize
    environment:
      CAMUNDA_ENGINE_REST_URL: http://camunda-platform:8080/engine-rest
      CAMUNDA_ENGINE_REST_USER: demo
      CAMUNDA_ENGINE_REST_PASSWORD: demo
    ports:
      - "8081:8080"
    depends_on:
      - camunda-platform
    networks:
      - camunda-network

volumes:
  camunda_mysql_data:

networks:
  camunda-network:
    driver: bridge

启动命令:

docker-compose -f docker-compose-camunda.yml up -d
  1. 生产环境部署配置
    Flowable 生产环境配置
# docker-compose-flowable-prod.yml
version: '3.8'

services:
  flowable-db:
    image: postgres:13
    container_name: flowable-db
    environment:
      POSTGRES_DB: flowable
      POSTGRES_USER: flowable
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - flowable_db_data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    networks:
      - flowable-network
    restart: unless-stopped

  flowable-app:
    image: flowable/flowable-rest:latest
    container_name: flowable-app
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://flowable-db:5432/flowable
      SPRING_DATASOURCE_USERNAME: flowable
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
      SPRING_PROFILES_ACTIVE: prod
      FLOWABLE_APP_SECURITY_ENABLED: "true"
    ports:
      - "8080:8080"
    depends_on:
      - flowable-db
    networks:
      - flowable-network
    restart: unless-stopped

  flowable-ui:
    image: flowable/flowable-ui:latest
    container_name: flowable-ui
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://flowable-db:5432/flowable
      SPRING_DATASOURCE_USERNAME: flowable
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
    ports:
      - "8081:8080"
    depends_on:
      - flowable-db
      - flowable-app
    networks:
      - flowable-network
    restart: unless-stopped

volumes:
  flowable_db_data:

networks:
  flowable-network:
    driver: bridge

Camunda 生产环境配置

# docker-compose-camunda-prod.yml
version: '3.8'

services:
  camunda-db:
    image: postgres:13
    container_name: camunda-db
    environment:
      POSTGRES_DB: camunda
      POSTGRES_USER: camunda
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - camunda_db_data:/var/lib/postgresql/data
    networks:
      - camunda-network
    restart: unless-stopped

  camunda-platform:
    image: camunda/camunda-bpm-platform:latest
    container_name: camunda-platform
    environment:
      DB_DRIVER: org.postgresql.Driver
      DB_URL: jdbc:postgresql://camunda-db:5432/camunda
      DB_USERNAME: camunda
      DB_PASSWORD: ${DB_PASSWORD}
      CAMUNDA_ENGINE_REST_AUTHENTICATION_ENABLED: "true"
      CAMUNDA_ENGINE_REST_AUTHENTICATION_USER: admin
      CAMUNDA_ENGINE_REST_AUTHENTICATION_PASSWORD: ${ADMIN_PASSWORD}
    ports:
      - "8080:8080"
    depends_on:
      - camunda-db
    networks:
      - camunda-network
    restart: unless-stopped

  camunda-identity:
    image: camunda/identity:latest
    container_name: camunda-identity
    environment:
      CAMUNDA_ENGINE_REST_URL: http://camunda-platform:8080/engine-rest
      CAMUNDA_ENGINE_REST_USER: admin
      CAMUNDA_ENGINE_REST_PASSWORD: ${ADMIN_PASSWORD}
    ports:
      - "8082:8080"
    depends_on:
      - camunda-platform
    networks:
      - camunda-network
    restart: unless-stopped

volumes:
  camunda_db_data:

networks:
  camunda-network:
    driver: bridge
  1. 环境变量配置文件
    创建 .env 文件:
# .env
DB_PASSWORD=your_secure_password_here
ADMIN_PASSWORD=your_admin_password_here
SPRING_PROFILES_ACTIVE=prod
  1. 验证部署
    Flowable 验证
    bash

检查服务状态

curl http://localhost:8080/flowable-rest/process-api/repository/process-definitions

# 访问 UI
# http://localhost:8081/flowable-ui

Camunda 验证
bash

检查服务状态

curl http://localhost:8080/engine-rest/engine

访问 Cockpit

http://localhost:8080/camunda/app/cockpit

  1. 常用管理命令
# 查看日志
docker logs -f flowable-rest
docker logs -f camunda-platform

# 进入容器
docker exec -it flowable-rest /bin/bash

# 重启服务
docker-compose restart flowable-rest

# 停止服务
docker-compose down
两种工作流引擎的 Docker 部署都很简单:
Flowable: 更适合 Spring Boot 集成,部署简单
Camunda: 企业级功能更丰富,社区活跃
根据您的具体需求选择合适的方案。生产环境建议使用 PostgreSQL 数据库,并配置适当的安全设置。

Flowable 与 Camunda 性能对比测试报告

三、测试数据

通过压力测试工具 JMeter 分别对 Flowable 和 Camunda 进行高并发压力测试,并发用户数从 100 到 1000,JMeter 设置 Ramp-up 为 1,循环次数为 10,测试数据如下:

并发数Flowable 响应时间Camunda 响应时间性能对比(Camunda 比 Flowable 提升)
100 并发2269 ms1631 ms+39%
200 并发3907 ms3489 ms+12%
400 并发7250 ms6452 ms+12%
600 并发9943 ms8700 ms+14%
800 并发13700 ms12400 ms+10%
1000 并发18800 ms15700 ms+20%

四、测试结论

  1. 性能表现

    • 在 1000 并发时,Flowable 6 后台报错,但能执行成功
    • Camunda 后台无报错,执行全部成功
  2. 错误情况

    • Flowable 报错信息
      Caused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: 
      Deadlock found when trying to get lock; try restarting transaction
      
    • Camunda:无报错信息
  3. 性能对比总结

    • 通过 Flowable 和 Camunda 多组对比测试
    • Camunda 性能比 Flowable 提升最小 10%,最大 39%
    • Camunda 在高并发场景下稳定性更好
  4. 实际应用验证

    • 云程 BPM(云程低代码开发平台)基于 Camunda 开发
    • 可以在线体验,并在多个项目进行验证
    • 性能表现良好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀͜͡傀儡师

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值