Skip to content

在 DigitalOcean 上托管 n8n#

本托管指南将展示如何在 DigitalOcean Droplet 上自托管 n8n。方案使用:

  • Caddy(反向代理)允许从互联网访问 Droplet。Caddy 还会自动为您的 n8n 实例创建和管理 SSL/TLS 证书。
  • Docker Compose 来创建和定义应用组件及其协作方式。

/// 注意 | 自托管知识前提条件 自托管 n8n 需要具备以下技术知识:

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

n8n 建议仅由专业用户进行自托管。配置不当可能导致数据丢失、安全问题和服务中断。如果您缺乏服务器管理经验,n8n 推荐使用 n8n Cloud。 ///

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

当前 latest 版本: 1.95.3
当前 next 版本: 1.97.1 ///

创建 Droplet#

  1. 登录 DigitalOcean。
  2. 选择要托管 Droplet 的项目,或创建新项目
  3. 在项目中,从管理菜单中选择 Droplets
  4. 使用应用市场标签页中的 Docker 镜像创建新 Droplet

Droplet 资源配置

创建 Droplet 时,DigitalOcean 会要求选择方案。对于大多数使用场景,基础共享 CPU 方案已足够。

SSH 密钥或密码

DigitalOcean 允许在 SSH 密钥和密码认证之间选择。SSH 密钥被认为更安全。

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

本指南后续步骤要求您使用 SSH 终端登录 Droplet。更多信息请参考 如何通过 SSH 连接 Droplets

您应该创建一个新用户,避免使用 root 用户操作:

  1. 以 root 用户登录
  2. 创建新用户:
    1
    adduser <用户名>
    
  3. 按照 CLI 提示完成用户创建
  4. 授予新用户管理员权限:
    1
    usermod -aG sudo <用户名>
    
    现在您可以在命令前使用 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 容器中使其可用。这两个文件夹是:

  • 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 服务定义中指定了它使用的端口、运行所需的环境变量(部分定义在 .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
# 拉取最新版本
docker compose pull


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


# 启动容器
docker compose up -d

后续步骤#