N8N中文教程
部署托管/Installation/Server_setups

在 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.yamlpostgres-deployment.yaml)用于向 Kubernetes 定义 n8n 和 Postgres 应用程序。 这些清单定义了以下内容:

  • 将之前定义的环境变量发送到每个应用 Pod
  • 指定要使用的容器镜像
  • 使用 resources 对象设置资源消耗限制
  • 使用前面定义的 volumesvolumeMounts 来指定容器内挂载卷的路径
  • 扩缩容和重启策略。示例清单中每种 Pod 均只定义了一个实例,你应该根据实际需求进行调整。

服务#

两个服务清单文件(postgres-service.yamln8n-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:尝试 快速入门指南。