
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
- 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
- 生产环境部署配置
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
- 环境变量配置文件
创建 .env 文件:
# .env
DB_PASSWORD=your_secure_password_here
ADMIN_PASSWORD=your_admin_password_here
SPRING_PROFILES_ACTIVE=prod
- 验证部署
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
- 常用管理命令
# 查看日志
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 ms | 1631 ms | +39% |
| 200 并发 | 3907 ms | 3489 ms | +12% |
| 400 并发 | 7250 ms | 6452 ms | +12% |
| 600 并发 | 9943 ms | 8700 ms | +14% |
| 800 并发 | 13700 ms | 12400 ms | +10% |
| 1000 并发 | 18800 ms | 15700 ms | +20% |
四、测试结论
-
性能表现:
- 在 1000 并发时,Flowable 6 后台报错,但能执行成功
- Camunda 后台无报错,执行全部成功
-
错误情况:
- Flowable 报错信息:
Caused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction - Camunda:无报错信息
- Flowable 报错信息:
-
性能对比总结:
- 通过 Flowable 和 Camunda 多组对比测试
- Camunda 性能比 Flowable 提升最小 10%,最大 39%
- Camunda 在高并发场景下稳定性更好
-
实际应用验证:
- 云程 BPM(云程低代码开发平台)基于 Camunda 开发
- 可以在线体验,并在多个项目进行验证
- 性能表现良好
285

被折叠的 条评论
为什么被折叠?



