Skip to content

在 Hetzner cloud 上托管 n8n#

本托管指南向您展示如何在 Hetzner cloud 服务器上自托管 n8n。它使用:

  • Caddy(反向代理)允许从互联网访问服务器。
  • Docker Compose 创建和定义应用程序组件以及它们如何协同工作。

自托管知识先决条件

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

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

n8n 建议专业用户进行自托管。错误可能导致数据丢失、安全问题和停机。如果您在管理服务器方面缺乏经验,n8n 建议使用 n8n Cloud

Latest 和 Next 版本

n8n 每周发布一个新的次要版本。latest 版本用于生产环境。next 是最新的发布版本。您应该将 next 视为测试版:它可能不稳定。要报告问题,请使用论坛

当前 latest:1.97.1
当前 next:1.98.1

创建服务器#

  1. 登录 Hetzner Cloud 控制台。
  2. 选择要托管服务器的项目,或通过选择 + NEW PROJECT 创建新项目。
  3. 在您要添加的项目磁贴上选择 + CREATE SERVER

您可以更改大多数设置以满足您的需求,但由于本指南使用 Docker 运行应用程序,在 Image 部分下,从 APPS 选项卡中选择 "Docker CE"。

类型

创建服务器时,Hetzner 要求您选择一个计划。对于大多数使用级别,CPX11 类型就足够了。

SSH 密钥

Hetzner 允许您在 SSH 和基于密码的身份验证之间进行选择。SSH 更安全。本指南的其余部分假设您使用 SSH。

登录到您的服务器#

本指南的其余部分要求您使用带有 SSH 的终端登录到服务器。有关更多信息,请参考使用 SSH/rsync/BorgBackup 访问。您可以在项目中的服务器列表中找到公共 IP。

安装 Docker Compose#

Hetzner Docker 应用镜像没有安装 Docker compose。使用以下命令安装它:

1
2
apt update && apt -y upgrade
apt install docker-compose-plugin

克隆配置存储库#

Docker Compose、n8n 和 Caddy 需要一系列文件夹和配置文件。您可以从此存储库将这些文件克隆到服务器的 root 用户文件夹中。以下步骤将告诉您要更改哪个文件以及要进行哪些更改。

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

1
git clone https://github.com/n8n-io/n8n-docker-caddy.git

并切换到您克隆的存储库的根目录:

1
cd n8n-docker-caddy

默认文件夹和文件#

主机操作系统(服务器)将您创建的两个文件夹复制到 Docker 容器中,以使它们可供 Docker 使用。这两个文件夹是:

  • caddy_config:保存 Caddy 配置文件。
  • local_files:用于您使用 n8n 上传或添加的文件的文件夹。

创建 Docker 卷#

为了在重启之间持久化 Caddy 缓存并加快启动时间,创建一个 Docker 卷,Docker 在重启之间重用:

1
docker volume create caddy_data

为 n8n 数据创建 Docker 卷:

1
sudo docker volume create n8n_data

设置 DNS#

n8n 通常在子域上运行。使用您的提供商为子域创建 DNS 记录,并将其指向服务器的 IP 地址。具体步骤取决于您的 DNS 提供商,但通常您需要为 n8n 子域创建一个新的 "A" 记录。DigitalOcean 提供DNS 术语、组件和概念介绍

打开端口#

n8n 作为 Web 应用程序运行,因此服务器需要允许传入访问端口 80 的非安全流量和端口 443 的安全流量。

通过运行以下两个命令在服务器的防火墙中打开以下端口:

1
2
sudo ufw allow 80
sudo ufw allow 443

配置 n8n#

n8n 需要设置一些环境变量传递给在 Docker 容器中运行的应用程序。示例 .env 文件包含占位符,您需要将其替换为您自己的值。

使用以下命令打开文件:

1
nano .env

该文件包含内联注释,帮助您了解要更改的内容。

有关 n8n 环境变量详细信息,请参考环境变量

Docker Compose 文件#

Docker Compose 文件(docker-compose.yml)定义应用程序需要的服务,在这种情况下是 Caddy 和 n8n。

  • Caddy 服务定义定义了它使用的端口和要复制到容器的本地卷。
  • n8n 服务定义定义了它使用的端口、n8n 运行所需的环境变量(一些在 .env 文件中定义)以及它需要复制到容器的卷。

Docker Compose 文件使用在 .env 文件中设置的环境变量,因此您不需要更改其内容,但要查看,请运行以下命令:

1
nano docker-compose.yml

配置 Caddy#

Caddy 需要知道它应该提供哪些域,以及向外部世界公开哪个端口。编辑 caddy_config 文件夹中的 Caddyfile 文件。

1
nano caddy_config/Caddyfile

将占位符子域更改为您的子域。如果您按照步骤将子域命名为 n8n,您的完整域类似于 n8n.example.comreverse_proxy 设置中的 n8n 告诉 Caddy 使用在 docker-compose.yml 文件中定义的服务定义:

1
2
3
4
5
n8n.<domain>.<suffix> {
    reverse_proxy n8n:5678 {
      flush_interval -1
    }
}

启动 Docker Compose#

使用以下命令启动 n8n 和 Caddy:

1
docker compose up -d

这可能需要几分钟。

测试您的设置#

在您的浏览器中,打开由之前定义的子域和域名组成的 URL。输入之前定义的用户名和密码,您应该能够访问 n8n。

停止 n8n 和 Caddy#

您可以使用以下命令停止 n8n 和 Caddy:

1
sudo docker compose stop

更新#

如果您使用 Docker Compose 文件运行 n8n,请按照以下步骤更新 n8n:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 导航到包含您的 docker compose 文件的目录
cd </path/to/your/compose/file/directory>

# 拉取最新版本
docker compose pull

# 停止并移除旧版本
docker compose down

# 启动容器
docker compose up -d

后续步骤#