在 Amazon Web Services 上托管 n8n#
¥Hosting n8n on Amazon Web Services
本托管指南将向你展示如何使用 Amazon Web Services (AWS) 自行托管 n8n。它使用 n8n,并以 Postgres 作为数据库后端,使用 Kubernetes 管理必要的资源和反向代理。
¥This hosting guide shows you how to self-host n8n with Amazon Web Services (AWS). It uses n8n with Postgres as a database backend using Kubernetes to manage the necessary resources and reverse proxy.
托管选项#
¥Hosting options
AWS 提供多种适合托管 n8n 的方式,包括 EC2(虚拟机)和 EKS(运行在 Kubernetes 上的容器)。
¥AWS offers several ways suitable for hosting n8n, including EC2 (virtual machines), and EKS (containers running with Kubernetes).
本指南使用 EKS 作为托管选项。使用 Kubernetes 需要一些额外的复杂性和配置,但它是根据需求变化扩展 n8n 的最佳方法。
¥This guide uses EKS as the hosting option. Using Kubernetes requires some additional complexity and configuration, but is the best method for scaling n8n as demand changes.
先决条件#
¥Prerequisites
本指南中的步骤结合使用了 AWS UI 和 EKS 的 eksctl 命令行工具。
¥The steps in this guide use a mix of the AWS UI and the eksctl CLI tool for EKS.
虽然 eksctl 文档中未提及,但你还需要访问 安装 AWS CLI 工具 和 配置工具的身份验证。
¥While not mentioned in the documentation for eksctl, you also need to install the AWS CLI tool, and configure authentication of the tool.
Self-hosting knowledge prerequisites
Self-hosting n8n requires technical knowledge, including:
- Setting up and configuring servers and containers
- Managing application resources and scaling
- Securing servers and applications
- Configuring n8n
n8n recommends self-hosting for expert users. Mistakes can lead to data loss, security issues, and downtime. If you aren't experienced at managing servers, n8n recommends n8n Cloud.
Latest and Next versions
n8n releases a new minor version most weeks. The latest version is for production use. next is the most recent release. You should treat next as a beta: it may be unstable. To report issues, use the forum.
Current latest: 1.122.5
Current next: 1.123.2
创建集群#
¥Create a cluster
使用 eksctl 工具创建集群,并指定名称和区域,命令如下:
¥Use the eksctl tool to create a cluster specifying a name and a region with the following command:
1 | |
创建集群可能需要一些时间。
¥This can take a while to create the cluster.
创建集群后,eksctl 会自动将 kubectl 上下文设置为集群。
¥Once the cluster is created, eksctl automatically sets the kubectl context to the cluster.
克隆配置库#
¥Clone configuration repository
Kubernetes 和 n8n 需要一系列配置文件。你可以从 此代码库 克隆这些工作流。以下步骤说明每个文件的作用以及你需要更改的设置。
¥Kubernetes and n8n require a series of configuration files. You can clone these from this repository. The following steps tell you what each file does, and what settings you need to change.
使用以下命令克隆存储库:
¥Clone the repository with the following command:
1 | |
切换目录:
¥And change directory:
1 | |
配置 Postgres#
¥Configure Postgres
对于更大规模的 n8n 部署,Postgres 比 SQLite 提供更强大的数据库后端。
¥For larger scale n8n deployments, Postgres provides a more robust database backend than SQLite.
配置持久存储卷#
¥Configure volume for persistent storage
为了在 Pod 重启后保持数据,Postgres 部署需要一个持久卷。默认的 AWS 存储类 gp3 适用于此目的。此功能在 postgres-claim0-persistentvolumeclaim.yaml 清单中定义。
¥To maintain data between pod restarts, the Postgres deployment needs a persistent volume. The default AWS storage class, gp3, is suitable for this purpose. This is defined in the postgres-claim0-persistentvolumeclaim.yaml manifest.
1 2 3 4 5 6 | |
Postgres 环境变量#
¥Postgres environment variables
Postgres 需要设置一些环境变量才能将其传递给在容器中运行的应用。
¥Postgres needs some environment variables set to pass to the application running in the containers.
示例 postgres-secret.yaml 文件包含占位符,你需要将其替换为你自己的用户详细信息和要使用的数据库的值。
¥The example postgres-secret.yaml file contains placeholders you need to replace with values of your own for user details and the database to use.
PostgreSQL 使用 root 用户 (POSTGRES_USER) 进行设置和管理,但最佳实践是为 n8n 创建一个单独的非 root 用户 (POSTGRES_NON_ROOT_USER)。root 用户拥有完全控制权限,而 n8n 只需要非 root 用户权限即可运行。同时配置这两项可以提高安全性,并有助于防止意外更改数据库系统。
¥PostgreSQL uses a root user (POSTGRES_USER) for setup and administration, but it’s best practice to create a separate non-root user (POSTGRES_NON_ROOT_USER) for n8n. The root user has full control, while n8n only needs the non-root user permissions to run. Configuring both improves security and helps prevent accidental changes to the database system.
然后,postgres-deployment.yaml 清单使用此清单文件中的值发送到应用 Pod。
¥The postgres-deployment.yaml manifest then uses the values from this manifest file to send to the application pods.
配置 n8n#
¥Configure n8n
创建文件卷存储#
¥Create a volume for file storage
虽然并非运行 n8n 的必要条件,但使用持久卷有助于保留在使用 n8n 期间上传的文件,如果你希望在重启之间保留 手动 n8n 加密密钥,它会在启动时将包含密钥的文件保存到文件存储中。
¥While not essential for running n8n, using persistent volumes helps maintain files uploaded while using n8n and if you want to persist manual n8n encryption keys between restarts, which saves a file containing the key into file storage during startup.
n8n-claim0-persistentvolumeclaim.yaml 清单创建此清单,n8n Deployment 将该声明挂载到 n8n-deployment.yaml 清单的 volumes 部分。
¥The n8n-claim0-persistentvolumeclaim.yaml manifest creates this, and the n8n Deployment mounts that claim in the volumes section of the n8n-deployment.yaml manifest.
1 2 3 4 5 6 | |
Pod 资源#
¥Pod resources
Kubernetes 允许你指定应用容器所需的最小资源以及它们的运行限制。上面克隆的示例 YAML 文件在 n8n-deployment.yaml 文件的 resources 部分包含以下内容:
¥Kubernetes lets you specify the minimum resources application containers need and the limits they can run to. The example YAML files cloned above contain the following in the resources section of the n8n-deployment.yaml file:
1 2 3 4 5 6 7 | |
这定义了每个容器的最小内存限制为 250MB,最大内存限制为 500MB,并允许 Kubernetes 处理 CPU 资源。你可以更改这些值以满足你的需求。以下是 n8n 云产品的资源值,供你参考:
¥This defines a minimum of 250mb per container, a maximum of 500mb, and lets Kubernetes handle CPU. You can change these values to match your own needs. As a guide, here are the resources values for the n8n cloud offerings:
- Start: 320mb RAM, 10 millicore CPU burstable
- Pro (10k executions): 640mb RAM, 20 millicore CPU burstable
- Pro (50k executions): 1280mb RAM, 80 millicore CPU burstable
可选的:环境变量#
¥Optional: Environment variables
你可以使用环境变量配置 n8n 设置和行为。
¥You can configure n8n settings and behaviors using environment variables.
创建 n8n-secret.yaml 文件有关 n8n 环境变量的详细信息,请参阅 环境变量。
¥Create an n8n-secret.yaml file. Refer to Environment variables for n8n environment variables details.
部署#
¥Deployments
这两个部署清单(n8n-deployment.yaml 和 postgres-deployment.yaml)将 n8n 和 Postgres 应用定义到 Kubernetes。
¥The two deployment manifests (n8n-deployment.yaml and postgres-deployment.yaml) define the n8n and Postgres applications to Kubernetes.
清单定义了以下内容:
¥The manifests define the following:
- 将定义的环境变量发送到每个应用 pod
¥Send the environment variables defined to each application pod
- 定义要使用的容器图片。
¥Define the container image to use
- 设置资源消耗限制
¥Set resource consumption limits
- 前面定义的
volumes和volumeMounts用于定义容器中挂载卷的路径。
¥The volumes defined earlier and volumeMounts to define the path in the container to mount volumes.
- 扩展和重启策略。示例清单定义了每个 Pod 的一个实例。你应该根据需要更改此设置。
¥Scaling and restart policies. The example manifests define one instance of each pod. You should change this to meet your needs.
服务#
¥Services
两个服务清单(postgres-service.yaml 和 n8n-service.yaml)默认分别使用 Kubernetes 负载均衡器通过 5432 和 5678 端口将服务暴露给外部。
¥The two service manifests (postgres-service.yaml and n8n-service.yaml) expose the services to the outside world using the Kubernetes load balancer using ports 5432 and 5678 respectively by default.
发送到 Kubernetes 集群#
¥Send to Kubernetes cluster
在 n8n-kubernetes-hosting 目录中运行以下命令,将所有清单发送到集群:
¥Send all the manifests to the cluster by running the following command in the n8n-kubernetes-hosting directory:
1 | |
Namespace error
你可能会看到一条错误消息,提示找不到 "n8n" 命名空间,因为该资源尚未准备就绪。你可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:
¥You may see an error message about not finding an "n8n" namespace as that resources isn't ready yet. You can run the same command again, or apply the namespace manifest first with the following command:
1 | |
设置 DNS#
¥Set up DNS
n8n 通常在子域名上运行。使用你的 DNS 提供商为子域名创建一条 DNS 记录,并将其指向实例的静态地址。
¥n8n typically operates on a subdomain. Create a DNS record with your provider for the subdomain and point it to a static address of the instance.
要查找在实例上运行的 n8n 服务的地址:
¥To find the address of the n8n service running on the instance:
- 在 AWS 控制台中打开 Amazon Elastic Kubernetes Service 页面的“集群”部分。
¥Open the Clusters section of the Amazon Elastic Kubernetes Service page in the AWS console. 2. 选择集群名称以打开其配置页面。
¥Select the name of the cluster to open its configuration page. 3. 选择“资源”选项卡,然后选择“服务和网络”>“服务”。
¥Select the Resources tab, then Service and networking > Services. 4. 选择 n8n 服务并复制负载均衡器 URL 的值。使用此值时,请加上 n8n 服务端口 (5678) 作为 DNS 后缀。
¥Select the n8n service and copy the Load balancer URLs value. Use this value suffixed with the n8n service port (5678) for DNS.
Use HTTP
本指南使用 HTTP 连接来提供其定义的服务,例如 n8n-deployment.yaml。但是,如果你单击“负载均衡器 URL”值,EKS 会将你重定向到 "HTTPS" URL,从而导致错误。要解决此问题,打开 n8n 子域时,请确保使用 HTTP。
¥This guide uses HTTP connections for the services it defines, for example in n8n-deployment.yaml. However, if you click the Load balancer URLs value, EKS takes you to an "HTTPS" URL which results in an error. To solve this, when you open the n8n subdomain, make sure to use HTTP.
删除资源#
¥Delete resources
如果你需要删除设置,可以使用以下命令移除清单创建的资源:
¥If you need to delete the setup, you can remove the resources created by the manifests with the following command:
1 | |
下一步步骤#
¥Next steps
- Learn more about configuring and scaling n8n.
- Or explore using n8n: try the Quickstarts.