n8n(意为“node everywhere node”)是一款强大的开源工作流自动化平台,赋予开发者对集成与数据流的完全掌控能力。与 Zapier 等 SaaS 解决方案不同,n8n 支持在您自己的基础设施上进行自托管(Self-hosted),从而提供无与伦比的灵活性、数据隐私保障和可扩展性。
本教程旨在为初学者提供一个友好的指南,详细介绍如何在 Ubuntu 服务器上使用 Docker Compose 安装和配置 n8n。您还将学习如何解决常见的设置错误、使用 HTTPS 保护您的实例,以及避免生产环境部署中的常见陷阱。
核心要点概览
- 推荐自托管(Self-hosting):n8n 特别适合寻求完全控制、数据隐私和工作流自动化各个方面定制能力的开发者和小型团队。
- 基于 Docker Compose 部署在 Ubuntu:这是一种强大且适用于生产环境的 n8n 部署方式,它简化了多服务管理,易于升级,并提供了内置的重启策略。
- 初始设置:涵盖配置 PostgreSQL 数据库以持久化存储工作流和凭证,为 n8n 及其支持服务配置 Docker 容器,使用 Nginx 和 Let’s Encrypt 设置 HTTPS 以确保安全的 Web 访问,以及创建所有者账户。
- 保护 n8n 实例:通过启用 HTTPS 加密所有流量,设置强凭证,并配置环境变量以避免不安全的 Cookie 和开放端口。生产环境部署需要限制访问、使用防火墙并定期更新容器。
- 免费许可证激活:激活免费许可证可以解锁高级工作流触发器、额外集成以及社区用户的优先支持等高级功能。
- 可视化工作流构建:使用 n8n 直观的拖放编辑器构建工作流,轻松添加触发器(Triggers)、设置条件逻辑、执行 Shell 命令,并连接到数百个第三方服务,无需编写代码。
- 示例用例:例如,使用 UptimeRobot 监控服务器正常运行时间,n8n 可自动运行 Shell 命令尝试恢复,并通过 Slack、WhatsApp 或 Discord 等渠道向团队发送实时通知。
- 可扩展设计:n8n 可与 AWS、GCP、Azure 等云平台、Jira、Zendesk 等票务系统,甚至智能 AI 框架集成,实现更高级的智能自动化。
什么是 n8n 以及为何选择它?
n8n 允许您通过可视化界面连接各种服务并自动化工作流。您可以集成 API、数据库、云应用程序,甚至使用 JavaScript 实现自定义逻辑。
n8n 作为一款灵活、对开发者友好的自动化平台,凭借其丰富的功能集,在集成和工作流管理方面表现出色:
- 可视化工作流编辑器(Visual Workflow Editor):通过拖放设计器构建、可视化和配置复杂自动化流程,无需编写代码。
- 300+ 预置集成(Integrations):无缝连接到 GitHub、Google Sheets、Slack、MySQL、AWS、Discord、Trello 等大量主流服务和应用程序。
- 自托管(Self-hosting)支持:支持使用 Docker、Docker Compose 或直接在裸机服务器上部署 n8n,提供对数据、安全性、扩展性和自定义配置的完全控制。
- 原生 JavaScript 功能:使用内置的 Function 节点,直接在工作流中插入自定义 JavaScript 代码,用于数据转换、实现业务逻辑或与 API 交互。
- 事件驱动执行(Event-driven Execution):根据传入的 Webhook、计划的 Cron Job、连接应用程序中的更改或手动调用等事件触发工作流。
- 模块化和可扩展架构:支持添加自定义节点,创建可重用子工作流,并通过社区插件或您自己的代码扩展 n8n 的功能。
- 强大的安全和访问控制:支持启用身份验证(Authentication)、HTTPS 和细粒度的用户权限,以保护工作流和敏感数据。
n8n 具有极高的灵活性和可扩展性,既能处理简单的自动化任务,也能胜任复杂的企业级工作流需求。
选择合适的部署方式:云端 vs. 自托管
| 选项 | 优点 | 缺点 | 推荐用户 |
|---|---|---|---|
| n8n 云服务 | 无需设置,由官方托管基础设施,可扩展 | 付费订阅,对后端控制有限 | 非技术用户,追求快速启动 |
| 通过 Docker 自托管 | 完全控制,成本效益高,数据安全有保障 | 需要自行设置和服务器维护 | 开发者,拥有基础设施的团队 |
| 裸机(Node.js) | 最大灵活性,适用于特定边缘用例 | 需要手动配置和更新,维护成本高 | 高级用户,或有特殊环境需求者 |
对于大多数开发者和小型团队而言,在 Ubuntu 上基于 Docker 自托管 n8n 提供了控制与简便性的最佳平衡。
前提条件
在开始安装之前,请确保您已准备好以下条件:
- 运行 Ubuntu 22.04(或更高版本)的服务器。
- 一个指向您服务器 IP 地址的注册域名。
- Root 访问权限或
sudo权限。 - 已安装 Docker 和 Docker Compose。
- 可选:用于 Let’s Encrypt SSL 证书的电子邮件账户。
您可以使用以下命令安装 Docker 和 Docker Compose:
sudo apt update
sudo apt install docker.io docker-compose -y
步骤1:创建 Docker Compose 配置
为您的 n8n 栈设置一个专门的目录,并进入该目录:
mkdir ~/n8n && cd ~/n8n
nano docker-compose.yml
将以下最小化配置(包含 PostgreSQL 数据库和 n8n 服务)粘贴到 docker-compose.yml 文件中:
version: '3.7'
services:
db:
image: postgres:14
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8npass
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8npass
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=strongpass
- N8N_HOST=n8n.yourdomain.com
- WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com
depends_on:
- db
volumes:
- n8n_data:/home/node/.n8n
volumes:
postgres_data:
n8n_data:
重要提示:
- 请务必将
POSTGRES_PASSWORD和N8N_BASIC_AUTH_PASSWORD的值替换为您的强密码。 - 将
N8N_HOST和WEBHOOK_TUNNEL_URL中的n8n.yourdomain.com替换为您自己的域名。
步骤2:启动 n8n 并验证安装
在 ~/n8n 目录下,运行以下命令启动 Docker 容器:
docker-compose up -d
访问 n8n Web 界面
- 在浏览器中访问您的服务器 IP 地址和 n8n 端口:
http://your_server_ip:5678 - 或者,在设置好 DNS 解析和反向代理后,使用您的域名访问。
重要提示: 如果您通过 IP 地址或未使用 HTTPS 的域名访问 n8n,可能会遇到浏览器安全警告。这是因为 n8n 默认使用安全的 Cookie,这些 Cookie 需要 HTTPS 环境。
解决方案:
- 推荐(生产环境):配置有效的 TLS 证书以启用 HTTPS。
- 仅用于本地开发:设置环境变量
N8N_SECURE_COOKIE=false(请注意,这在生产环境中是不安全的)。
步骤3:使用 HTTPS 保护 n8n
我们将使用 Nginx 作为反向代理,并结合 Let’s Encrypt 颁发的 SSL 证书,通过 HTTPS 为 n8n 提供安全访问。
安装 Nginx 和 Certbot
sudo apt install nginx certbot python3-certbot-nginx -y
注意: 如果您仅想使用 HTTP(不建议用于生产环境),可以使用以下 Nginx 配置作为 n8n 的反向代理:
选项1:仅 HTTP 代理(用于本地或不安全设置)
创建一个 Nginx 配置文件,例如 /etc/nginx/sites-available/n8n:
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;
}
}
选项2:HTTPS 代理(推荐用于生产环境)
此配置用于启用 HTTPS,并等待您通过 Certbot 获取 SSL 证书。同样创建 Nginx 配置文件 /etc/nginx/sites-available/n8n:
server {
listen 443 ssl;
server_name n8n.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem;
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 配置,然后重新加载 Nginx 服务:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
颁发 SSL 证书
现在使用 Certbot 为您的域名颁发 Let’s Encrypt SSL 证书:
sudo certbot --nginx -d n8n.yourdomain.com
Certbot 将引导您完成证书颁发过程,并自动修改 Nginx 配置以使用新证书。
n8n Web 界面初始设置
一旦 n8n 成功运行在 https://n8n.yourdomain.com,您将看到一系列设置屏幕,然后才能进入主工作流仪表板。
1. 设置所有者账户
第一个屏幕会提示您创建所有者账户,需要输入电子邮件地址、名字、姓氏和密码(密码长度至少8个字符,包含1个数字和1个大写字母)。
2. 定制您的实例
账户创建后,n8n 会提出一些可选问题来个性化您的设置,这些问题并非强制,但有助于优化您的使用体验。
3. 免费功能注册
您可以选择通过注册社区实例来免费解锁部分付费功能(如执行历史、高级调试和文件夹结构)。您需要输入电子邮件地址以接收免费许可证密钥。
4. 许可证密钥激活
输入电子邮件后,请检查您的收件箱以获取许可证密钥。您将收到一个唯一的激活码,可以按照以下步骤输入:
导航至:设置 → 用法和计划 → 输入激活密钥。
提交密钥后,您的实例将显示为“已注册”,从而解锁高级功能以供终身使用。这些初始步骤完成了 n8n 界面的设置,并解锁了生产使用所需的功能。
步骤4:创建您的第一个工作流
一旦您的 n8n 实例在 https://n8n.yourdomain.com 上运行,您就可以在几分钟内创建并测试您的第一个自动化工作流。以下是如何通过 Web 界面完成此操作:
步骤1:注册/登录
访问您的域名后,系统会提示您注册并创建您的所有者账户。这将取代 Docker Compose 中硬编码凭证的需要。
步骤2:创建新工作流
登录 n8n 仪表板后,点击顶部栏的“新工作流(New Workflow)”。这将打开可视化编辑器,您将在此构建自动化流程。
步骤3:添加 Webhook 触发器
- 从左侧边栏拖入一个 Webhook 节点。
- 将 HTTP 方法(HTTP Method) 设置为
POST。 - 将 路径(Path) 设置为
test-webhook。 - 点击 保存(Save)。
步骤4:添加响应节点
- 拖入一个 Set 节点并将其连接到 Webhook 节点。
- 在 Set 节点中,点击“添加值(Add Value)”→“字符串(String)”。
- 将名称输入为
message,值输入为"Hello from n8n!"。
步骤5:激活工作流
切换右上角的**“Active”**开关以启用工作流。
步骤6:触发工作流
使用以下 curl 命令触发工作流:
curl -X POST https://n8n.yourdomain.com/webhook/test-webhook
如果成功,您将在响应中看到消息 "Hello from n8n!",并且执行日志将出现在 n8n 仪表板中。
恭喜,您已成功在 n8n 中构建了您的第一个自动化工作流!
示例工作流:服务器停机恢复与通知
为了演示 n8n 在实际自动化中的应用,这里有一个使用 UptimeRobot 监控并处理服务器或域名停机的工作流。此设置能检测到故障,触发 Shell 命令重启服务,必要时更新 Cloudflare 上的 DNS 或 SSL 设置,并发送实时警报。
用例场景
- 使用 UptimeRobot 监控您的域名/服务器的运行状态。
- 当检测到停机故障时,通过 Shell 命令重启 Nginx 或其他相关服务。
- 在必要时连接 Cloudflare API,执行高级域名管理任务,例如切换 SSL 设置、更新 DNS 记录或清除 CDN 缓存。
- 通过 Slack 和 WhatsApp 等并行渠道向所有相关团队成员发送实时通知。
- 通过 Discord 设置审批步骤,暂停工作流,等待管理员手动批准或确认。
- 循环监控器以持续进行健康检查。
工作流分解
- 计划触发器(Schedule Trigger):自动在预设间隔(例如,每5或10分钟)启动工作流,确保持续的健康检查。
- 获取监控器 (UptimeRobot):连接到 UptimeRobot API,获取所有配置监控器的实时状态。
- 执行命令(Execute Command):当检测到故障时,在服务器上运行 Shell 命令,以重启 Nginx 或其他服务。
- Cloudflare 集成:连接 Cloudflare API,执行高级域名管理任务,如切换 SSL 设置、更新 DNS 记录或清除缓存。
- 发送通知:使用并行节点通过 Slack 和 WhatsApp 向所有相关团队成员发送实时通知。
- 审批步骤 (Discord):暂停工作流,向指定的 Discord 频道发送消息,请求管理员手动批准。
- 遍历项(Iterate Items):循环遍历所有受监控的端点或服务,为每个项重复健康检查和修复过程。
这个示例突出了 n8n 如何在无需人工干预的情况下实现主动事件恢复和警报,除非需要人工审批。其模块化设计还允许您扩展此逻辑,以包括日志记录、升级工作流或与外部票务系统集成。
常见错误排除
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 401 Unauthorized 未授权 | 缺少或不正确的基本认证(Basic Auth) | 仔细检查 N8N_BASIC_AUTH_ACTIVE、N8N_BASIC_AUTH_USER 和 N8N_BASIC_AUTH_PASSWORD 等环境变量设置。 |
| Webhook 未触发 | 域名/DNS 配置错误 | 验证 WEBHOOK_TUNNEL_URL 环境变量是否正确配置为可访问的 URL,并检查 DNS 解析是否生效。 |
| JavaScript 堆内存不足 | Node.js 进程内存不足 | 在 n8n 服务的环境变量中添加 NODE_OPTIONS=--max-old-space-size=2048 来增加 Node.js 进程可用的内存大小(单位 MB)。 |
| 卷权限被拒绝(Permission Denied on Volume) | 文件系统所有权问题 | 执行 sudo chown -R 1000:1000 ./n8n_data 命令,确保 Docker 容器内的用户有权限访问挂载卷。 |
| SSL 不工作 | 证书缺失或 DNS 未完全传播 | 等待 DNS 传播完成,重新尝试 certbot 命令获取证书,并确保您的域名 DNS 记录指向正确的服务器 IP。 |
常见问题 (FAQs)
Q1: 在 Ubuntu 上安装 n8n 的前提条件是什么? A1: 需要 Ubuntu 22.04+ 服务器(具备 root/sudo 权限),一个指向服务器 IP 的注册域名,以及已安装 Docker 和 Docker Compose。建议提供一个用于 SSL 证书(Let’s Encrypt)的电子邮件地址。
Q2: 在 Ubuntu 上为生产环境安装 n8n 的最佳方式是什么? A2: 推荐使用 Docker Compose。此方法将 n8n 及其依赖项(如 PostgreSQL)隔离在容器中,便于升级、扩展和备份,并可通过环境变量定义持久化存储和重启策略。
Q3: 如何使用 HTTPS 保护 Ubuntu 上的 n8n 实例? A3: 在 n8n Docker 容器前设置反向代理(如 Nginx),使用 Let’s Encrypt 获取免费 SSL 证书,并配置 Nginx 将 HTTPS 流量转发到 n8n 容器。
Q4: 在 Ubuntu 上,n8n 是否需要独立的数据库? A4: 是的,对于生产部署,强烈建议使用 PostgreSQL 等外部数据库,而非默认的 SQLite,以确保数据持久性、可靠性和易于扩展。
Q5: 如何备份 n8n 实例?
A5: 定期备份 n8n_data 和 postgres_data Docker 卷。对于数据库级别的备份,可以使用 PostgreSQL 命令(如 pg_dump)导出数据。
Q6: n8n 能与 Git 进行版本控制吗? A6: 可以。虽然 n8n 不提供工作流的原生 Git 集成,但您可以将工作流导出为 JSON 文件并提交到 Git 仓库进行版本控制。
Q7: 如何安全地升级 n8n 实例?
A7: 使用 Docker Compose 时,只需使用 docker-compose pull 拉取最新镜像,然后使用 docker-compose up -d 重启容器。在升级前务必备份 Docker 卷,以防万一。
Q8: n8n 中“活跃(Active)”和“手动(Manual)”执行有什么区别? A8: “活跃”执行由真实世界事件(如 Webhook 请求、计划触发器)触发;“手动”执行则在开发过程中通过点击“执行工作流(Execute Workflow)”按钮发生。
Q9: n8n 能扩展以处理高并发工作流吗? A9: 可以,n8n 支持使用队列模式(Queue Mode)进行扩展。在此设置中,中央队列(如 Redis)将作业分发到多个 n8n 工作实例,适用于高并发场景。
Q10: n8n 是否支持并行运行多个工作流? A10: 是的,只要服务器资源充足,n8n 就支持并行执行多个工作流。每个工作流执行都是独立的,互不干扰。
延伸阅读
总结
n8n 为开发者提供了一个强大、可扩展的平台,用于自动化从简单电子邮件警报到完整后端编排的各种工作流。通过在 Ubuntu 上使用 Docker 自托管 n8n,您可以同时实现完全控制和成本节约。
一次设置,您将发现 n8n 在项目中的众多用例,从触发 CI/CD 任务到监控 Webhook 或集成 AI 服务。您还可以通过访问我们的使用 Agentic AI 构建自主系统指南,探索代理工作流如何驱动自主系统。
关于
关注我获取更多资讯