跳至内容

在Google Cloud上托管n8n#

本托管指南向您展示如何在Google云平台(GCP)上自托管n8n。该方案使用Postgres作为数据库后端,通过Kubernetes管理所需资源及反向代理来运行n8n。

先决条件#

自托管知识先决条件

自托管n8n需要具备以下技术知识:

  • 设置和配置服务器及容器
  • 管理应用程序资源和扩展
  • 保护服务器和应用程序安全
  • 配置n8n

n8n 建议专家用户自行托管。操作失误可能导致数据丢失、安全问题和服务中断。如果您没有服务器管理经验,n8n 推荐使用 n8n Cloud

最新版本和下一版本

n8n 每周都会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新发布的版本。您应该将 next 视为测试版:它可能不稳定。如需报告问题,请使用 论坛

当前 latest: 1.92.2
当前 next: 1.93.0

托管选项#

Google Cloud 提供多种适合托管n8n的选项,包括Cloud Run(针对运行容器优化)、Compute Engine(虚拟机)和Kubernetes Engine(使用Kubernetes运行的容器)。

本指南使用Google Kubernetes Engine (GKE)作为托管选项。使用Kubernetes需要一些额外的复杂性和配置,但这是根据需求变化扩展n8n的最佳方法。

本指南中的大部分步骤使用Google Cloud界面操作,但你也可以使用gcloud命令行工具来完成所有步骤。

创建项目#

GCP建议您创建项目以逻辑性地组织资源和配置。从您的Google云控制台为n8n部署创建一个新项目:选择项目下拉菜单,然后点击新建项目按钮。接着选择新创建的项目。在按照本指南的其他步骤操作时,请确保已选择正确的项目。

启用Kubernetes引擎API#

GKE默认未启用。在顶部搜索栏中搜索"Kubernetes",然后从结果中选择"Kubernetes Engine"。

选择启用为此项目启用Kubernetes引擎API。

创建集群#

GKE服务页面中,选择集群 > 创建。请确保选择"标准"集群选项,n8n不适用于"Autopilot"集群。除非有特别需要更改的配置(如位置),否则可以保留集群的默认配置。

设置Kubectl上下文#

本指南的其余步骤要求您将GCP实例设置为Kubectl上下文。您可以通过打开集群实例的详细信息页面并选择连接来查找集群实例的连接详细信息。显示的代码片段展示了gcloud CLI工具的连接字符串。将该代码片段粘贴并运行在gcloud CLI中,以更改本地Kubernetes设置来使用新的gcloud集群。

克隆配置仓库#

Kubernetes和n8n需要一系列配置文件。您可以从此代码库本地克隆这些文件。以下步骤将说明文件配置方法以及如何添加您的信息。

使用以下命令克隆仓库:

1
git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b gcp

并将目录切换到您克隆的代码库根目录:

1
cd n8n-kubernetes-hosting

配置Postgres#

对于大规模n8n部署,Postgres提供了比SQLite更强大的数据库后端。

为持久存储创建卷#

为了在Pod重启时保持数据,Postgres部署需要一个持久化存储卷。在GCP上运行Postgres需要特定的Kubernetes存储类。您可以阅读本指南了解详情,但storage.yaml清单会为您创建它。您可能需要更改allowedTopologies > matchedLabelExpressions > values键下的区域来创建存储。默认情况下,它们被设置为us-central

1
2
3
4
5
6
7

allowedTopologies:
  - matchLabelExpressions:
      - key: failure-domain.beta.kubernetes.io/zone
        values:
          - us-central1-b
          - us-central1-c

Postgres环境变量#

Postgres需要设置一些环境变量传递给容器中运行的应用程序。

示例文件 postgres-secret.yaml 包含需要替换为您自己值的占位符。Postgres在创建数据库时将使用这些详细信息。

postgres-deployment.yaml 清单文件随后会使用该清单文件中的值发送到应用容器组。

配置n8n#

创建用于文件存储的卷#

虽然不是运行n8n所必需的,但在以下情况下需要使用持久化存储卷:

  • 使用与文件交互的节点,例如二进制数据节点。
  • 如果您希望在重启之间保留手动n8n加密密钥。这会在启动时将包含密钥的文件保存到文件存储中。

n8n-claim0-persistentvolumeclaim.yaml 清单文件创建了这个持久卷声明,而n8n部署则在n8n-deployment.yaml清单文件的volumes部分挂载了该声明。

1
2
3
4
5
6

volumes:
  - name: n8n-claim0
    persistentVolumeClaim:
      claimName: n8n-claim0

Pod 资源#

Kubernetes允许您可选地指定应用程序容器所需的最小资源及其运行上限。上面克隆的示例YAML文件在n8n-deployment.yamlpostgres-deployment.yaml文件的resources部分包含以下内容:

1
2
3
4
5
6
7

resources:
  requests:
    memory: "250Mi"
  limits:
    memory: "500Mi"
    

这定义了每个容器的最小内存为250MB,最大为500MB,并让Kubernetes管理CPU。您可以根据自身需求调整这些值。作为参考,以下是n8n云服务提供的资源配置值:

  • 启动: 320MB内存, 10毫核CPU可突发
  • 专业版(1万次执行): 640MB内存,20毫核CPU可突增
  • 专业版(5万次执行):1280MB内存,80毫核CPU可突增

可选:环境变量#

您可以通过环境变量配置n8n的设置和行为。

创建一个n8n-secret.yaml文件。有关n8n环境变量的详细信息,请参阅环境变量

部署#

这两个部署清单(n8n-deployment.yamlpostgres-deployment.yaml)定义了要部署到Kubernetes的n8n和Postgres应用。

清单定义了以下内容:

  • 将定义的环境变量发送到每个应用程序Pod
  • 定义要使用的容器镜像
  • 使用resources对象设置资源消耗限制
  • 之前定义的volumesvolumeMounts用于指定容器中挂载卷的路径。
  • 扩展和重启策略。示例清单中定义了每个Pod的一个实例。您应根据需求调整此配置。

服务#

两个服务清单(postgres-service.yamln8n-service.yaml)分别通过Kubernetes负载均衡器使用5432和5678端口将服务暴露给外部。

发送到Kubernetes集群#

使用以下命令将所有清单发送到集群:

1
kubectl apply -f .

命名空间错误

您可能会看到一条关于找不到"n8n"命名空间的错误信息,因为该资源尚未就绪。您可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:

1
kubectl apply -f namespace.yaml

设置DNS#

n8n通常在一个子域名上运行。请在你的DNS提供商处为该子域名创建一条DNS记录,并将其指向n8n服务的IP地址。你可以从集群的服务与入口菜单项下的端点列中找到要使用的n8n服务的IP地址。

GKE 和 IP 地址

阅读这篇GKE教程了解更多关于预留IP地址如何与GKE和Kubernetes资源配合工作的详细信息。

删除资源#

使用以下命令删除由清单创建的资源:

1
kubectl delete -f .

下一步#

优云智算