Skip to content

在 Amazon Web Services 上托管 n8n

本托管指南将向您展示如何使用 Amazon Web Services (AWS) 自托管 n8n。它使用 n8n 和 Postgres 作为数据库后端,并使用 Kubernetes 管理必要的资源和反向代理。

托管选项

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

本指南使用EKS作为托管选项。使用 Kubernetes 需要一些额外的复杂性和配置,但它是随着需求变化扩展 n8n 的最佳方法。

先决条件

本指南中的步骤混合使用 AWS UI 和EKS 的 eksctl CLI 工具

虽然 eksctl 的文档中没有提到,但您还需要安装 AWS CLI 工具,并配置该工具的身份验证

自托管知识前提条件

自托管 n8n 需要技术知识,包括:

  • 设置和配置服务器和容器
  • 管理应用程序资源和扩展
  • 保护服务器和应用程序
  • 配置 n8n

n8n 建议资深用户选择自托管。错误操作可能导致数据丢失、安全问题和宕机。如果您缺乏服务器管理经验,n8n 推荐使用n8n Cloud

最新版本和下一个版本

n8n 几乎每周都会发布一个新的次要版本。此版本仅供生产使用。这是最新版本。您应该将其视为测试版本:它可能不稳定。如需报告问题,请使用论坛

当前:1.102.4当前:1.103.1

创建集群

使用 eksctl 工具创建一个指定名称和区域的集群,命令如下:

1
eksctl create cluster --name n8n --region <your-aws-region>

创建集群可能需要一段时间。

一旦创建集群,eksctl 会自动将 kubectl 上下文设置为集群。

克隆配置存储库

Kubernetes 和 n8n 需要一系列配置文件。您可以从此仓库克隆这些文件。以下步骤将介绍每个文件的功能以及需要更改的设置。

使用以下命令克隆存储库:

1
git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b aws

并将目录更改为您克隆的存储库的根目录:

1
cd n8n-kubernetes-hosting

配置 Postgres

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

配置持久存储的卷

为了在 Pod 重启之间维护数据,Postgres 部署需要一个持久卷。默认的 AWS 存储类gp2就适合此用途。该存储类在清单中定义。

1
2
3
4
5
6

spec:
  storageClassName: gp2
  accessModes:
    - ReadWriteOnce

Postgres 环境变量

Postgres 需要设置一些环境变量来传递给容器中运行的应用程序。

示例文件包含占位符,您需要将其替换为您自己的用户详细信息和要使用的数据库的值。

然后,清单使用该清单文件中的值发送到应用程序容器。

配置 n8n

创建用于文件存储的卷

虽然对于运行 n8n 来说并非必不可少,但使用持久卷有助于维护在使用 n8n 时上传的文件,并且如果您想在重新启动之间保留手动 n8n 加密密钥,这会在启动期间将包含密钥的文件保存到文件存储中。

清单创建了这一点,并且 n8n 部署在清单的部分中挂载了该声明。

1
2
3
4
5
6

volumes:
  - name: n8n-claim0
    persistentVolumeClaim:
      claimName: n8n-claim0

Pod 资源

Kubernetes允许您指定应用程序容器所需的最低资源量以及它们可以运行的限制。上面克隆的示例 YAML 文件在文件部分包含以下内容:

1
2
3
4
5
6
7

resources:
  requests:
    memory: "250Mi"
  limits:
    memory: "500Mi"
    

这定义了每个容器的最小 250MB 空间,最大 500MB 空间,并允许 Kubernetes 处理 CPU。您可以根据自己的需求更改这些值。以下是 n8n 云产品的资源值,仅供参考:

  • 起始配置:320mb RAM,10 millicore CPU
  • Pro(10k 次执行) :640mb RAM,20 millicore CPU(可突发)
  • Pro(50k 次执行) :1280mb RAM,80 millicore CPU(可突发)

可选:环境变量

您可以使用环境变量配置 n8n 设置和行为。

创建一个文件。有关 n8n 环境变量的详细信息,请参阅环境变量。

部署

两个部署清单(和)向 Kubernetes 定义了 n8n 和 Postgres 应用程序。

清单定义如下:

  • 将定义的环境变量发送到每个应用程序pod
  • 定义要使用的容器镜像
  • 设置资源消耗限制
  • 前面定义并定义容器中挂载卷的路径。
  • 扩缩和重启策略。示例清单定义了每个 Pod 的一个实例。您可以根据需要进行更改。

服务

这两个服务清单(和)默认分别使用端口 5432 和 5678 通过 Kubernetes 负载均衡器向外界公开服务。

发送到 Kubernetes 集群

通过在目录中运行以下命令将所有清单发送到集群:

1
kubectl apply -f .

命名空间错误

您可能会看到一条错误消息,提示找不到“n8n”命名空间,因为该资源尚未准备好。您可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:

1
kubectl apply -f namespace.yaml

设置 DNS

n8n 通常在子域名上运行。请向您的提供商为子域名创建 DNS 记录,并将其指向实例的静态地址。

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

  1. 打开AWS 控制台中Amazon Elastic Kubernetes Service页面的“集群”部分。
  2. 选择集群名称以打开其配置页面。
  3. 选择资源选项卡,然后选择服务和网络>服务
  4. 选择n8n服务并复制“负载均衡器 URL”值。将此值加上 n8n 服务端口 (5678) 作为 DNS 后缀。

使用 HTTP

本指南使用 HTTP 连接来连接其定义的服务,例如。但是,如果您点击“负载均衡器 URL”值,EKS 会将您转到“HTTPS”URL,从而导致错误。为了解决这个问题,请确保在打开 n8n 子域时使用 HTTP。

删除资源

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

1
kubectl delete -f .

后续步骤Next steps