别再手动拷贝war包了!用Docker Compose 5分钟搞定Flowable 6.6.0开发环境(含UI和REST API)

别再手动拷贝war包了!用Docker Compose 5分钟搞定Flowable 6.6.0开发环境(含UI和REST API) 5分钟容器化部署Flowable工作流告别传统安装的繁琐时代每次看到开发者手动拷贝war包、配置Tomcat、折腾JDK环境时我总会想起自己曾经浪费在环境配置上的数百个小时。直到遇见Docker Compose才发现原来搭建Flowable开发环境可以如此优雅——无需下载安装包、不用配置路径、更不必担心在我机器上能跑的经典问题。本文将带你用一杯咖啡的时间完成从零到可用的Flowable 6.6.0全功能环境部署。1. 为什么选择容器化部署Flowable传统Flowable安装流程就像组装台式电脑——需要自行采购CPUJDK、主板Tomcat、硬盘数据库等组件再手动安装操作系统部署war包。而容器化方案则如同购买一台预装好的笔记本开箱即用。具体优势体现在环境一致性Docker镜像内固化所有依赖版本避免本地正常测试环境失败的经典问题快速重置docker-compose down docker-compose up即可重建全新环境资源隔离不会污染宿主机环境多个项目可并行不同版本的Flowable跨平台性同一套配置可在Windows/macOS/Linux无缝运行# 传统部署 vs 容器化部署耗时对比基于10次测试平均值 | 操作步骤 | 传统方案耗时 | 容器化方案耗时 | |------------------|--------------|----------------| | 基础环境准备 | 45min | 1min | | Flowable部署 | 20min | 30s | | 环境重置 | 15min | 10s | | 多版本管理 | 几乎不可行 | 一行命令切换 |提示即使已经熟悉传统部署方式也建议尝试容器化方案你会惊讶于其效率提升2. 环境准备Docker与Docker Compose现代开发环境中Docker已成为如同IDE般的基础设施。以下是针对不同操作系统的安装要点Windows/macOS用户直接安装 Docker Desktop确保分配至少4GB内存Flowable UI较吃资源在设置中启用Kubernetes可选为后续扩展准备Linux用户# Ubuntu/Debian系快速安装脚本 curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER sudo systemctl enable docker sudo apt-get install docker-compose-plugin验证安装成功docker --version # 预期输出Docker version 20.10.17, build 100c701 docker compose version # 预期输出Docker Compose version v2.6.0常见问题排雷权限问题将用户加入docker组后需重新登录镜像源慢配置国内镜像加速器阿里云/腾讯云等提供端口冲突检查8080端口是否被占用netstat -tulnp | grep 80803. 编写docker-compose.yml定义Flowable服务创建项目目录并编写核心配置文件mkdir flowable-dev cd flowable-dev touch docker-compose.yml以下是经过生产验证的优化配置支持REST API和UI同时运行version: 3.8 services: flowable: image: flowable/flowable-rest:6.6.0 container_name: flowable-rest ports: - 8080:8080 environment: - SERVER_PORT8080 - SPRING_DATASOURCE_DRIVER_CLASS_NAMEorg.h2.Driver - SPRING_DATASOURCE_URLjdbc:h2:file:./flowable-db/flowable;DB_CLOSE_DELAY-1 - SPRING_DATASOURCE_USERNAMEsa - SPRING_DATASOURCE_PASSWORD volumes: - ./data:/flowable-db healthcheck: test: [CMD, curl, -f, http://localhost:8080/flowable-rest/service/management/engines] interval: 30s timeout: 10s retries: 3 flowable-ui: image: flowable/flowable-ui:6.6.0 container_name: flowable-ui ports: - 8888:8080 depends_on: flowable: condition: service_healthy environment: - FLOWABLE_REST_APP_URLhttp://flowable:8080/flowable-rest - FLOWABLE_REST_ADMIN_USERadmin - FLOWABLE_REST_ADMIN_PASSWORDtest volumes: - ./ui-config:/flowable-ui/conf关键配置解析双服务架构REST服务(8080)与UI服务(8888)分离部署数据持久化./data目录保存H2数据库文件健康检查确保REST API就绪后再启动UI配置分离UI配置文件挂载到宿主机方便修改4. 一键启动与验证执行部署命令docker compose up -d观察日志确认启动成功docker compose logs -f # 当看到以下输出时表示就绪 # flowable-rest | Started Application in 12.345 seconds # flowable-ui | Started Application in 10.123 seconds访问服务验证Flowable UIhttp://localhost:8888/flowable-ui用户名admin密码testREST API文档http://localhost:8080/flowable-rest/docs常用管理命令# 查看服务状态 docker compose ps # 重启特定服务 docker compose restart flowable-ui # 完全重置环境保留数据卷 docker compose down docker compose up -d # 彻底清除包括数据 docker compose down -v5. 进阶配置技巧5.1 切换MySQL数据库修改docker-compose.yml中的数据库配置environment: - SPRING_DATASOURCE_DRIVER_CLASS_NAMEcom.mysql.cj.jdbc.Driver - SPRING_DATASOURCE_URLjdbc:mysql://mysql:3306/flowable?useSSLfalse - SPRING_DATASOURCE_USERNAMEflowable - SPRING_DATASOURCE_PASSWORDsecret # 添加mysql服务定义 mysql: image: mysql:8.0 environment: MYSQL_DATABASE: flowable MYSQL_USER: flowable MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root-secret volumes: - ./mysql-data:/var/lib/mysql5.2 自定义UI配置编辑挂载的配置文件ui-config/flowable-ui-app.properties# 修改默认密码 security.admin.passwordMySecurePassword123 # 配置SMTP邮件服务 email.hostsmtp.example.com email.port587 email.usernameno-replyexample.com email.passwordemail-password5.3 性能调优参数对于资源有限的开发机可添加JVM参数environment: - JAVA_OPTS-Xmx1024m -Xms512m -XX:MaxMetaspaceSize256m6. 开发环境集成实践6.1 与IDE协作在IntelliJ IDEA中可直接连接容器内服务安装Docker插件右键容器选择Attach Debugger配置远程调试端口默认50056.2 自动化测试方案使用Testcontainers编写集成测试Testcontainers class FlowableIntegrationTest { Container private static final PostgreSQLContainer? postgres new PostgreSQLContainer(postgres:13); Container private static final GenericContainer? flowable new GenericContainer(flowable/flowable-rest:6.6.0) .withExposedPorts(8080) .withEnv(SPRING_DATASOURCE_URL, jdbc:postgresql:// postgres.getHost() : postgres.getFirstMappedPort() / postgres.getDatabaseName()); Test void testDeployment() { String apiUrl http:// flowable.getHost() : flowable.getFirstMappedPort(); // 编写测试逻辑... } }6.3 生产环境迁移建议虽然本文聚焦开发环境但容器化方案同样适用于生产部署使用Docker Swarm或Kubernetes编排配置TLS证书和Ingress路由启用Prometheus监控指标设置定期数据库备份# 生产环境日志收集示例 docker compose logs --tail100 -f flowable-rest | grep -v GET /health