在 Azure 上托管 n8n#
本托管指南将指导你如何在 Azure 上自托管 n8n。该方案使用 Kubernetes 管理所需资源和反向代理,并以 Postgres 作为数据库后端运行 n8n。
前提条件#
你需要安装 Azure 命令行工具
自托管知识前提 自托管 n8n 需要一定的技术知识,包括:
- 搭建和配置服务器与容器
- 管理应用资源及扩展
- 保障服务器和应用的安全
- 配置 n8n
n8n 建议专家用户自行托管。操作失误可能导致数据丢失、安全问题和系统停机。如果您没有管理服务器的经验,n8n 推荐使用 n8n Cloud。
最新版本与下一个版本
n8n 每周通常会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的发布版本,应视为测试版(beta):它可能不稳定。如需报告问题,请使用 论坛。
当前 latest:1.115.2
当前 next:1.116.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
---|---
然后进入目录:1
| ```
cd---|---
配置 Postgres#
对于大规模的 n8n 部署,Postgres 相比 SQLite 提供了更强大的数据库后端支持。
配置持久化存储卷#
为了在 Pod 重启之间保留数据,Postgres 部署需要一个持久化卷(persistent volume)。默认的存储类(storage class)适用于此目的,并已在 postgres-claim0-persistentvolumeclaim.yaml 清单文件中定义。
高级存储类
如果对存储类有特殊或更高的要求,请参阅 Azure 文档中关于存储类选项的更多内容。
Postgres 环境变量#
Postgres 需要设置一些环境变量,以便传递给容器中运行的应用程序。
示例文件 postgres-secret.yaml 包含占位符,您需要用自己的值替换。Postgres 在创建数据库时将使用这些信息。
随后,postgres-deployment.yaml 清单文件会引用该清单中的值并将其发送给应用 Pod。
配置 n8n#
创建文件存储卷#
尽管并非运行 n8n 所必需,但在以下情况下必须使用持久化卷:
- 使用涉及文件操作的节点,例如二进制数据节点(binary data node)。
- 如果希望在重启之间保留 手动设置的 n8n 加密密钥。这会在启动时将包含密钥的文件保存到文件存储中。
n8n-claim0-persistentvolumeclaim.yaml 清单文件会创建该持久化卷声明(PersistentVolumeClaim),而 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.yaml` 文件的 `resources` 部分包含以下内容:1 2 3 4 5 6 7
| ```
…
resources:
requests:
memory: "250Mi"
limits:
memory: "500Mi"
…---|--- 这定义了每个容器最少 250MB、最多 500MB 的内存,并让 Kubernetes 自动管理 CPU 资源。你可以根据自身需求修改这些值。作为参考,以下是 n8n 云服务各版本的资源配置:
- Start(入门版):320MB 内存,10 millicore CPU(可突发)
- Pro(10k 执行次数):640MB 内存,20 millicore CPU(可突发)
- Pro(50k 执行次数):1280MB 内存,80 millicore CPU(可突发)
可选:环境变量#
你可以使用环境变量来配置 n8n 的设置和行为。
创建一个 n8n-secret.yaml 文件。有关 n8n 环境变量的详细信息,请参考 环境变量文档。
部署(Deployments)#
两个部署清单文件(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| ``` kubectl
---|---
命名空间错误
你可能会看到关于找不到 "n8n" 命名空间的错误消息,这是因为相关资源尚未就绪。你可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:1
| ```
kubectl apply -f namespace.yaml设置 DNS#
n8n 通常在一个子域名下运行。请在你的 DNS 提供商处为该子域名创建一条 DNS 记录,并将其指向 n8n 服务的 IP 地址。你可以在所选集群的 Services & ingresses(服务与入口)菜单项中,于 External IP(外部 IP)列找到 n8n 服务的 IP 地址。你需要在 URL 中添加 n8n 的端口号 "5678"。
AKS 中的静态 IP 地址 阅读本教程 了解如何在 AKS 中使用静态 IP 地址的更多细节。
删除资源#
使用以下命令删除由清单文件创建的资源:
1| ``` kubectl delete -f .
## 下一步#
* 进一步了解 配置 和 扩展 n8n。
* 或者开始探索使用 n8n:尝试 快速入门指南。