系统架构我们所要搭建的这套服务有着如图所示的系统关系。
完整部署流程Supabase: 创建数据库首先我们要在 Supabase 上注册一个账号,登入之后,点击 New project 创建新的数据库,命名为 n8n,注意要记住创建流程中输入的密码。 定位到 Project settings / Database / Connection info,将图中的信息记录下来即可进入下一步。 GitHub: 创建 Repo在 Railway 上部署服务最便捷的方式就是关联一个 GitHub repo,你可以 fork 我准备好的: reorx/n8n-on-railway
这个 repo 的内容非常简单,其中最核心的就是
它的作用是基于 reorx/n8n-custom 定义新的镜像。Railway 会使用这个 reorx/n8n-custom 是我个人维护的镜像,基于版本 0.193.5 构建 1,目的是提前使用 PR 的代码,以解决无法接入 Twitter 的问题。如果你对安全性有所担忧,也可以使用官方镜像 n8nio/n8n。
Repo 中还有 Railway: 创建 Project注册或登入 Railway,点击 New Project,选择 Deploy from GitHub repo,找到上一步创建的 repo 名字(n8n-on-railway)并选择,在下一个界面点击 Deploy now 开始部署。 修改域名不需要等待部署完成,我们直接进入 Project,点击代表 service 的卡片,打开 Settings。
可以看到 Railway 已经为我们的服务分配了一个
下图是我的域名 设置环境变量确认域名后,我们要切换到 Variables 页面对环境变量进行设置。
点击 Raw Editor 按钮,在弹出的输入框中粘贴 GitHub repo 中的
以上这些变量均可在官方文档 Configuration 中找到详细说明。 编辑完成后,点击 Update Variables,Railway 会开始新的部署任务。至此,我们就完成了 n8n 在 Railway 上使用 Supabase 数据库的部署流程。 初始化和数据迁移如果一切正常,等 Railway 的部署任务完成后,即可通过 修改域名 环节所确定的域名打开 n8n 网站。第一次访问时,n8n 会引导用户创建管理员账号,安全起见,请尽快完成这一步骤。 Workflow 导入如果你有已经备份好的 workflow,此时就可以进行导入了。先创建一个空的 workflow,然后在左侧菜单点击 “Import from File”,选择已有 workflow 的 json 文件即可完成导入。导入后,原 workflow 所使用的 credentials 会失效,需要手动选择或创建新的 credentials 才可以正常使用。 reorx/n8n-workflows 是我自己使用的一些 workflow,供读者参考。 Workflow 导出出于备份或分享的目的,我们可以导出 n8n 的 workflows。下面讲解如何将运行在 Railway 中的 n8n 的 workflows 进行导出。
这个导出方法同样适用于 NAS Docker 中部署的 n8n,只需要去掉 Railway 相关的步骤即可。 接入第三方服务n8n 的强大在于它内置了很多线上服务的 Integrations,仅需简单的配置即可完成接入。虽然官方有文档说明,但仍然有一些不大不小的坑,这里记录下我的一些配置技巧,希望能帮助你节省一些时间。 Google 的接入相对比较复杂,请跟随文档 Integrations: Google 的详细说明进行操作。这里只说下文档中没有提到的一个注意事项。
在创建 OAuth consent screen 后,要将 Publishing status 设为 Production,否则一周后 OAuth token 就会过期 5。虽然这种方式会导致 OAuth 认证页面显示应用未通过审核的警告(点击左下角 “Go to …” 可以绕过),但总好过每周重新连接一次的麻烦。
只有当服务的域名为自定义域名且为 authorized domain 时才可以将 Publishing status 设为 Production,否则一段时间后 OAuth 将不可用,Verification Status 异常。关于如何将自己的域名在 Google 进行验证,请参考 Verify your domain (host-specific steps) - Google Workspace Admin Help. Twitter 由于这两年来 Developer Portal 的大幅改造,实际操作中可能与文档 Integrations: Twitter 有许多不一致,但只要确保以下几点,应该可以避免大部分问题。
Pinboardn8n 没有内置 Pinboard 接入,不过 Pinboard API 设计非常简洁,我们可以手动实现接入。
创建 credential 时选择 “Query Auth”,向 “Name” 填入 GitHubn8n 虽然有内置的 GitHub 接入,但并非所有 API 都被支持,因此我建议使用 HTTP Request 手动配置验证。 GitHub 提供 PAT (Personal Access Token),与 Pinboard 的 API Token 类似,相比 OAuth 更容易配置。
GitHub API 支持在 HTTP Header 中通过
首先打开 https://github.com/settings/tokens, 点击 Generate new token,勾选所需权限。具体根据所要请求的 API 来决定,一般来说至少要勾上
然后在 n8n 中创建 Header Auth,“Name” 填写 总结随着 PaaS 和 Serverless 平台的兴起,在很多场景下它们都能够代替 NAS 成为自托管服务的最佳选择。个人使用免费额度一般都绰绰有余,无论对于想要快速试验新产品的开发者,还是喜欢体验 SaaS 服务的业余爱好者,现在都是一个非常好的时代。 之前将 n8n 部署在 NAS 上平均每天会有几十条错误报警,一部分是 SQLite 在机械硬盘上频繁读写触发事务锁竞争,一部分则是代理不稳定造成网络访问失败。在迁移到 Railway + Supabase 的方案后,两个问题都得到了解决。PostgreSQL 有着更好的连接和并发性能;而 Railway 的运行环境本身就处于外网,自然也不会遇到代理失效的问题。 Railway 也可以提供包含 PostgreSQL 的全托管方案,但独立运行 PostgreSQL 不仅资源消耗大,显著占用免费额度,而且不如 Supabase 这种专业的 DaaS 稳定和安全。Cloudflare 的免费 CDN 服务,补充了 Railway 分发能力的不足,也降低了出口带宽的成本。几个平台相互搭配,取长补短,使新的方案可以用最低的成本实现最佳的性能和体验。 (责任编辑:IT) |