跳转至

在 Google Cloud 上托管 n8n#

本托管指南向您展示如何在 Google Cloud (GCP) 上自托管 n8n。它使用 n8n 与 Postgres 作为数据库后端,使用 Kubernetes 管理必要的资源和反向代理。

前提条件#

自托管知识先决条件

自托管 n8n 需要技术知识,包括:

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

n8n 建议专家用户使用自托管。错误可能导致数据丢失、安全问题和停机。如果您在管理服务器方面经验不足,n8n 建议使用 n8n Cloud

Latest 和 Next 版本

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

当前 latest:1.107.3
当前 next:1.108.0

托管选项#

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

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

本指南中的大多数步骤使用 Google Cloud UI,但您也可以使用 gcloud 命令行工具来完成所有步骤。

创建项目#

GCP 鼓励您创建项目来逻辑地组织资源和配置。从 Google Cloud 控制台为您的 n8n 部署创建一个新项目:选择项目下拉菜单,然后选择 新建项目 按钮。然后选择新创建的项目。在遵循本指南的其他步骤时,请确保选择了正确的项目。

启用 Kubernetes Engine API#

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

选择 启用 来为此项目启用 Kubernetes Engine API。

创建集群#

GKE 服务页面,选择 集群 > 创建。确保选择 "标准" 集群选项,n8n 不能与 "Autopilot" 集群一起工作。您可以保留集群配置的默认设置,除非有任何特定需要更改的内容,如位置。

设置 Kubectl 上下文#

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

克隆配置存储库#

Kubernetes 和 n8n 需要一系列配置文件。您可以从此存储库本地克隆这些文件。以下步骤解释文件配置以及如何添加您的信息。

使用以下命令克隆存储库:

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

并更改目录:

1
cd n8n-hosting/kubernetes

配置 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 清单使用此清单文件中的值发送给应用程序 Pod。

配置 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 云服务的资源值:

  • Start:320mb RAM,10 毫核 CPU 可突发
  • Pro(1万次执行):640mb RAM,20 毫核 CPU 可突发
  • Pro(5万次执行):1280mb RAM,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 记录,并将其指向 n8n 服务的 IP 地址。从您要使用的集群的 服务和入口 菜单项的 端点 列下找到 n8n 服务的 IP 地址。

GKE 和 IP 地址

阅读此 GKE 教程了解有关保留 IP 地址如何与 GKE 和 Kubernetes 资源一起工作的更多详细信息。

删除资源#

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

1
kubectl delete -f .

后续步骤#

此页面是否
💬 微信

🚀 与作者交流

关注公众号
n8n实战笔记公众号
n8n实战笔记
📚 教程 💡 案例 🔧 技巧
添加微信
添加作者微信
1对1 专业指导
⚡ 快答 🎯 定制 🚀 支持