
Windmill RHEL9 二进制构建指南基于 UBI9 的 Docker 多阶段编译与 Red Hat 订阅配置【免费下载链接】windmillOpen-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs Airflow). Open-source alternative to Retool and Temporal.项目地址: https://gitcode.com/GitHub_Trending/wi/windmill本指南围绕 Windmill 仓库 docker/RHEL9/README.md 及其配套 Dockerfile完整讲解如何在 Red Hat Enterprise Linux 9RHEL9上编译 Windmill 服务端二进制包括构建背景、Red Hat 订阅与 CodeReady Builder 仓库的启用方式、docker build的具体命令参数、多阶段构建流程中各阶段的职责以及将产物部署到任意 RHEL9 机器的运行时依赖要求。读完本文你可以自行构建出适用于 RHEL9 的 Windmill 二进制并完成部署。为什么需要单独的 RHEL9 构建流程Windmill 是一个将脚本转化为 Webhook、工作流和 UI 的开源开发者平台其后端由 Rust 编写见 backend/Cargo.toml。仓库默认的 Dockerfile 面向通用 Linux 发行版构建但 RHEL9 的软件生态与 Debian/Ubuntu 差异较大存在两个关键阻碍基础镜像不同RHEL9 官方基础镜像是 Red Hat Universal Base Image 9UBI9软件包管理使用yum/dnf仓库地址为registry.access.redhat.com/ubi9/ubi。SAML 依赖需要额外系统库Windmill 的 SAML 单点登录能力依赖samaelcrate 并启用了xmlsecfeature见 backend/Cargo.toml 与 backend/windmill-api/Cargo.toml 中的enterprise_samlfeature。这要求系统提供xmlsec1-devel、xmlsec1-openssl-devel、libxml2-devel等开发包而xmlsec1-devel不在 UBI9 默认仓库中只收录在需要 Red Hat 订阅授权的CodeReady Builder for RHEL9仓库里。因此构建 RHEL9 二进制必须先在构建镜像内完成 Red Hat 订阅注册并启用 CodeReady Builder 仓库这正是 docker/RHEL9/README.md 文档要解决的核心问题。构建前置条件在开始构建前需要准备Red Hat 账号与订阅需要在 Red Hat 官网注册并持有个人开发者订阅Individual Developer Subscription这是启用 CodeReady Builder 仓库的前提。Docker 环境构建使用 Docker BuildKit 的--secret特性传递订阅凭据确保敏感信息不会落入镜像层。Windmill 仓库源码在仓库根目录执行构建命令Dockerfile 使用相对路径引用 frontend、backend、openflow.openapi.yaml、system_prompts/auto-generated、typescript-client/docs、python-client/docs 等内容。构建命令详解README 给出了标准构建命令docker build \ -f docker/RHEL9/Dockerfile \ --build-arg features$features \ --secret idrh_username,src/path/to/rh_username \ --secret idrh_password,src/path/to/rh_password \ .各参数含义如下参数说明-f docker/RHEL9/Dockerfile指定使用 RHEL9 专用的 Dockerfile--build-arg features$features向 Rust 构建传入 Cargo feature 列表$features留空即为默认构建如enterprise、ee等按需设置--secret idrh_username,src/path/to/rh_username将本机文件中的 Red Hat 用户名以 BuildKit secret 方式传入--secret idrh_password,src/path/to/rh_password将本机文件中的 Red Hat 密码以 secret 方式传入.以仓库根目录为构建上下文使用时需先将用户名和密码分别写入两个本地文件例如rh_username与rh_password再在src中指向它们。secret 仅在构建阶段以/run/secrets/rh_username与/run/secrets/rh_password挂载不会固化在镜像中。Dockerfile 多阶段构建剖析Dockerfile 采用典型的多阶段构建共四个阶段职责划分清晰。rust_baseRust 编译基础环境以 UBI9 为基底registry.access.redhat.com/ubi9/ubi:latest通过yum install安装git openssl-devel npm nodejs rustfmt再通过 rustup 手动安装 Rust 工具链并加入PATH随后安装cargo-chef版本^0.1用于后续依赖缓存。该阶段设置了SQLX_OFFLINEtrue使 sqlx 宏在离线无数据库环境下也能完成编译。frontend前端静态资源构建使用node:20-alpine作为前端构建环境npm ci按 frontend/package.json 与 lock 文件安装依赖执行 backend/windmill-api/build_openapi.sh 生成 OpenAPI 描述并拷贝oauth_connect.json、openflow.openapi.yaml、system_prompts/auto-generated 等运行时资源npm run generate-backend-client依据 OpenAPI 生成前端后端客户端代码以NODE_OPTIONS--max-old-space-size8192提升 Node 堆内存上限后执行npm run build可用WM_BUILD_VERSIONbuild-arg 注入版本号该参数会传入 frontend/svelte.config.js 参与打包。planner依赖清单计算cargo chef prepare扫描 backend 的 Rust 工程并生成recipe.json为后续编译阶段做依赖缓存准备。注意该阶段会删除.cargo/config.toml。builder订阅注册、系统依赖与最终编译这是与 RHEL 平台强相关的核心阶段按顺序完成注册订阅利用--mounttypesecret,idrh_username与--mounttypesecret,idrh_password读取凭据执行subscription-manager register --username $(cat /run/secrets/rh_username) --password $(cat /run/secrets/rh_password)启用 CodeReady Builder 仓库subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms其中$(arch)自动适配当前架构如 x86_64安装编译依赖yum install安装perl-FindBin perl-IPC-Cmd perl-Time-Piece libxml2-devel xmlsec1-devel xmlsec1-openssl-devel krb5-devel cyrus-sasl-devel libcurl-devel clang llvm-devel cmake libtool-ltdl-devel。其中xmlsec1-devel、xmlsec1-openssl-devel与libxml2-devel是samael/SAML 编译所必需的krb5-devel与cyrus-sasl-devel支撑 Kerberos/GSSAPI 认证clang llvm-devel cmake服务于部分依赖的原生编译删除 mold 链接器配置拷贝源码后执行rm -f .cargo/config.toml。仓库的 backend/.cargo/config.toml 为 Linux 目标配置了-fuse-ldmold链接器但 mold 在 RHEL 上不可用因此必须移除回退到系统默认链接器编译主二进制cargo build --release --features $features以/usr/local/cargo/registry作为缓存挂载加速编译 DuckDB FFI 动态库在 windmill-duckdb-ffi-internal 内单独执行cargo build --release产物libwindmill_duckdb_ffi_internal.so被拷贝到/usr/src/app/Windmill 在运行时通过 FFI 加载它安装运行时包并注销安装krb5-workstation与cyrus-sasl-gssapiKerberos 运行时组件最后执行subscription-manager unregister注销订阅避免留下激活状态。部署到 RHEL9 机器README 明确指出镜像构建完成后二进制可以直接拷贝到任意 RHEL9 机器上运行无需在目标机器上重复整个构建链。但目标机器必须满足一个运行时依赖——安装xmlsec1包sudo yum install xmlsec1 # 或 sudo dnf install xmlsec1这是因为构建出的二进制在运行期尤其是 SAML 相关路径仍会动态依赖xmlsec1的运行时库而目标机器无需-devel开发包只需运行时包。若目标环境还涉及 Kerberos/GSSAPI 集成建议一并安装 Dockerfile 中列出的krb5-workstation与cyrus-sasl-gssapi同时将libwindmill_duckdb_ffi_internal.so保持在与构建时一致的相对位置确保 DuckDB FFI 可被加载。RHEL8 与 RHEL9 构建的对照仓库在 docker/RHEL8 提供了几乎同构的 RHEL8 构建方案两者差异点如下项目RHEL8DockerfileRHEL9Dockerfile基础镜像registry.access.redhat.com/ubi8/ubi:latestregistry.access.redhat.com/ubi9/ubi:latestCodeReady Builder 仓库codeready-builder-for-rhel-8-$(arch)-rpmscodeready-builder-for-rhel-9-$(arch)-rpmsperl 相关依赖perl-interpreter perl-IPC-Cmd perl-Time-Pieceperl-FindBin perl-IPC-Cmd perl-Time-Piece其余阶段前端构建、planner、订阅注册、依赖安装、mold 移除、DuckDB FFI 编译、运行时包与注销完全一致。如果你的目标环境是 RHEL8可参照同一套流程替换为 RHEL8 的 Dockerfile。常见注意事项必须持有有效订阅subscription-manager register需要 Red Hat 账号凭据未注册或订阅过期将无法启用 CodeReady Builder 仓库进而导致xmlsec1-devel安装失败。凭据安全请务必使用--secret传递凭据不要将其写入 Dockerfile 或 build-arg避免凭据残留在镜像历史中。feature 参数--build-arg features透传给cargo build --features需要企业版EE能力时在此传入对应 feature 名不确定时可先留空构建默认版本。目标架构仓库启用了codeready-builder-for-rhel-9-$(arch)-rpms构建时会按当前平台自动选择架构仓库交叉构建时需自行调整$(arch)取值。通过以上流程即可在纯 RHEL9 环境下产出 Windmill 服务端二进制并借助构建一次、随处拷贝的方式在任意 RHEL9 主机上完成部署。【免费下载链接】windmillOpen-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs Airflow). Open-source alternative to Retool and Temporal.项目地址: https://gitcode.com/GitHub_Trending/wi/windmill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考