跳到主要内容

在 DigitalOcean 上部署 n8n#

本部署指南将展示如何在 DigitalOcean 云服务器上自托管 n8n。方案采用:

  • Caddy(反向代理服务器)实现从互联网访问云服务器,并自动为 n8n 实例创建和管理 SSL/TLS 证书
  • Docker Compose 定义应用组件及其协同工作方式

自托管知识前提

自托管 n8n 需要具备以下技术知识:

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

n8n 建议仅专家用户进行自托管。操作失误可能导致数据丢失、安全漏洞及服务中断。若缺乏服务器管理经验,推荐使用 n8n 云服务

最新版与预览版

n8n 每周会发布新的次要版本。latest 为生产环境适用版本,next 则是最新发布的预览版本(可能存在不稳定因素,应视为测试版)。问题反馈请至社区论坛

当前 latest 版本:1.119.2
当前 next 版本:1.119.3

创建云服务器#

  1. 登录 DigitalOcean 控制台
  2. 选择部署云服务器的项目,或创建新项目
  3. 在项目中通过管理菜单选择 Droplets
  4. 通过应用市场标签页提供的 Docker 镜像创建新云服务器

服务器资源配置

创建过程中需选择服务方案。对于大多数使用场景,基础共享 CPU 方案即可满足需求。

SSH 密钥与密码认证

DigitalOcean 支持 SSH 密钥与密码两种认证方式,推荐使用安全性更高的 SSH 密钥。

登录服务器并创建新用户#

后续操作需通过 SSH 终端登录云服务器,详见 SSH 连接云服务器指南

建议创建新用户以避免使用 root 权限操作:

  1. 以 root 身份登录
  2. 执行新用户创建操作:

adduser <username>

  1. 按照命令行界面中的提示完成用户创建。
  2. 授予新用户管理员权限:

usermod -aG sudo <username>

现在你可以在命令前使用 sudo 来以超级用户权限执行命令。 5. 按照以下步骤为新用户设置 SSH:添加公钥认证。 6. 退出 Droplet 服务器。 7. 以新用户身份通过 SSH 重新登录。

克隆配置仓库#

Docker Compose、n8n 和 Caddy 需要一系列文件夹和配置文件。你可以从此仓库将其克隆到 Droplet 服务器上已登录用户的 home 目录中。后续步骤将说明需要修改的文件及具体更改内容。

使用以下命令克隆仓库:

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

并切换到您克隆的代码库根目录:

cd n8n-docker-caddy

默认文件夹与文件#

宿主操作系统(即DigitalOcean Droplet)会将您创建的两个文件夹复制到Docker容器中,使其可供Docker使用。这两个文件夹分别是:

  • caddy_config:用于存放Caddy配置文件
  • local_files:用于存放通过n8n上传或添加的文件

创建Docker卷#

为实现重启时保留Caddy缓存并加速启动过程,请创建Docker卷供Docker在重启间重复使用:

sudo docker volume create caddy_data

为n8n数据创建一个Docker卷:

sudo docker volume create n8n_data

配置DNS#

n8n通常在子域名上运行。请通过您的DNS服务商为子域名创建一条DNS记录,并将其指向Droplet的IP地址。具体操作步骤取决于您使用的DNS服务商,但通常需要为n8n子域名新建一条"A"记录。DigitalOcean提供了《DNS术语、组件与概念介绍》供参考。

开放端口#

n8n以Web应用程序形式运行,因此Droplet需允许通过80端口接收非加密流量,并通过443端口接收加密流量。

通过运行以下两条命令,在Droplet防火墙中开放下列端口:

sudo ufw allow 80 sudo ufw allow 443

配置 n8n#

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

使用以下命令打开文件:

nano .env

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

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

Docker Compose 文件#

Docker Compose 文件 (docker-compose.yml) 定义了应用程序所需的服务,本例中为 Caddy 和 n8n。

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

Docker Compose 文件使用了在 .env 文件中设置的环境变量,因此您通常无需修改其内容。如需查看文件内容,可运行以下命令:

nano docker-compose.yml

配置 Caddy#

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

nano caddy_config/Caddyfile

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

n8n.<domain>.<suffix>
{ reverse_proxy n8n:5678
{
flush_interval -1
}
}

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

automate.example.com 
{
reverse_proxy n8n:5678
{ flush_interval -1 }
}

启动 Docker Compose#

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

sudo docker compose up -d

这可能需要几分钟时间。

测试配置#

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

停止n8n与Caddy服务#

您可以通过以下命令停止n8n和Caddy:

sudo docker compose stop

更新#

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

# Navigate to the directory containing your docker compose file
cd </path/to/your/compose/file/directory>

# Pull latest version
docker compose pull

# Stop and remove older version
docker compose down

# Start the container
docker compose up -d

后续步骤#