@ forestadmin/ workflow- executor
在自己的基础设施上运行森林管理流程步骤.
执行人投票 森林管弦乐手 等待步骤,管理地方 (通过森林特工获取你的数据),报告结果。 没有 客户端数据永远离开你的基础设施.
先决条件
请确定您在最新版本的森林管理代理(Node.js/JS或Ruby)上,然后将您的代理指向执行者 workflowExecutorUrl数字 :
createAgent({
// ...
workflowExecutorUrl: process.env.WORKFLOW_EXECUTOR_URL, // e.g. http://localhost:3400
})
这是 所需经费 执行者工作的时间: workflowExecutorUrl 设置,代理将转发工作流程请求的路由挂载到执行器(并将 JWT 转发给 auth) 。 如果未设定, 代理返回 404 在那些路线上,执行者从未收到任何工作.
从一个环境变量驱动它(WORKFLOW_EXECUTOR_URL 因此,每次部署都可以针对自己的执行者。 URL 是代理到达执行器—— 其 HTTP 服务器( 默认端口) 的地方 3400) (中文(简体) ). 当代理和执行器运行在私有网络(如内部负载平衡器)后的独立主机上时,使用执行器的内部地址,并确保代理能够到达执行器的HTTP端口.
多克( 建议)
图像发布为 ghcr.io/forestadmin/runtime。它以前的名称
ghcr.io/forestadmin/workflow-executor,它仍然从准确的
同一建筑物——现有部署继续运作,但新部署应使用
runtime。 。 。 .
快开始
cp .env.example .env # fill in your secrets
docker compose up
这个 docker-compose.yml 在此软件包根部开始一个单一的执行实例。 见 .env.example 用于完整环境变量清单及其描述.
直接运行
docker run -d \
-e FOREST_ENV_SECRET="your-env-secret" \
-e FOREST_AUTH_SECRET="your-auth-secret" \
-e AGENT_URL="http://host.docker.internal:3351" \
-e DATABASE_URL="postgres://user:[email protected]:5432/mydb" \
-p 3400:3400 \
ghcr.io/forestadmin/runtime:latest
说明: 当执行器在 Docker 运行时, 您的代理机在主机运行时, 请使用
host.docker.internal改为localhost内AGENT_URL财务报告和审定财务报表DATABASE_URL。 。 。 .
观测( 开放的遥测)
与 Docker 图像船 打开几何 APM建入并使用任何OTLP相容后端(Datadog, Grafana Tempo, Jaeger, Honeycomb等). 没错 默认关闭 并自动打开,当您将其指向OTLP接收器时——不需要更改代码或额外安装。 在应用程序启动前就设置了追踪(HTTP,Postgres等的自动仪器),而缓冲跨度被冲出优雅的关闭.
完全通过标准OTel环境变量配置 :
| 变量 | 说明 |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP接收器URL(例如:. http://collector:4318) (中文(简体) ). 追踪被禁用, 直至设定 . |
OTEL_SERVICE_NAME | 服务名有痕迹 默认 : forestadmin-workflow-executor。 。 。 . |
OTEL_RESOURCE_ATTRIBUTES | 额外的资源属性,例如:. deployment.environment=production,version=1.7.0。 。 。 . |
OTEL_SDK_DISABLED | 设定为 true 以强制无法追踪,即使配置了终点. |
docker run -d \
-e FOREST_ENV_SECRET="your-env-secret" \
-e FOREST_AUTH_SECRET="your-auth-secret" \
-e AGENT_URL="http://host.docker.internal:3351" \
-e DATABASE_URL="postgres://user:[email protected]:5432/mydb" \
-e OTEL_EXPORTER_OTLP_ENDPOINT="http://collector:4318" \
-p 3400:3400 \
ghcr.io/forestadmin/runtime:latest
说明: OpenTeleometry只在多克图像中捆绑. 它不是用 npm 套件运出(
npx @forestadmin/workflow-executor) (中文(简体) ).
没有多克
有数据库
需要22.12.0节点和Postgres数据库:
FOREST_ENV_SECRET="your-env-secret" \
FOREST_AUTH_SECRET="your-auth-secret" \
AGENT_URL="https://your-agent-url" \
DATABASE_URL="postgres://user:pass@localhost:5432/mydb" \
npx @forestadmin/workflow-executor
在哪里找到您的全权证书:
这两个值已经存在于您的代理环境变量中 . FOREST_ENV_SECRET 也可以在 app.forestadmin.com (原始内容存档于2018-10-21) → 设置 → 环境 – 点击您的环境 . FOREST_AUTH_SECRET 定义在您一边, 森林管理UI中没有.
AGENT_URL 是您森林管理员代理运行的 URL( 例如) . http://localhost:3351) (中文(简体) ).
数据库连接
Postgres连接可以有两种方式提供. 若为 DATABASE_URL 已经设定,它
用于当前。 否则执行器会从个人中构建连接字符串
部件 – 当您的平台将证书作为单独的变量曝光时, 方便:
| 变量 | 需求 | 说明 |
|---|---|---|
DATABASE_HOST | 对 | 数据库主机 |
DATABASE_NAME | 对 | 数据库名称 |
DATABASE_USER | 对 | 数据库用户 |
DATABASE_PASSWORD | 没有 | 数据库密码 |
DATABASE_PORT | 没有 | 数据库端口( 默认值 : 5432(中文(简体) ) |
DATABASE_SCHEMA | 没有 | 执行者表格的 Postgres 计划( 默认 ): forest(中文(简体) ) |
FOREST_ENV_SECRET="your-env-secret" \
FOREST_AUTH_SECRET="your-auth-secret" \
AGENT_URL="https://your-agent-url" \
DATABASE_HOST="localhost" \
DATABASE_NAME="mydb" \
DATABASE_USER="user" \
DATABASE_PASSWORD="pass" \
DATABASE_SSL="false" \
npx @forestadmin/workflow-executor
DATABASE_SSL 默认为 true (管理 Postgres 需要 TLS); 设置为 false 用于没有 TLS 的本地数据库.
DATABASE_URL 优先排序 : 当设定时, 单个部分被忽略.
DATABASE_SCHEMA 设置执行者表格所运行的 Postgres 方案( 默认 ): forest) (中文(简体) ). 设定为将执行者指向另一个计划——例如. public 当它拥有数据库时,或者与你的代理人一起共享一个计划。 该值必须是有效的 Postgres 标识符 .
启动时, 执行器会创建计划, 如果它缺失的话, 这需要 CREATE 特权 数据库数字 :
GRANT CREATE ON DATABASE "<db>" TO "<user>";
如果无法授予数据库级别 CREATE,预先创建具有管理员作用的 schema ,并只授予 schema 级别的权利——先创建 schema 级别的执行器探测器,并在已经存在时跳过创建,所以没有数据库级别 CREATE 需要:
CREATE SCHEMA analytics;
GRANT USAGE, CREATE ON SCHEMA analytics TO "<user>";
(注:Postgres检查数据库级别) CREATE 特权 CREATE SCHEMA IF NOT EXISTS 即使计划存在,执行者也会在存在探测器上打开声明,而不是依赖 IF NOT EXISTS. ) (中文(简体) )
使用 DATABASE_SCHEMA=public 在专用数据库上是最简单的设置—— public 永远存在,所以没有 CREATE 需要数据库。 在邮购15+,虽然, public 不再发放补助金 CREATE 因此执行者仍然需要它在那里创建自己的表格:
GRANT USAGE, CREATE ON SCHEMA public TO "<user>";
OAuth 保护的 MCP 连接器
当您的工作流程使用 OAuth 保护的 MCP 连接器时,执行器会将每个用户的 OAuth 证书存储在其数据库中,休息时加密. 以与其他秘密相同的方式提供加密密钥( in) .env,或与 -e 打开 docker run:
| 变量 | 说明 |
|---|---|
FOREST_EXECUTOR_ENCRYPTION_KEY | OAuth 证书的A-rest加密密钥(AES-256-GCM) 执行器商店. 生成方式 openssl rand -hex 32使用一个 单独 秘密从 FOREST_AUTH_SECRET.该值没有被验证,所以使用一个真正随机的秘密. |
- 只要求 OAuth 保护的 MCP 连接器,并读作懒惰——一个没有这种证书靴子的执行者,没有这种靴子就运行良好.
- 对共享数据库的每个实例使用相同的值. 否则,一个实例无法解密另一个实例所储存的证书.
- 把它视为永久的:没有有管理的轮换. 更改它迫使每个受影响的用户重新连接他们受OAuth保护的MCP连接器.
当 MCP 步骤无法装入工具时
执行者在 Error,因此在您的日志中默认值为:
{
"level": "Error",
"message": "MCP servers failed to load tools",
"requestedMcpServerId": "39",
"mcpServerName": "acme-crm",
"failures": [
{ "server": "acme-crm", "kind": "connection", "error": "connect ECONNREFUSED 10.0.4.12:8080" }
]
}
kind 告诉你在哪里看:
auth——服务器拒绝了证书(HTTP 401). 在 OAuth2 连接器上, 执行器会自动刷新令牌并重试一次, 因此此行涉及静态证书; 一个恢复日志的 OAuth2 连接器MCP tools loaded after refreshing the credential时间Info,不能暂停运行以进行再校正.connection——不可接通,拒绝,或慢于每服务器15s的负载超时.unknown——服务器答覆了,但负载无论如何都失败了,包括HTTP 403(证书有效但缺乏权限,无法刷新修复),这个构建的集成不支持error文本带有原因.
回答但曝光无工具的服务器不是失败: 您得到一个空工具列表, 没有出错 .
设定 LOG_LEVEL=Debug 每个服务器增加一行,其中包含其工具计数和加载时间,这就是您如何找到正在减速的连接器.
仅测试
下列模式跳过数据库要求,但 不适合生产 ——状态在重启时丢失.
夹克
docker run --rm \
-e FOREST_ENV_SECRET="your-env-secret" \
-e FOREST_AUTH_SECRET="your-auth-secret" \
-e AGENT_URL="http://host.docker.internal:3351" \
-p 3400:3400 \
ghcr.io/forestadmin/runtime:latest \
node packages/workflow-executor/dist/cli.js --in-memory --json
没有多克
FOREST_ENV_SECRET="your-env-secret" \
FOREST_AUTH_SECRET="your-auth-secret" \
AGENT_URL="https://your-agent-url" \
npx @forestadmin/workflow-executor --in-memory
OAuth2-被保护的 MCP
要锻炼执行者的 OAuth2- 受保护的 MCP 路径端到端,请将其指向 mcp-oauth- test-server 服务器 ——一个独立的OAuth2+MCP服务器,可以模拟刷新-token吊销/旋转,拒绝同意,以及上游403s.