在 Azure 上托管 n8n#
本托管指南向您展示如何在 Azure 上自托管 n8n。它使用 n8n 和 Postgres 作为数据库后端,使用 Kubernetes 管理必要的资源和反向代理。
先决条件#
您需要 Azure 命令行工具
自托管知识先决条件
自托管 n8n 需要技术知识,包括:
- 设置和配置服务器和容器
- 管理应用程序资源和扩展
- 保护服务器和应用程序
- 配置 n8n
n8n 建议专业用户进行自托管。错误可能导致数据丢失、安全问题和停机。如果您在管理服务器方面缺乏经验,n8n 建议使用 n8n Cloud。
Latest 和 Next 版本
n8n 每周发布一个新的次要版本。latest
版本用于生产环境。next
是最新的发布版本。您应该将 next
视为测试版:它可能不稳定。要报告问题,请使用论坛。
当前 latest
:1.97.1
当前 next
:1.98.1
托管选项#
Azure 提供了几种适合托管 n8n 的方式,包括 Azure 容器实例(针对运行容器进行了优化)、Linux 虚拟机和 Azure Kubernetes 服务(使用 Kubernetes 运行的容器)。
本指南使用 Azure Kubernetes 服务 (AKS) 作为托管选项。使用 Kubernetes 需要一些额外的复杂性和配置,但这是随着需求变化扩展 n8n 的最佳方法。
本指南中的步骤混合使用 Azure UI 和命令行工具,但您可以使用其中任何一种来完成大多数任务。
打开 Azure Kubernetes 服务#
从 Azure 门户选择 Kubernetes services。
创建集群#
从 Kubernetes 服务页面,选择 Create > Create a Kubernetes cluster。
您可以选择任何适合您需求的配置选项,完成后选择 Create。
设置 Kubectl 上下文#
本指南中的其余步骤要求您将 Azure 实例设置为 Kubectl 上下文。您可以通过打开集群实例的详细信息页面,然后点击 Connect 按钮来找到集群实例的连接详细信息。生成的代码片段显示了要粘贴并运行到终端中的步骤,以更改您的本地 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
清单使用此清单文件中的值发送到应用程序 pod。
配置 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 RAM,10 毫核 CPU 可突发
- 专业版 (10k 执行): 640mb RAM,20 毫核 CPU 可突发
- 专业版 (50k 执行): 1280mb RAM,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 记录,并将其指向 n8n 服务的 IP 地址。从您要使用的集群的 Services & ingresses 菜单项下的 External IP 列中找到 n8n 服务的 IP 地址。您需要将 n8n 端口 "5678" 添加到 URL 中。
AKS 的静态 IP 地址
阅读本教程了解有关如何在 AKS 中使用静态 IP 地址的更多详细信息。
删除资源#
使用以下命令删除清单创建的资源:
1 |
|