在 DigitalOcean 上托管 n8n#
本托管指南将介绍如何在 DigitalOcean 的 Droplet 上自行托管 n8n。该方案使用:
- Caddy(反向代理)来允许从互联网访问 Droplet。Caddy 还会为你的 n8n 实例自动创建和管理 SSL/TLS 证书。
- Docker Compose 来定义和创建应用程序组件及其协作方式。
自托管知识前提
自行托管 n8n 需要一定的技术知识,包括:
- 设置和配置服务器与容器
- 管理应用资源及扩展
- 保障服务器和应用的安全
- 配置 n8n
n8n 建议仅由高级用户进行自托管。操作失误可能导致数据丢失、安全问题或服务中断。如果你缺乏服务器管理经验,n8n 推荐使用 n8n Cloud。
最新版本与 Next 版本
n8n 每周通常发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的开发版本,应视为 beta 版本:可能存在不稳定情况。如需报告问题,请使用 论坛。
当前 latest:1.115.2
当前 next:1.116.1
创建 Droplet#
- 登录 DigitalOcean。
- 选择用于托管 Droplet 的项目,或创建一个新项目。
- 在你的项目中,从 Manage 菜单选择 Droplets。
- 使用 Marketplace 选项卡中的 Docker 镜像,创建一个新的 Droplet。
Droplet 资源 创建 Droplet 时,DigitalOcean 会要求你选择一个套餐。对于大多数使用场景,基本的共享 CPU 套餐已足够。
SSH 密钥或密码 DigitalOcean 允许你在 SSH 密钥认证和密码认证之间进行选择。SSH 密钥被认为更安全。
登录到你的 Droplet 并创建新用户#
本指南的其余部分需要你通过终端使用 SSH 登录到 Droplet。更多信息请参考 如何通过 SSH 连接到 Droplets。
你应该创建一个新用户,以避免以 root 用户身份操作:
- 以 root 身份登录。
- 创建一个新用户:
1| ``` adduser
---|---
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
---|---
为 n8n 数据创建一个 Docker 卷:1
| ```
sudo---|---
设置 DNS#
n8n 通常运行在一个子域名下。请在你的 DNS 提供商处为该子域名创建一条 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
---|---
## 配置 Caddy#
Caddy 需要知道它应该为哪些域名提供服务,以及对外暴露哪个端口。请编辑 `caddy_config` 文件夹中的 `Caddyfile` 文件。1
| ```
nano---|---
将占位符域名替换为你自己的域名。如果你按照前面的步骤将子域命名为 n8n,那么你的完整域名类似于 n8n.example.com。reverse_proxy 设置中的 n8n 告诉 Caddy 使用 docker-compose.yml 文件中定义的服务:
1
2
3
4
5| ``` n8n.. { 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
---|---
此过程可能需要几分钟时间。
## 测试你的配置#
在浏览器中打开之前定义的子域名和域名组成的 URL。输入之前设定的用户名和密码,你应该就能成功访问 n8n。
## 停止 n8n 和 Caddy#
你可以使用以下命令停止 n8n 和 Caddy:1
| ```
sudo---|---
更新#
如果你使用 Docker Compose 文件运行 n8n,请按照以下步骤更新 n8n:
1
2
3
4
5
6
7
8
9
10
11| ```
进入包含 docker compose 文件的目录
cd# 拉取最新版本 docker# 停止并移除旧版本 docker# 启动容器 docker
---|---
## 下一步#
* 进一步了解 配置 和 扩展 n8n。
* 或者开始探索使用 n8n:尝试 快速入门指南(Quickstarts)。