在 DigitalOcean 上自托管 n8n 2026 — 完整的自动化指南
n8n 是一个开源的工作流自动化工具,在寻求 Zapier 或 Make 替代品而不需支付按任务计费的泰国开发者中获得日益普及。本指南通过 Docker Compose 在 DigitalOcean Droplet 上部署 n8n,从选择服务器规格、配置您的域名和 SSL,到安全地备份工作流——包含可立即使用的实际命令。
目录
什么是 n8n?它能替代 Zapier 吗?
n8n 是一个基于节点的工作流自动化工具,根据公平许可证发布。它以最少的编码连接应用程序。与 Zapier 或 Make 相比,n8n 的突出特点是支持在您自己的服务器上自托管,消除了 SaaS 平台按任务收费的工作流数量或每月执行限制。n8n Cloud 还为那些不希望管理基础设施的人提供托管 SaaS 版本。 在功能方面,n8n 集成了 400 多项服务,包括 Google Workspace、Slack、Line Notify、Telegram、数据库和通用 REST API。它还包括用于 JavaScript/Python 编写的节点,当现成的集成不足时。与 Zapier 的关键区别是 n8n 提供对数据流的更精细控制——循环、复杂的条件语句、自定义错误处理——使其非常适合具有复杂工作流或高执行量的团队。 n8n 能替代 Zapier 吗?在许多情况下,是的——尤其是对于高执行工作负载,在 Zapier 上会产生昂贵的每月任务费用。自托管的 n8n 有固定的服务器成本,与运行频率无关,而 Zapier 按任务收费。权衡是您的团队必须自己处理服务器维护、更新和安全补丁,不像 SaaS 供应商那样管理一切。对于熟悉 Docker 和 Linux 的开发者来说,在 DigitalOcean Droplet 上自托管提供了引人注目的长期价值。
- n8n 是开源的,根据公平许可证——免费自托管,拥有无限的工作流
- 支持 400+ 集成加上用于自定义 JavaScript/Python 代码的节点
- 自托管消除了 Zapier/Make 等的按任务月费,但需要服务器维护
- n8n Cloud(SaaS)适用于那些偏好托管基础设施的用户
使用 Docker Compose 部署 n8n
在安装 n8n 之前,选择与您的工作负载匹配的 Droplet 大小。对于测试或个人使用,基本共享 CPU 计划(1 GiB RAM/1 vCPU/25 GB SSD,每月 $6)是可行的。但是,对于运行 n8n 及 PostgreSQL 或多个并发工作流的生产使用,建议使用 2 GiB RAM/1 vCPU/50 GB SSD 计划(每月 $12)以防止内存耗尽和容器崩溃。
创建您的 Droplet 并 SSH 进入后,使用官方脚本安装 Docker:curl -fsSL https://get.docker.com | sh 然后验证 Docker Compose 插件是否包含:docker compose version 接下来,创建一个 docker-compose.yml 文件来配置 n8n 服务:
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PROTOCOL=https
- N8N_PORT=5678
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Asia/Bangkok
- N8N_ENCRYPTION_KEY=changeme-to-random-string
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
然后在后台启动容器:docker compose up -d 使用 docker compose ps 检查状态,使用 docker compose logs -f n8n 查看日志。一旦容器正常运行,n8n 在端口 5678 上监听。接下来是域名和 SSL 配置以保护 webhook 和 web 访问。启用 DigitalOcean 的 Cloud Firewall(无额外成本)以仅限制开放端口为 22、80 和 443。
- 推荐的起始计划:生产环境中 2 GiB RAM/1 vCPU/50 GB SSD,每月 $12
- 使用官方脚本安装 Docker:curl -fsSL https://get.docker.com | sh
- 从一开始就在 docker-compose.yml 中设置 N8N_ENCRYPTION_KEY 为安全的值
配置域名和 SSL
在您的 Droplet 上运行 n8n 后,创建一个 DNS A 记录,将诸如 n8n.yourdomain.com 的子域指向您的 Droplet IP。然后安装 Nginx 作为反向代理以接受端口 80/443 上的流量并将其转发到本地端口 5678 上的 n8n。这是一个示例 Nginx 站点配置:
server {
listen 80;
server_name n8n.yourdomain.com;
location / {
proxy_pass http://localhost:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
验证 Nginx 工作后,使用 Certbot 从 Let's Encrypt 请求免费 SSL 证书:certbot --nginx -d n8n.yourdomain.com Certbot 自动更新您的配置为 HTTPS 并设置 HTTP 到 HTTPS 重定向。证书每 90 天过期,因此需要设置自动更新——Certbot 在当前版本中默认安装一个 systemd 计时器。使用 certbot renew --dry-run 验证
常见的陷阱:您的 docker-compose.yml 环境变量必须与您的实际域名匹配。具体来说,N8N_HOST、N8N_PROTOCOL=https 和 WEBHOOK_URL 必须与您的域名和 SSL 设置一致,否则 webhook 节点将生成不正确的 URL,外部触发器会失败。编辑 docker-compose.yml 后,再次运行 docker compose up -d 以使更改生效。此外,DigitalOcean 的 Cloud Firewall 和 VPC 私有网络是免费的,并在无额外成本的情况下增强网络安全。
- 在 SSL 设置前创建一个 DNS A 记录,将您的子域指向您的 Droplet IP
- 使用 Nginx 作为反向代理,将来自端口 443 的流量转发到端口 5678 上的 n8n
- 使用 certbot --nginx -d n8n.yourdomain.com 请求免费证书,并使用 certbot renew --dry-run 验证更新
基本的自动化工作流示例
一旦您的系统就绪,一个很好的开始示例是捕获表单提交并发送自动警报的工作流。基本结构有三种节点类型:触发器、逻辑和动作。首先添加一个 Webhook 节点,它为外部系统(如网络表单)生成唯一的 URL,以便在提交时立即将数据发送到 n8n。
接下来,添加一个 IF 节点以定义条件——例如,验证传入数据包括所需字段,如电子邮件。如果条件通过,将其链接到 HTTP Request 节点以调用外部 API,例如通过 Line Notify 或 Telegram Bot API 发送警报,或使用现成的 Google Sheets 节点自动记录数据。您可以插入 Set 节点以在其间转换数据——例如,连接名字和姓氏,或为目标系统格式化日期。
另一个常见的模式是用于基于时间的任务的 Schedule Trigger——每天早晨获取 API 数据,然后总结给 Slack 或电子邮件。使用 Schedule Trigger 节点定义 cron 表达式,例如每天在曼谷时间 08:00 运行。确保在 docker-compose.yml 中设置 GENERIC_TIMEZONE=Asia/Bangkok 以匹配,否则时间表将在错误的时间运行。一旦您的工作流构建完成,单击激活以在后台开始运行,无需保持 n8n 的 UI 打开。
- Webhook 节点为外部系统生成唯一的 URL 以实时 POST 数据到 n8n
- IF 节点在转发到动作前设置条件
- HTTP Request 节点调用外部 API,如 Line Notify、Telegram 或其他服务
备份工作流数据
n8n 在容器内的 /home/node/.n8n 文件夹中存储工作流、凭据和执行历史。根据上面的示例 docker-compose.yml,此路径作为名为 n8n_data 的卷装载。如果使用 SQLite(默认值),所有数据库文件都存在于此单个卷中,提供多个备份策略,具体取决于重要性。
首先,最简单的方法:让 DigitalOcean 以每月每 GiB 0.06 美元的价格对您的整个 Droplet 进行快照。这适合于您的服务器发生故障时的完整系统恢复,但不适合选择性的工作流恢复。其次,使用 DigitalOcean Volumes 以每月每 GiB 0.10 美元的价格将备份与 Droplet 的主磁盘分开存储,然后设置一个 cron 作业运行 rsync 或 tar 以定期将 .n8n 文件夹复制到该卷中。
第三,为生产环境推荐:使用 n8n 的 CLI 直接导出工作流和凭据。运行 docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup.json 和 n8n export:credentials --all --output=/home/node/.n8n/credentials.json 这些 JSON 文件可以通过 n8n import:workflow --input=backup.json 重新导入,允许轻松迁移到新服务器。将这些备份文件存储在服务器外——DigitalOcean Spaces(S3 兼容对象存储,起价每月 5 美元)确保即使您的主 Droplet 发生故障也可以恢复工作流。
- 工作流数据位于 /home/node/.n8n——始终将其作为卷装载
- Droplet 快照的成本为 $0.06/GiB/月,适合完整系统恢复
- DigitalOcean Volumes 的成本为 $0.10/GiB/月,非常适合隔离的数据备份
何时使用此功能(真实用例)
在 DigitalOcean 上自托管 n8n 适合许多实际场景。首先,具有高工作流执行量的团队,其中 Zapier 等 SaaS 平台因按任务计费而变得昂贵。自托管的 n8n 具有固定的每月 Droplet 成本,与执行数量无关。其次,需要数据驻留合规的组织——将客户数据保留在受控基础设施上。第三,需要为缺乏公共 API 或现成连接器的内部系统进行自定义集成的开发团队。n8n 允许您编写自定义节点或使用带有 JavaScript 的 Function 节点来自由连接。 已经在 DigitalOcean 上运行系统的团队受益于通过免费的 VPC 私有网络连接,这比公共互联网更快、更安全,零额外成本。但是,自托管并不适合所有人。如果您的团队缺乏 Linux/Docker 专业知识,更喜欢最小的正常运行时间风险,或者希望 Anthropic 处理安全补丁,n8n Cloud 的托管 SaaS 或 DigitalOcean App Platform 可能更合适。App Platform 的 Shared 层(1 vCPU/1 GiB RAM/100 GB 传输,每月 10 美元)与直接 Droplet 部署相比减少了基础设施管理负担,即使不如 Droplet 上的 Docker Compose 灵活。
- 非常适合于具有高工作流量的团队,其中 SaaS 成本超过自托管服务器费用
- 适合具有数据驻留要求或需要控制基础设施的组织
- 非常适合通过 VPC 私有网络连接自定义内部系统的团队(免费)
常见的错误和故障排除
用户经常问到的一点是:最常见的问题:来自外部系统的 webhook 无法触发。通常 docker-compose.yml 中的 WEBHOOK_URL 和 N8N_HOST 与您的实际域名不匹配。通过验证两个值与您的实际域名相匹配来修复,然后再次运行 docker compose up -d 以应用更改。
第二个问题:容器挂起或频繁重启,通常是由于 Droplet 尺寸太小。当多个工作流并发运行或处理大量数据时,1 GiB RAM 计划不足够。通过升级到 2 GiB RAM 或更高版本来修复,或从 SQLite 切换到 PostgreSQL 以减少磁盘 I/O。
第三个问题:工作流数据在重启后消失。这发生在缺少对 /home/node/.n8n 的卷装载时,将数据仅留在临时容器存储中。验证您的 docker-compose.yml 包括卷装载。第四个:时间表触发器在错误的时间运行——通常是因为未设置 GENERIC_TIMEZONE,所以 n8n 默认为 UTC 而不是曼谷时间。
第五个也是最严重的:从一开始就忘记设置 N8N_ENCRYPTION_KEY 意味着 n8n 会自动生成一个。如果您的容器在没有旧卷的情况下被重新创建,或者您在没有备份此密钥的情况下迁移服务器,加密的凭据将变得无法恢复,您必须重新配置一切。预防:从第一天起将加密密钥定义为固定的随机值,并将副本存储在服务器外的安全位置。
- Webhook 未触发:验证 WEBHOOK_URL/N8N_HOST 与您的实际域名相匹配,然后重启容器
- 容器挂起/频繁重启:Droplet 太小——升级到 2 GiB RAM 或使用 PostgreSQL
- 重启后数据丢失:缺少对 /home/node/.n8n 的卷装载
- 时间表在错误的时间运行:必须设置 GENERIC_TIMEZONE=Asia/Bangkok
- 忘记 N8N_ENCRYPTION_KEY 意味着如果容器被重新创建,凭据无法解密
最佳实践
要从第一天起长期保持自托管 n8n 的稳定和安全,请遵循这些最佳实践。将 N8N_ENCRYPTION_KEY 定义为固定的随机值,并将副本安全地存储在服务器外,以防止在需要恢复或迁移时凭据变得无法恢复。
对于具有许多工作流或频繁执行的生产环境,从 SQLite 迁移到 PostgreSQL 以更好地处理并发读写并降低数据库损坏风险。在同一个 docker-compose.yml 中将 PostgreSQL 作为另一个服务运行,或使用 DigitalOcean 托管数据库来卸载数据库管理。
在安全方面:启用 n8n 的内置用户管理来分配每个人的访问控制,而不是共享一个无密码的实例。定期使用 docker compose pull && docker compose up -d 更新您的 n8n 镜像以接收最新的安全补丁。对于网络,使用 DigitalOcean 的免费 Cloud Firewall 来限制开放端口为 22、80 和 443。当其他服务需要连接(数据库、其他 Droplet)时,使用免费的 VPC 私有网络,而不是向公共互联网暴露端口。
最后,设置监控:启用 DigitalOcean 的免费监控以监视 Droplet CPU 和内存,并为每个帐户配置一个免费的正常运行时间检查以验证 n8n 保持响应。如果您计划稍后迁移或故障转移 Droplet,使用保留 IP(只要附加到活跃的 Droplet 即免费),这样即使您移动实例,DNS 和 webhook URL 也永远不需要更改。
- 从一开始就将 N8N_ENCRYPTION_KEY 设置为固定值,并将备份存储在服务器外
- 对于具有许多工作流的生产部署,从 SQLite 迁移到 PostgreSQL
- 启用 n8n 用户管理并通过 docker compose pull 定期更新镜像以获取安全补丁