Skip to content

在 DigitalOcean 上托管 n8n#

本托管指南向您展示如何在 DigitalOcean droplet 上自托管 n8n。它使用:

  • Caddy(反向代理)允许从互联网访问 Droplet。Caddy 还将自动为您的 n8n 实例创建和管理 SSL / TLS 证书。
  • Docker Compose 创建和定义应用程序组件以及它们如何协同工作。

自托管知识先决条件

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

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

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

Latest 和 Next 版本

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

Current latest: 1.105.2
Current next: 1.106.0

创建 Droplet#

  1. 登录 DigitalOcean。
  2. 选择要托管 Droplet 的项目,或创建新项目
  3. 在您的项目中,从 Manage 菜单中选择 Droplets
  4. 使用 Marketplace 选项卡上可用的 Docker 镜像创建新的 Droplet

Droplet 资源

创建 Droplet 时,DigitalOcean 要求您选择一个计划。对于大多数使用级别,基本共享 CPU 计划就足够了。

SSH 密钥或密码

DigitalOcean 允许您在 SSH 密钥和基于密码的身份验证之间进行选择。SSH 密钥被认为更安全。

登录到您的 Droplet 并创建新用户#

本指南的其余部分要求您使用带有 SSH 的终端登录到 Droplet。有关更多信息,请参考如何使用 SSH 连接到 Droplets

您应该创建一个新用户,以避免以 root 用户身份工作:

  1. 以 root 身份登录。
  2. 创建新用户:
    1
    adduser <username>
    
  3. 按照 CLI 中的提示完成用户创建。
  4. 向新用户授予管理权限:
    1
    usermod -aG sudo <username>
    
    您现在可以通过在命令前使用 sudo 来运行具有超级用户权限的命令。
  5. 按照步骤为新用户设置 SSH:添加公钥身份验证
  6. 退出 droplet。
  7. 使用 SSH 以新用户身份登录。

克隆配置存储库#

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

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

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

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

1
cd n8n-docker-caddy

默认文件夹和文件#

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

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

创建 Docker 卷#

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

1
sudo docker volume create caddy_data

为 n8n 数据创建 Docker 卷:

1
sudo docker volume create n8n_data

设置 DNS#

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

打开端口#

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

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

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
    }
}

如果您要使用 automate.example.com,您的 Caddyfile 可能如下所示:

1
2
3
4
5
automate.example.com {
    reverse_proxy n8n:5678 {
      flush_interval -1
    }
}

启动 Docker Compose#

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

1
sudo 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

后续步骤#