n8n v2.0 正式发布:架构重构与安全升级全解析
n8n 2.0 版本现已正式发布,标志着该平台在自动化编排领域迈入了一个新的安全与可靠性阶段。此次大版本更新不仅清理了大量遗留功能,更通过底层架构的重构,显著提升了系统的生产就绪能力(Production-Ready)。对于依赖 n8n 构建复杂工作流的开发者而言,这是一次必须认真对待的升级。
核心架构变更与行为调整
子工作流数据返回机制优化
在 n8n 1.x 版本中,当父工作流调用子工作流且子工作流进入等待状态(如等待 Webhook、表单提交或 HITL 节点)时,父工作流往往会错误地接收到子工作流的输入数据而非最终结果。
n8n 2.0 的新行为: 当子工作流从等待状态恢复时,父工作流将直接接收子工作流的最终执行结果。这一变化使得在子工作流中嵌入人机协作(Human-in-the-loop)节点成为可能,审批结果可直接反馈至父工作流进行后续处理。
Start 节点移除
原有的通用 Start 节点已被移除,取而代之的是更细粒度的触发节点。
- 手动执行:请使用
Manual Trigger节点。 - 子工作流调用:请使用
Execute Workflow Trigger节点并激活工作流。 - 已禁用节点:直接从工作流中删除。
工作流发布系统升级
旧的“激活/停用”(Active/Inactive)开关已被替换为更精细的“发布/取消发布”(Publish/Unpublish)机制。这使得团队能够更严格地控制工作流变更上线的时间,有效降低将未完成代码部署到生产环境的风险。
安全性与运行环境重大升级
强制启用任务运行器 (Task Runners)
为提升安全性与隔离性,n8n 2.0 默认启用 Task Runners。所有 Code 节点的执行将在此隔离环境中运行,防止恶意代码影响主进程。
关键影响:
$evaluateExpression()在Code节点中不再可用:由于安全模式禁用了字符串作为代码的评估,该便捷方法在 Code 节点内将返回null或报错。表达式逻辑需移至Edit Fields节点或直接在 JavaScript 中编写。- Docker 镜像分离:主镜像
n8nio/n8n不再包含任务运行器,需单独使用n8nio/runners镜像在外部模式下运行任务。
环境变量访问限制
默认情况下,Code 节点将被禁止访问环境变量(N8N_BLOCK_ENV_ACCESS_IN_NODE 默认为 true)。开发者应优先使用凭证(Credentials)管理敏感数据,若必须访问环境变量,需在配置中显式关闭此限制。
配置文件权限强制
为遵循最小权限原则,配置文件(settings.json)的权限将被强制设为 0600,仅文件所有者可读写,类似于 SSH 对私钥的保护机制。
已移除的节点
由于外部服务不再可用,以下节点已被彻底移除,使用这些节点的工作流将报错:
- Spontit
- crowd.dev
- Kitemaker
- Automizy
开发者迁移指南
- Code 节点逻辑重构:将
$evaluateExpression()调用替换为原生 JavaScript 逻辑,或将其前置到Edit Fields节点处理。 - Docker 部署调整:若使用外部模式,需同时拉取并配置
n8nio/runners镜像。 - 环境配置检查:检查
N8N_BLOCK_ENV_ACCESS_IN_NODE和N8N_RUNNERS_ENABLED等环境变量设置。 - 测试验证:建议在测试环境开启
N8N_RUNNERS_INSECURE_MODE=true进行短期验证,但生产环境严禁使用此模式。
n8n 团队表示,此次更新旨在打造一个更加健壮、安全且易于维护的自动化平台,鼓励开发者拥抱新的安全范式。