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

在亚马逊云服务上托管 n8n#

本托管指南将向您展示如何使用亚马逊云服务(Amazon Web Services, AWS)自行托管 n8n。该方案采用 Kubernetes 来管理所需资源和反向代理,并以 Postgres 作为 n8n 的数据库后端。

托管选项#

AWS 提供了多种适合托管 n8n 的方式,包括 EC2(虚拟机)和 EKS(基于 Kubernetes 运行的容器)。

本指南选择 EKS 作为托管方案。尽管使用 Kubernetes 会增加一定的复杂性和配置步骤,但它是应对需求变化、实现 n8n 水平扩展的最佳方法。

前提条件#

本指南中的操作结合使用 AWS 管理控制台(UI)以及 EKS 的命令行工具 eksctl。

虽然 eksctl 的文档中未明确提及,但您还需要 安装 AWS CLI 工具,并配置该工具的身份验证。

自行托管的知识要求

自行托管 n8n 需要具备一定的技术知识,包括:

  • 服务器与容器的搭建和配置
  • 应用资源管理与扩展
  • 服务器与应用的安全防护
  • n8n 的配置

n8n 建议专家用户采用自托管(self-hosting)方式。操作失误可能导致数据丢失、安全问题和系统停机。如果您没有管理服务器的经验,n8n 推荐使用 n8n Cloud。

最新版本与下一个版本

n8n 每周通常会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的发布版本,应被视为测试版(beta):它可能不稳定。如需报告问题,请使用 论坛。

当前 latest:1.115.2 当前 next:1.116.1

创建集群#

使用 eksctl 工具创建集群,通过以下命令指定名称和区域:

1

| ``` eksctl


---|---
创建集群可能需要一些时间。
集群创建完成后,eksctl 会自动将 kubectl 上下文设置为该集群。

## 克隆配置仓库#

Kubernetes 和 n8n 需要一系列配置文件。您可以从 此仓库 克隆这些文件。后续步骤将说明每个文件的作用以及需要修改的设置。

使用以下命令克隆仓库:

1

| ```
git

---|--- 然后切换目录:

1

| ``` cd


---|---

## 配置 Postgres#

对于大规模的 n8n 部署,Postgres 相比 SQLite 提供了更稳健的数据库后端。

### 配置持久化存储卷#

为了在 Pod 重启之间保留数据,Postgres 部署需要一个持久化卷(persistent volume)。默认的 AWS 存储类 gp3 适合此用途。该配置定义在 `postgres-claim0-persistentvolumeclaim.yaml` 清单文件中。

1 2 3 4 5 6

| ```

spec:
  storageClassName: gp3
  accessModes:
    - ReadWriteOnce

---|---
### Postgres 环境变量#
Postgres 需要设置一些环境变量,以便传递给容器中运行的应用程序。
示例文件 `postgres-secret.yaml` 包含占位符,你需要用自己的用户信息和数据库名称替换这些值。
随后,`postgres-deployment.yaml` 清单文件会使用该清单中的值,将其传递给应用的 Pod。

## 配置 n8n#
### 创建用于文件存储的卷#
虽然对于运行 n8n 并非必需,但使用持久化卷(persistent volumes)有助于保留使用 n8n 期间上传的文件。此外,如果你希望在重启之间保留 手动配置的 n8n 加密密钥,也建议使用持久化卷,因为启动时会将包含密钥的文件保存到文件存储中。
`n8n-claim0-persistentvolumeclaim.yaml` 清单文件用于创建此卷,而 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 内存,CPU 资源则由 Kubernetes 自动管理。你可以根据自身需求调整这些值。作为参考,以下是 n8n 云服务各版本的资源配置:
  * **Start(入门版)**:320MB RAM,10 millicore CPU(可突发)
  * **Pro(10k 执行次数)**:640MB RAM,20 millicore CPU(可突发)
  * **Pro(50k 执行次数)**:1280MB RAM,80 millicore CPU(可突发)

可选:环境变量#

你可以使用环境变量来配置 n8n 的设置和行为。 创建一个 n8n-secret.yaml 文件。有关 n8n 环境变量的详细信息,请参考 环境变量。

部署#

两个部署清单文件(n8n-deployment.yamlpostgres-deployment.yaml)用于向 Kubernetes 定义 n8n 和 Postgres 应用程序。 这些清单定义了以下内容:

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

服务#

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

发送到 Kubernetes 集群#

n8n-kubernetes-hosting 目录下运行以下命令,将所有清单文件发送到集群:

1

| ``` kubectl


---|---
命名空间错误
你可能会看到关于找不到 "n8n" 命名空间的错误消息,这是因为相关资源尚未就绪。你可以再次运行相同命令,或先使用以下命令单独应用命名空间清单:

1

| ```
kubectl

---|---

配置 DNS#

n8n 通常在一个子域名下运行。请在你的 DNS 提供商处为该子域名创建一条记录,并将其指向实例的静态地址。

要查找运行在实例上的 n8n 服务的地址:

  1. 在 AWS 控制台中打开 Amazon Elastic Kubernetes Service 页面的 Clusters(集群)部分。
  2. 选择集群名称以打开其配置页面。
  3. 选择 Resources(资源)选项卡,然后选择 Service and networking > Services(服务与网络 > 服务)。
  4. 选择 n8n 服务,复制 Load balancer URLs(负载均衡器 URL)的值。将此值加上 n8n 服务端口(5678)作为 DNS 记录的目标地址使用。

使用 HTTP 本指南中定义的服务使用 HTTP 连接,例如在 n8n-deployment.yaml 文件中。然而,当你点击 Load balancer URLs(负载均衡器 URL)的值时,EKS 会将你导向一个 "HTTPS" URL,这会导致错误。要解决此问题,在打开 n8n 子域名时,请确保使用 HTTP。

删除资源#

如果需要删除该部署设置,可以使用以下命令删除由清单文件创建的资源:

1

| ``` kubectl


---|---

## 下一步#

  * 了解更多关于 配置 和 扩展 n8n 的内容。
  * 或者开始探索使用 n8n:尝试 快速入门指南(Quickstarts)。