在Azure上托管n8n#
本托管指南向您展示如何在Azure上自托管n8n。它使用n8n搭配Postgres作为数据库后端,并通过Kubernetes来管理必要的资源和反向代理。
先决条件#
你需要 The Azure command line tool
自托管知识先决条件
自托管n8n需要具备以下技术知识:
- 设置和配置服务器及容器
- 管理应用程序资源和扩展
- 保护服务器和应用程序安全
- 配置n8n
n8n 建议专家用户自行托管。操作失误可能导致数据丢失、安全问题和服务中断。如果您没有服务器管理经验,n8n 推荐使用 n8n Cloud。
最新版本和下一版本
n8n 每周都会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新发布的版本。您应该将 next 视为测试版:它可能不稳定。如需报告问题,请使用 论坛。
当前 latest: 1.92.2
当前 next: 1.93.0
托管选项#
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需要一系列配置文件。您可以从此代码库克隆这些文件。以下步骤将告诉您每个文件的配置内容以及需要修改的部分。
使用以下命令克隆仓库:
1 | |
并将目录切换到您克隆的代码库根目录:
1 | |
配置Postgres#
对于大规模n8n部署,Postgres提供了比SQLite更强大的数据库后端。
配置持久化存储的卷#
为了在Pod重启之间保持数据,Postgres部署需要一个持久化存储卷。默认存储类适合此用途,并在postgres-claim0-persistentvolumeclaim.yaml清单文件中定义。
专用存储类
如果您对存储类别有特殊或更高要求,请参阅文档中Azure提供的更多选项。
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 | |
Pod 资源#
Kubernetes允许您可选地指定应用程序容器所需的最小资源及其运行上限。上面克隆的示例YAML文件在n8n-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提供商处为该子域名创建一条DNS记录,并将其指向n8n服务的IP地址。你可以从集群的服务与入口菜单项下的外部IP列中找到要使用的n8n服务的IP地址。你需要在URL中添加n8n端口号"5678"。
AKS 的静态 IP 地址
阅读本教程了解如何在AKS中使用静态IP地址的更多详情。
删除资源#
使用以下命令删除由清单创建的资源:
1 | |