跳到主要内容

在 Azure 上托管 n8n#

本托管指南将展示如何在 Azure 上自托管 n8n。方案采用 n8n 搭配 Postgres 作为数据库后端,并通过 Kubernetes 管理必要资源及反向代理。

前置要求#

需要安装 Azure 命令行工具

自托管知识储备

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

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

n8n 建议仅专业用户进行自托管。操作失误可能导致数据丢失、安全问题和服务中断。若缺乏服务器管理经验,推荐使用 n8n 云服务

最新版与预览版说明

n8n 每周会发布新的次要版本。latest 为生产环境适用版本,next 则是最新发布的版本。请将 next 视为测试版:可能存在不稳定情况。问题反馈请使用社区论坛

当前 latest 版本:1.119.2
当前 next 版本:1.119.3

托管方案选择#

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

本指南采用 Azure Kubernetes 服务 (AKS) 作为托管方案。虽然使用 Kubernetes 会增加一定复杂性和配置工作,但这是根据需求变化扩展 n8n 的最佳方案。

本指南中的步骤将混合使用 Azure 界面和命令行工具,但您可选择任一方式完成大多数任务。

打开 Azure Kubernetes 服务#

通过 Azure 门户 选择 Kubernetes 服务

创建集群#

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

可根据需求选择任意配置选项,完成后选择 创建

设置 Kubectl 上下文#

本指南后续步骤需将 Azure 实例设为 Kubectl 上下文。通过打开集群实例的详情页面并点击 连接 按钮,可找到连接信息。生成的代码片段展示了在终端中粘贴运行的步骤,可将本地 Kubernetes 设置切换至新集群。

克隆配置仓库#

Kubernetes 和 n8n 需要一系列配置文件。可从该仓库克隆这些文件。后续步骤将说明各文件的配置功能及需修改的内容。

使用以下命令克隆仓库:

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

并切换目录:

cd n8n-hosting/kubernetes

配置 Postgres#

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

配置持久化存储卷#

为确保 Pod 重启时数据不丢失,Postgres 部署需要持久化存储卷。默认存储类型适用于此场景,其定义位于 postgres-claim0-persistentvolumeclaim.yaml 清单文件中。

专用存储类型说明

若对存储类型有特殊或更高要求,请查阅文档了解 Azure 提供的相关选项

Postgres 环境变量#

需设置部分环境变量以传递给容器内运行的应用程序。

示例文件 postgres-secret.yaml 包含需替换为实际值的占位符。Postgres 在创建数据库时将使用这些配置信息。

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

配置 n8n#

创建文件存储卷#

虽然非 n8n 运行必需,但持久化存储卷在以下场景不可或缺:

  • 使用需要操作文件的节点时(例如二进制数据节点)
  • 需在重启时保持手动设置的 n8n 加密密钥持久化。系统启动期间会将含密钥的文件保存至文件存储

n8n-claim0-persistentvolumeclaim.yaml 清单负责创建此存储卷,n8n 部署通过 n8n-deployment.yaml 清单的 volumes 章节挂载该声明。


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

Pod 资源#

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


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-deployment.yamlpostgres-deployment.yaml)用于向Kubernetes定义n8n和Postgres应用。

这些清单文件具体定义了:

  • 将预设的环境变量传递至各应用Pod
  • 指定使用的容器镜像
  • 通过 resources 对象设置资源消耗限制
  • 使用先前定义的 volumesvolumeMounts 配置容器内的存储卷挂载路径
  • 扩缩容与重启策略。示例清单中每个Pod仅定义单个实例,请根据实际需求进行调整

服务配置#

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

发送至Kubernetes集群#

通过以下命令将所有清单文件发送至集群:

kubectl apply -f .

命名空间错误

您可能会看到关于找不到“n8n”命名空间的错误提示,这是因为相关资源尚未准备就绪。您可以重新执行相同命令,或先通过以下命令应用命名空间清单:

kubectl apply -f namespace.yaml

配置DNS#

n8n通常运行在子域名上。请通过您的DNS服务商为子域名创建DNS记录,并将其指向n8n服务的IP地址。从所需集群的服务与入口菜单项中,在外部IP列下查找n8n服务的IP地址。您需要在URL中添加n8n端口号“5678”。

AKS静态IP地址配置

阅读本教程了解有关在AKS中使用静态IP地址的更多详细信息。

删除资源#

使用以下命令移除通过清单文件创建的资源:

kubectl delete -f .

后续步骤#