n8n v2.0 重大变更
n8n v2.0 即将发布。本文档重点介绍重要的重大变更,以及你应采取的准备过渡措施。这些更新提升了安全性、简化了配置,并移除了遗留功能。
n8n 2.0 的发布延续了 n8n 对提供安全、可靠、生产就绪的自动化平台的承诺。这个主要版本包含重要的安全增强和废弃功能的清理。
行为变更
当子工作流从等待状态恢复时返回预期数据
此前,当父执行(Parent)调用包含导致子执行(Child)进入等待状态的节点的子执行,且父执行被设置为等待子执行完成时,父执行会收到不正确的结果。
例如,当子执行包含超时时间超过 65 秒的 Wait 节点、Webhook 调用、表单提交,或人工审核节点(如 Slack 节点)时,就会进入等待状态。
父工作流:
子工作流:
v1:父执行将子执行的输入作为其输出重现:
v2:父执行收到子执行的结果:
这允许在子工作流中使用人工审核节点,并在父工作流中使用其结果(例如批准或拒绝某个操作)。
迁移路径: 审查所有调用子工作流并期望接收子工作流输入的工作流,将这些工作流更新以适应新行为——父工作流将接收子工作流末尾的输出,而非子工作流的输入。
移除 Start 节点
Start 节点不再受支持。该节点是启动工作流的原始方式,现已被更具针对性的触发节点所取代。
迁移路径: 根据你的工作流使用方式,替换 Start 节点:
- 手动执行: 将 Start 节点替换为 Manual Trigger 节点。
- 子工作流: 如果另一个工作流将此工作流作为子工作流调用,请将 Start 节点替换为 Execute Workflow Trigger 节点并激活工作流。
- 已禁用的 Start 节点: 如果 Start 节点已被禁用,请从工作流中删除它。
保存和发布工作流
新的工作流发布系统取代了原有的激活/停用切换开关。原有的「激活/停用」切换变为新的「发布/取消发布」按钮。此变更让你能够更好地控制工作流变更的上线时机,降低意外将进行中的更改部署到生产环境的风险。更多信息请参阅:保存和发布工作流。
移除已停用服务的节点
以下节点已被移除,因为它们所连接的外部服务已不再可用:
- Spontit 节点
- crowd.dev 节点
- Kitemaker 节点
- Automizy 节点
迁移路径: 如果你的工作流使用了上述任何节点,请更新或删除这些工作流以避免出现错误。
安全
默认阻止 Code 节点访问环境变量
为提升安全性,n8n 将默认阻止 Code 节点访问环境变量。N8N_BLOCK_ENV_ACCESS_IN_NODE 的默认值现在将设置为 true。
迁移路径: 如果你的工作流需要在 Code 节点中访问环境变量,请在环境配置中设置 N8N_BLOCK_ENV_ACCESS_IN_NODE=false。对于敏感数据,建议使用凭据或其他安全方法,而非环境变量。
强制设置文件权限
n8n 将要求对配置文件使用严格的文件权限,以提升安全性。默认情况下,配置文件必须使用 0600 权限,即只有文件所有者才能读写。这种方式类似于 SSH 保护私钥的方式。
迁移路径: 要在 v2.0 之前测试此行为,请设置 N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true。如果你的环境不支持文件权限(例如在 Windows 上),请设置 N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false 以禁用此要求。
默认启用任务执行器
n8n 将默认启用任务执行器以提升安全性和隔离性。所有 Code 节点的执行都将在任务执行器上运行。
迁移路径: 在升级到 v2.0 之前,请设置 N8N_RUNNERS_ENABLED=true 以测试此行为。确保你的基础设施满足运行任务执行器的要求。为获得额外安全保障,可考虑使用外部模式。
从 n8nio/n8n Docker 镜像中移除任务执行器
从 v2.0 开始,主 n8nio/n8n Docker 镜像将不再包含用于外部模式的任务执行器。你必须使用单独的 n8nio/runners Docker 镜像在外部模式下运行任务执行器。
迁移路径: 如果你在 Docker 的外部模式下运行任务执行器,请更新配置以使用 n8nio/runners 镜像替代 n8nio/n8n。
移除基于 Pyodide 的 Python Code 节点和工具
n8n 将移除基于 Pyodide 的 Python Code 节点和工具,并用基于任务执行器的实现来替代,该实现使用原生 Python,安全性和性能更好。从 v2.0 起,你只能配合外部模式下的任务执行器和原生 Python 工具使用 Python Code 节点。
原生 Python Code 节点不支持 Pyodide 版本中提供的内置变量(如 _input)或点访问记法。详情请参阅 Code 节点文档。
原生 Python 工具支持 _query,即 AI 智能体调用工具时传递的输入字符串。
迁移路径: 要继续在 Code 节点中使用 Python,请在外部模式下设置任务执行器,并检查现有的 Python Code 节点和工具是否兼容。
默认禁用 ExecuteCommand 和 LocalFileTrigger 节点
n8n 将默认禁用 ExecuteCommand 和 LocalFileTrigger 节点,因为它们存在安全风险。这些节点允许用户执行任意命令并访问文件系统。
迁移路径: 如果你需要使用这些节点,请通过更新 NODES_EXCLUDE 环境变量,将它们从 n8n 配置中的禁用节点列表中移除。例如,设置 NODES_EXCLUDE="[]" 以启用所有节点,或仅移除你需要的特定节点。
默认要求 OAuth 回调 URL 的身份验证
n8n 将默认要求 OAuth 回调端点进行身份验证。N8N_SKIP_AUTH_ON_OAUTH_CALLBACK 的默认值将从 true(不需要身份验证)更改为 false(需要身份验证)。
迁移路径: 在升级到 v2.0 之前,请设置 N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=false 并测试你的 OAuth 集成,确保它们在启用身份验证的情况下正常工作。
设置 N8N_RESTRICT_FILE_ACCESS_TO 的默认值
n8n 将为 N8N_RESTRICT_FILE_ACCESS_TO 设置一个默认值,以控制文件操作可以在哪里进行。这会影响 ReadWriteFile 和 ReadBinaryFiles 节点。默认情况下,这些节点只能访问 ~/.n8n-files 目录中的文件。
迁移路径: 审查使用文件节点的工作流,确保它们只访问允许目录中的文件。如果需要允许访问其他目录,请将 N8N_RESTRICT_FILE_ACCESS_TO 环境变量设置为你所需的路径。
将 N8N_GIT_NODE_DISABLE_BARE_REPOS 的默认值更改为 true
出于安全原因,Git 节点现在将默认阻止裸仓库。N8N_GIT_NODE_DISABLE_BARE_REPOS 的默认值设置为 true,这意味着除非你更改此设置,否则裸仓库将被禁用。
迁移路径: 如果你的工作流需要使用裸仓库,请在环境配置中设置 N8N_GIT_NODE_DISABLE_BARE_REPOS=false 以启用它们。
数据
停止支持 MySQL/MariaDB
n8n 将不再支持 MySQL 和 MariaDB 作为存储后端,此支持在 v1.0 中已被弃用。为了最佳兼容性和长期支持,请使用 PostgreSQL。MySQL 节点将继续像以前一样受到支持。
迁移路径: 在升级到 v2.0 之前,使用数据库迁移工具将数据从 MySQL 或 MariaDB 迁移到 PostgreSQL 或 SQLite。
移除 SQLite 遗留驱动程序
由于可靠性问题,n8n 将移除遗留 SQLite 驱动程序。连接池驱动程序将成为唯一的 SQLite 驱动程序。连接池驱动程序使用 WAL 模式、单个写入连接和一个读取连接池。我们的基准测试表明,它可以快达 10 倍。
迁移路径: sqlite-pooled 驱动程序将自动成为默认驱动程序。你可以通过将 DB_SQLITE_POOL_SIZE 设置为大于 0 的值来立即启用连接池。默认连接池大小将设置为 2。
移除内存二进制数据模式
n8n 将移除 N8N_DEFAULT_BINARY_DATA_MODE 的 default 模式,该模式在执行期间将执行二进制数据保存在内存中。从 v2 开始,以下选项将可用,以获得更好的性能和稳定性:
filesystem:二进制数据存储在文件系统中(常规模式下的默认选项)。database:二进制数据存储在数据库中(队列模式下的默认选项)。s3:二进制数据存储在兼容 S3 的存储中。
N8N_AVAILABLE_BINARY_DATA_MODES 设置也将被移除,因此现在仅由 N8N_DEFAULT_BINARY_DATA_MODE 确定模式。
迁移路径: 将根据配置自动使用文件系统或数据库模式。确保你的 n8n 实例有足够的磁盘空间来存储二进制数据。详情请参阅二进制数据配置。
配置与环境
升级 dotenv
n8n 使用 dotenv 库从 .env 文件加载环境配置。该库将从 8.6.0 版本升级到最新版本,这可能会改变 .env 文件的解析方式。主要的重大变动包括:
- 反引号支持(#615):如果你的值包含反引号,请用单引号或双引号括起来。
- 多行支持:现在可以使用多行值。
#标记注释的开头:以 # 开头的行将被视为注释。
迁移路径: 查阅 dotenv 变更日志,并更新你的 .env 文件以确保与新版本的兼容性。
移除 n8n --tunnel 选项
n8n --tunnel 命令行选项将在 v2.0 中被移除。
迁移路径: 如果你目前使用 --tunnel 选项进行开发或测试,请切换到其他隧道解决方案,如 ngrok、localtunnel 或 Cloudflare Tunnel。更新你的工作流和文档以反映此变更。
移除 QUEUE_WORKER_MAX_STALLED_COUNT
QUEUE_WORKER_MAX_STALLED_COUNT 环境变量和 Bull 对停滞任务的重试机制将被移除,因为它们经常造成混乱且工作不可靠。
迁移路径: 从你的配置中删除此环境变量。升级后,n8n 将不再自动重试停滞的任务。如果你需要处理停滞任务,请考虑实现自己的重试逻辑或监控。
移除 N8N_CONFIG_FILES
N8N_CONFIG_FILES 环境变量已被移除。
迁移路径: 从你的配置中删除此环境变量。将配置迁移到环境变量、.env 文件或基于 _FILE 的配置中。
CLI 与工作流
替换 CLI 命令 update:workflow
update:workflow CLI 命令将被弃用,并由两个新命令取代,以提供类似功能和更清晰的语义:
publish:workflow,参数为id和versionId(可选)--all参数将被移除,以防止在生产环境中意外发布工作流unpublish:workflow,参数为id和all
迁移路径: 使用新的 publish:workflow 命令按 ID 单独发布工作流,可选择指定版本。对于取消发布,请使用新的 unpublish:workflow 命令。这提供了对工作流发布状态更好的清晰度和控制。
外部钩子(External Hooks)
弃用前端工作流钩子
钩子函数 workflow.activeChange 和 workflow.activeChangeCurrent 将被弃用,由新钩子 workflow.published 替代。当工作流的任何版本被发布时,新钩子将被触发。
迁移路径: 更新代码以使用新的 workflow.published 钩子,而不是 workflow.activeChange 和 workflow.activeChangeCurrent。此钩子提供更一致的行为,并在工作流版本发布时触发。
发布渠道
n8n 已将发布渠道从 latest 和 next 分别重命名为 stable 和 beta。
stable 标签指定最新的稳定版本,beta 标签指定最新的实验性版本。这些标签在 npm 和 Docker Hub 上均可使用。目前,n8n 将继续为发布版本打上 latest 和 next 标签。这些标签将在未来的主要版本中移除。
建议: 将 n8n 版本固定到特定版本号,例如 2.0.0。
反馈问题
如果在更新到 n8n 2.0 时遇到任何问题,请访问社区论坛获取帮助和支持。