在 Google Cloud 上托管 n8n#
本托管指南将向您展示如何在 Google Cloud (GCP) 上自托管 n8n。方案采用 Kubernetes 管理所需资源和反向代理,并使用 Postgres 作为 n8n 的数据库后端。
先决条件#
- gcloud 命令行工具
- gke-gcloud-auth-plugin(需先安装 gcloud CLI)
/// 注意 | 自托管知识前提条件 自托管 n8n 需要具备以下技术知识:
- 服务器和容器的设置与配置
- 管理应用程序资源和扩展
- 服务器和应用程序的安全防护
- 配置 n8n
n8n 建议仅由专业用户进行自托管。配置不当可能导致数据丢失、安全问题和服务中断。如果您缺乏服务器管理经验,n8n 推荐使用 n8n Cloud。 ///
/// 注意 | 最新版和下一版本
n8n 每周都会发布新的次要版本。latest
版本用于生产环境,next
是最新发布的版本。您应该将 next
视为测试版:它可能不稳定。如需报告问题,请使用论坛。
当前 latest
版本: 1.95.3
当前 next
版本: 1.97.1
///
托管选项#
Google Cloud 提供多种适合托管 n8n 的方案,包括 Cloud Run(针对容器运行优化)、Compute Engine(虚拟机)和 Kubernetes Engine(使用 Kubernetes 运行容器)。
本指南采用 Google Kubernetes Engine (GKE) 作为托管方案。使用 Kubernetes 会增加一些复杂性和配置工作,但这是根据需求变化扩展 n8n 的最佳方法。
本指南大部分步骤使用 Google Cloud 界面操作,但您也可以使用 gcloud 命令行工具 来完成所有步骤。
创建项目#
GCP 建议通过创建项目来逻辑组织资源和配置。从 Google Cloud 控制台为您的 n8n 部署新建项目:选择项目下拉菜单,然后点击 新建项目 按钮。接着选择新创建的项目。在继续后续步骤时,请确保已选择正确的项目。
启用 Kubernetes Engine API#
GKE 默认未启用。在顶部搜索栏搜索 "Kubernetes" 并从结果中选择 "Kubernetes Engine"。
点击 启用 按钮为此项目启用 Kubernetes Engine API。
创建集群#
从 GKE 服务页面,选择 Clusters > CREATE。请确保选择"Standard"集群选项,n8n 不支持"Autopilot"集群。除非有特定需求(如更改位置),否则可以保留集群配置为默认值。
设置 Kubectl 上下文#
本指南后续步骤要求将 GCP 实例设置为 Kubectl 上下文。您可以通过打开集群详情页面并选择 CONNECT 来获取集群实例的连接详情。显示的代码片段包含 gcloud CLI 工具的连接字符串。在 gcloud CLI 中粘贴并运行该代码片段,将本地 Kubernetes 设置更改为使用新的 gcloud 集群。
克隆配置仓库#
Kubernetes 和 n8n 需要一系列配置文件。您可以从此仓库本地克隆这些文件。以下步骤将说明文件配置方法以及如何添加您的信息。
使用以下命令克隆仓库:
1 |
|
然后切换到克隆仓库的根目录:
1 |
|
配置 Postgres#
对于大规模 n8n 部署,Postgres 提供了比 SQLite 更强大的数据库后端支持。
创建持久化存储卷#
为了在 Pod 重启时保持数据,Postgres 部署需要一个持久化卷。在 GCP 上运行 Postgres 需要特定的 Kubernetes 存储类。您可以参考本指南了解详情,但 storage.yaml
清单文件已为您创建好配置。您可能需要修改 allowedTopologies
> matchedLabelExpressions
> values
键下的区域设置来指定存储创建位置。默认设置为 us-central
。
1 2 3 4 5 6 7 |
|
Postgres 环境变量配置#
Postgres 需要设置一些环境变量传递给容器中运行的应用程序。
示例文件 postgres-secret.yaml
中包含占位符,您需要替换为自己的值。Postgres 在创建数据库时将使用这些详细信息。
postgres-deployment.yaml
清单文件会使用该清单文件中的值传递给应用程序 Pod。
配置 n8n#
创建文件存储卷#
虽然不是运行 n8n 的必要条件,但在以下情况下需要使用持久化卷:
- 使用与文件交互的节点时(如二进制数据节点)
- 如果需要在重启之间保持手动设置的 n8n 加密密钥。这会在启动时将包含密钥的文件保存到文件存储中
n8n-claim0-persistentvolumeclaim.yaml
清单文件会创建此卷,n8n 部署在 n8n-deployment.yaml
清单文件的 volumes
部分挂载该声明。
1 2 3 4 5 6 |
|
Pod 资源#
Kubernetes 允许您可选地指定应用程序容器所需的最小资源及其运行上限。上面克隆的示例 YAML 文件在 n8n-deployment.yaml
和 postgres-deployment.yaml
的 resources
部分包含以下配置:
1 2 3 4 5 6 7 |
|
这定义了每个容器最小 250MB、最大 500MB 的内存限制,并让 Kubernetes 自动处理 CPU 资源。您可以根据自身需求调整这些值。作为参考,以下是 n8n 云服务产品的资源建议值:
- 入门版: 320MB 内存,10 毫核 CPU 可突发
- 专业版 (1万次执行): 640MB 内存,20 毫核 CPU 可突发
- 专业版 (5万次执行): 1280MB 内存,80 毫核 CPU 可突发
可选:环境变量#
您可以通过环境变量配置 n8n 的设置和行为。
创建 n8n-secret.yaml
文件。有关 n8n 环境变量的详细信息,请参阅环境变量。
部署配置#
两个部署清单文件 (n8n-deployment.yaml
和 postgres-deployment.yaml
) 向 Kubernetes 定义了 n8n 和 Postgres 应用程序。
这些清单定义了以下内容:
- 将定义的环境变量发送到每个应用 Pod
- 指定要使用的容器镜像
- 通过
resources
对象设置资源消耗限制 - 使用之前定义的
volumes
和volumeMounts
来指定容器中挂载卷的路径 - 扩展和重启策略。示例清单中每个 Pod 定义了一个实例。您应根据需求修改此配置。
服务配置#
两个服务清单文件 (postgres-service.yaml
和 n8n-service.yaml
) 使用 Kubernetes 负载均衡器分别通过 5432 和 5678 端口向外部暴露服务。
发送到 Kubernetes 集群#
使用以下命令将所有清单文件发送到集群:
1 |
|
命名空间错误
您可能会看到关于找不到 "n8n" 命名空间的错误信息,因为该资源尚未就绪。您可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:
1 |
|
设置 DNS#
n8n 通常在子域名上运行。在您的 DNS 提供商处为子域名创建一条记录,并将其指向 n8n 服务的 IP 地址。从您要使用的集群的 Services & Ingress 菜单项下的 Endpoints 列中查找 n8n 服务的 IP 地址。
GKE 和 IP 地址
阅读此 GKE 教程 了解有关保留 IP 地址如何与 GKE 和 Kubernetes 资源配合使用的更多详情。
删除资源#
使用以下命令删除清单创建的资源:
1 |
|