Skip to content

在 Azure 上托管 n8n#

本托管指南将展示如何在 Azure 上自托管 n8n。方案使用 Kubernetes 管理必要资源和反向代理,将 n8n 与 Postgres 作为数据库后端结合使用。

先决条件#

您需要安装 Azure 命令行工具

/// 注意 | 自托管知识前提条件 自托管 n8n 需要具备以下技术知识:

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

n8n 建议仅由专业用户进行自托管。配置不当可能导致数据丢失、安全问题和服务中断。如果您缺乏服务器管理经验,n8n 推荐使用 n8n Cloud。 ///

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

当前 latest 版本: 1.95.3
当前 next 版本: 1.97.1 ///

托管选项#

Azure 提供多种适合托管 n8n 的方式,包括 Azure 容器实例(针对容器运行优化)、Linux 虚拟机以及 Azure Kubernetes 服务(使用 Kubernetes 运行容器)。

本指南采用 Azure Kubernetes 服务 (AKS) 作为托管方案。使用 Kubernetes 需要一些额外的复杂性和配置,但这是根据需求变化扩展 n8n 的最佳方法。

本指南中的步骤混合使用了 Azure UI 和命令行工具,但您可以使用其中任意一种方式完成大多数任务。

打开 Azure Kubernetes 服务#

Azure 门户 选择 Kubernetes 服务

创建集群#

在 Kubernetes 服务页面,选择 创建 > 创建 Kubernetes 集群

您可以选择适合需求的任何配置选项,完成后选择 创建

设置 Kubectl 上下文#

本指南后续步骤要求您将 Azure 实例设置为 Kubectl 上下文。您可以通过打开集群实例的详情页面,然后点击 连接 按钮来查找集群实例的连接详细信息。生成的代码片段显示了将本地 Kubernetes 设置更改为使用新集群所需的粘贴和运行步骤。

克隆配置仓库#

Kubernetes 和 n8n 需要一系列配置文件。您可以从此仓库克隆这些文件。以下步骤将说明每个文件的配置作用以及您需要修改的内容。

使用以下命令克隆仓库:

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

然后切换到克隆仓库的根目录:

1
cd azure

配置 Postgres#

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

配置持久化存储卷#

为了在 Pod 重启时保持数据,Postgres 部署需要一个持久化卷。默认的存储类适合此用途,定义在 postgres-claim0-persistentvolumeclaim.yaml 清单中。

专用存储类

如果您对存储类有特殊或更高要求,请参阅 Azure 文档中提供的选项

Postgres 环境变量#

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

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

postgres-deployment.yaml 清单文件随后会使用此清单文件中的值传递给应用程序 Pod。

配置 n8n#

创建文件存储卷#

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

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

n8n-claim0-persistentvolumeclaim.yaml 清单会创建此存储卷,而 n8n Deployment 在 n8n-deployment.yaml 清单的 volumes 部分挂载该声明:

1
2
3
4
5
6

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

Pod 资源分配#

Kubernetes 允许可选地指定应用容器所需的最小资源和运行上限。上面克隆的示例 YAML 文件在 n8n-deployment.yamlresources 部分包含以下配置:

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) 定义了将 n8n 和 Postgres 应用部署到 Kubernetes 的配置。

这些清单文件定义了以下内容:

  • 将定义的环境变量发送到每个应用 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 地址。从集群的 Services & ingresses 菜单项下的 External IP 列中查找 n8n 服务的 IP 地址。您需要在 URL 中添加 n8n 端口 "5678"。

AKS 静态 IP 地址

有关如何在 AKS 中使用静态 IP 地址的更多详情,请阅读本教程

删除资源#

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

1
kubectl delete -f .

后续步骤#