Flowable 引擎 Docker 部署实战:REST 服务、HAProxy 负载均衡与镜像签名校验

发布时间:2026/9/15 22:32:55
Flowable 引擎 Docker 部署实战:REST 服务、HAProxy 负载均衡与镜像签名校验 Flowable 引擎 Docker 部署实战REST 服务、HAProxy 负载均衡与镜像签名校验【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engineFlowable 是一个面向开发者的紧凑高效工作流与业务流程管理BPM平台。本文以 Flowable 引擎仓库中的 docker/README.md 为核心完整讲解如何使用 Docker Compose 一键拉起 Flowable REST 服务支持 PostgreSQL 数据持久化、通过 HAProxy 实现多实例负载均衡以及使用 cosign 校验 Flowable 官方镜像签名。读完本文你将能够在本机快速启动一个可访问、可调用的 Flowable REST 环境并掌握从部署、扩容到镜像安全验证的完整操作链路。一、仓库中的 Docker 资产总览在编写与执行任何部署命令之前先梳理仓库docker/目录下与运行相关的资产便于理解每个脚本、配置和镜像文件的用途文件作用rest-postgres.sh启动/停止「Flowable REST PostgreSQL」单实例环境的便捷脚本rest-loadbalancer-postgres.sh启动/停止/横向扩容「Flowable REST HAProxy PostgreSQL」集群环境的便捷脚本config/rest-postgres.yml单实例 Docker Compose 编排文件config/loadbalancer-rest-postgres.yml带 HAProxy 负载均衡的 Docker Compose 编排文件base-image/DockerfileFlowable Docker 基础镜像基于 Zulu OpenJDK 21 Alpine的构建文件base-image/wait-for-something.sh等待依赖服务就绪后再启动应用的入口脚本cosign.pub用于校验 Flowable 镜像签名的公开密钥remove-all-images.sh批量删除本机所有 flowable 相关镜像的清理脚本stop-remove-containers.sh停止并删除本机所有 flowable 相关容器的清理脚本从脚本代码可以看到这些 shell 脚本只是对docker-compose -f命令的薄封装start对应docker-compose up -dstop对应docker-compose downinfo对应docker-compose logs --follow集群脚本额外提供scale子命令调用docker-compose scale flowable-rest-appN详见 rest-loadbalancer-postgres.sh。二、前置条件与基础镜像说明2.1 环境要求已安装 Docker 与 Docker Compose仓库脚本基于docker-compose命令调用编排文件可访问 Docker Hub 拉取公共镜像flowable/flowable-rest、postgres:9.6-alpine、dockercloud/haproxy等验证镜像签名时需要 cosign 命令行工具。2.2 Flowable Docker 基础镜像base-image仓库中的 base-image/Dockerfile 展示了 Flowable 官方镜像的构建根基FROM azul/zulu-openjdk-alpine:21-jre-latest LABEL maintainerFlowable infoflowable.org RUN apk add --no-cache fontconfig ttf-dejavu rm -rf /var/cache/apk/* RUN addgroup -S flowable adduser -S flowable -G flowable RUN mkdir /data chown flowable:flowable /data \ chgrp -R 0 /data \ chmod -R gu /data ADD wait-for-something.sh . RUN chmod x wait-for-something.sh USER flowable:flowable该基础镜像的关键设计点运行时基于azul/zulu-openjdk-alpine:21-jre-latest即 Alpine Linux 上的 Zulu OpenJDK 21 JRE字体支持安装fontconfig与ttf-dejavu用于流程引擎生成 BPMN/CMMN 过程图时正确渲染文字对应 base-image/README.md 中描述非 root 运行创建flowable:flowable用户并以该用户身份运行应用遵循最小权限原则数据目录创建/data目录并授权给flowable用户供应用写入数据就绪等待脚本wait-for-something.sh被复制进镜像并赋予执行权限。wait-for-something.sh 是一个基于nc端口探测的等待器#!/bin/ash set -e host$1 port$2 description$3 shift 3 cmd$ until nc -z $host $port; do echo $description is unavailable - sleeping sleep 1 done 2 echo $description is up - executing command exec $cmd它接收「主机、端口、描述、要执行的命令」四个部分在依赖端口可连接之前每秒轮询一次就绪后用exec替换进程执行真正的应用启动命令从而解决容器编排中的服务依赖启动顺序问题。这一点在后面的 Compose 配置中会以entrypoint形式被实际使用。三、配置一Flowable REST 单实例 PostgreSQL3.1 一键启停命令仓库提供了封装好的启动脚本 rest-postgres.sh支持三个子命令./rest-postgres.sh start # 后台启动容器 ./rest-postgres.sh stop # 停止并删除容器 ./rest-postgres.sh info # 持续跟踪容器日志服务启动后可访问Flowable REST 入口http://localhost:8080/flowable-rest/Swagger API 文档http://localhost:8080/flowable-rest/docs/默认登录账号/密码rest-admin/test3.2 Compose 编排文件逐项解析config/rest-postgres.yml 是核心编排文件version: 3.6 services: flowable-rest-app: image: flowable/flowable-rest depends_on: - flowable-rest-db environment: - SERVER_PORT8080 - SPRING_DATASOURCE_DRIVER-CLASS-NAMEorg.postgresql.Driver - SPRING_DATASOURCE_URLjdbc:postgresql://flowable-rest-db:5432/flowable - SPRING_DATASOURCE_USERNAMEflowable - SPRING_DATASOURCE_PASSWORDflowable - FLOWABLE_COMMON_APP_IDM-ADMIN_USERadmin - FLOWABLE_COMMON_APP_IDM-ADMIN_PASSWORDtest ports: - 8080:8080 entrypoint: [./wait-for-something.sh, flowable-rest-db, 5432, PostgreSQL, /flowable-entrypoint.sh] flowable-rest-db: image: postgres:9.6-alpine container_name: flowable-rest-postgres environment: - POSTGRES_PASSWORDflowable - POSTGRES_USERflowable - POSTGRES_DBflowable ports: - 5433:5432 command: postgres参数含义与注意事项flowable-rest-app服务image: flowable/flowable-rest官方 Flowable REST 应用镜像depends_on: flowable-rest-db声明依赖数据库服务配合entrypoint中的wait-for-something.sh真正保证数据库端口就绪后才启动应用SERVER_PORT8080应用监听端口与ports的8080:8080映射对应SPRING_DATASOURCE_*通过环境变量注入 Spring Boot 数据源配置驱动为 PostgreSQL连接地址指向同 Compose 网络内的数据库服务名flowable-rest-db:5432FLOWABLE_COMMON_APP_IDM-ADMIN_USER/FLOWABLE_COMMON_APP_IDM-ADMIN_PASSWORDFlowable 通用应用模块的管理员账号配置。注意此处值会被用作 IDM身份管理管理员凭据而 README 中说明的 REST 登录账号为rest-admin/test说明该 REST 容器的应用级管理员账号实际由镜像默认或额外的 REST 应用配置决定在带负载均衡的配置中则显式通过FLOWABLE_REST_APP_ADMIN_*指定见下文entrypoint使用基础镜像内置的wait-for-something.sh等待flowable-rest-db的 5432 端口可达后再执行/flowable-entrypoint.sh完成真正的应用启动。flowable-rest-db服务postgres:9.6-alpine轻量 PostgreSQL 9.6 镜像POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB均设为flowable与应用侧的数据源账号密码保持一致ports: 5433:5432将数据库映射到宿主机 5433 端口而非 5432避免与本机已有 PostgreSQL 冲突方便用psql -h localhost -p 5433直连调试。3.3 直接使用 docker-compose 命令如果不使用封装脚本也可以手动执行等效命令docker-compose -f config/rest-postgres.yml up -d # 启动 docker-compose -f config/rest-postgres.yml down # 停止 docker-compose -f config/rest-postgres.yml logs --follow # 查看日志四、配置二HAProxy 负载均衡 多实例横向扩容当需要更高吞吐或验证水平扩展时使用带 HAProxy 的集群配置 config/loadbalancer-rest-postgres.ymlversion: 3.6 services: flowable-rest-app: image: flowable/flowable-rest depends_on: - flowable-db environment: - SERVER_PORT8080 - SPRING_DATASOURCE_DRIVER-CLASS-NAMEorg.postgresql.Driver - SPRING_DATASOURCE_URLjdbc:postgresql://flowable-db:5432/flowable - SPRING_DATASOURCE_USERNAMEflowable - SPRING_DATASOURCE_PASSWORDflowable - FLOWABLE_REST_APP_ADMIN_USER-IDrest-admin - FLOWABLE_REST_APP_ADMIN_PASSWORDtest - FLOWABLE_REST_APP_ADMIN_FIRST-NAMERest - FLOWABLE_REST_APP_ADMIN_LAST-NAMEAdmin expose: - 9977 entrypoint: [./wait-for-something.sh, flowable-db, 5432, PostgreSQL, /flowable-entrypoint.sh] flowable-db: image: postgres:9.6-alpine container_name: flowable-postgres environment: - POSTGRES_PASSWORDflowable - POSTGRES_USERflowable - POSTGRES_DBflowable ports: - 5433:5432 command: postgres flowable-lb: image: dockercloud/haproxy links: - flowable-rest-app volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - STATS_AUTHflowable:flowable ports: - 8080:80 - 8081:1936与单实例配置的关键差异应用不对外直接暴露端口flowable-rest-app改用expose: 9977仅对 Compose 网络内的 HAProxy 可见外部流量统一由负载均衡器入口进入显式配置 REST 应用管理员通过FLOWABLE_REST_APP_ADMIN_USER-IDrest-admin、FLOWABLE_REST_APP_ADMIN_PASSWORDtest等变量明确指定了 README 中登录凭据rest-admin/test的来源同时补充了 First-Name/Last-Name 属性HAProxy 负载均衡器dockercloud/haproxy镜像links: flowable-rest-app关联后端服务挂载宿主机 Docker socket/var/run/docker.sock使 HAProxy 能动态感知flowable-rest-app容器的实例数量并自动更新后端列表——这是scale扩容得以生效的机制ports8080:80为 REST 服务对外入口8081:1936为 HAProxy 统计页面端口STATS_AUTHflowable:flowable统计页面的访问凭据。4.1 一键启停与扩容命令./rest-loadbalancer-postgres.sh start # 后台启动整个集群 ./rest-loadbalancer-postgres.sh stop # 停止集群 ./rest-loadbalancer-postgres.sh scale 2 # 将 flowable-rest-app 扩容到 2 个实例 ./rest-loadbalancer-postgres.sh info # 查看日志扩容命令对应脚本中的docker-compose -f config/loadbalancer-rest-postgres.yml scale flowable-rest-app$2见 rest-loadbalancer-postgres.sh。scale必须携带实例总数参数例如./rest-loadbalancer-postgres.sh scale 2表示将后端应用扩容为总共 2 个实例。扩容后由于 HAProxy 动态感知容器变化无需重启负载均衡器即可将流量分发到新实例。集群模式下的访问入口与单实例一致Flowable RESThttp://localhost:8080/flowable-rest/Swagger 文档http://localhost:8080/flowable-rest/docs/HAProxy 统计页http://localhost:8081 账号/密码flowable/flowable登录账号/密码rest-admin/test4.2 脚本使用提示两个脚本在无参数或参数非法时会打印用法并退出例如集群脚本的完整用法提示为./rest-loadbalancer-postgres.sh start|stop|scale [number-of-instances]|info HAProxy statistics on http://localhost:8081 (flowable/flowable)五、清理本机 Flowable 容器与镜像仓库还提供了两个清理脚本便于快速重置本地 Docker 环境./stop-remove-containers.sh # 停止并删除所有 flowable 相关容器 ./remove-all-images.sh # 删除所有 flowable 相关镜像其实现分别为docker rm -f $(docker ps -a | grep flowable | awk {print $1;})与docker rmi $(docker images | grep flowable | awk {print $3;})见 stop-remove-containers.sh 与 remove-all-images.sh。注意这两个脚本通过grep flowable匹配镜像名/容器名因此只会影响名称中包含 flowable 的对象执行前请确认当前机器上没有其他需要保留的 flowable 命名资源。六、镜像签名与 cosign 校验WIP6.1 背景从 Flowable 6.7.3 版本开始官方对 Docker 镜像使用 sigstore/cosign 进行签名仓库中的 cosign.pub 即为用于验证的公开密钥。README 中标注为[WIP]表示签名机制仍在完善过程中。公开密钥内容如下-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhP8cYZE0aRlNd6kjTQuFSLliSkEV naoyzYbqZMCcC7r755IchTZNImrYRxSSwphJeVgOQ3Tbci03F/MjrqQ -----END PUBLIC KEY-----密钥采用 EC椭圆曲线公钥格式BEGIN PUBLIC KEYKoZIzj0算法标识与 cosign 默认的 ECDSA-P256 签名算法对应。6.2 验证流程在docker/目录下执行以下命令校验 Flowable REST 6.7.3 镜像的签名cosign verify -key cosign.pub flowable/flowable-rest:6.7.3命令说明-key cosign.pub指定本地保存的 Flowable 官方公钥flowable/flowable-rest:6.7.3待验证的镜像完整引用验证成功时 cosign 会输出与镜像关联的签名载荷通常包含签名证书与流水线元数据若镜像与公钥不匹配或镜像未被签名命令会报错退出。该机制的核心价值在于供应链安全通过验证镜像的完整性来源可以确认拉取的镜像确实由 Flowable 官方签名而非被篡改或伪装的第三方镜像。实际生产使用中建议同时配置 cosign 的密钥托管如 Keyless 模式或将公钥纳入 CI 流水线做自动校验本文仅介绍仓库当前提供的公钥文件验证方式。七、总结结合仓库 docker/README.md 与 docker/config 目录下的编排文件可以快速归纳出三条可复用的部署路径单实例快速验证./rest-postgres.sh start一条命令即可获得「Flowable REST PostgreSQL」的完整运行环境并通过 Swagger 文档/flowable-rest/docs/在线调试 API多实例水平扩展./rest-loadbalancer-postgres.sh start拉起「HAProxy 多副本应用 PostgreSQL」集群通过scale N动态增减后端实例HAProxy 借助 Docker socket 自动感知容器变化完成流量分发供应链安全校验使用cosign verify -key cosign.pub flowable/flowable-rest:version验证官方镜像签名从源头保证所部署镜像的可信度。无论选择哪种方式核心的容器配置逻辑都源于同一套设计以环境变量注入 Spring Boot 数据源与应用管理员配置、以wait-for-something.sh解决依赖服务启动顺序、以非 root 用户与最小权限原则保障运行时安全。这套模式同样适用于将 Flowable REST 集成进自有 CI/CD 或 Kubernetes 环境的场景可作为自定义镜像与编排文件的直接参考起点。【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考