Appearance
n8n 工作流自动化指南
1. 简介
n8n (Nodemation) 是一款基于节点的可扩展工作流自动化工具。它可以将不同的服务(如 Google Sheets, Slack, GitHub, 数据库等)通过“节点”连接起来,实现跨应用的数据传输和任务自动化。
核心优势:
- 开源自托管:不同于 Zapier 或 IFTTT 的闭源收费模式,n8n 代码开源且支持私有化部署,数据安全性更高。
- 可视化编排:通过拖拽节点和连线即可构建复杂的逻辑。
- 灵活性:内置数百种集成,同时支持执行自定义 JavaScript 代码。
- 免费版功能强大:个人或小团队自托管版本功能完整。
适用场景:定期报表生成、Webhook 消息转发、跨系统数据同步、自动化运维脚本等。
2. 安装部署
n8n 基于 Node.js 开发,推荐使用 Docker 进行生产环境部署。
2.1 Docker Compose 部署 (推荐)
创建一个 docker-compose.yml 文件,持久化数据到本地。
yaml
version: "3"
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_secure_password
- N8N_HOST=n8n.example.com
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- ./n8n_data:/home/node/.n8n启动命令:
bash
docker-compose up -d2.2 npm 安装 (本地测试)
如果你已经安装了 Node.js 环境,可以直接通过 npm 安装。
bash
# 全局安装
npm install n8n -g
# 启动服务
n8n start3. 核心概念与节点详解
3.1 节点类型
n8n 的节点主要分为三类:
Trigger Nodes (触发器):工作流的起点。
Cron: 定时触发(如每天早上 9 点)。Webhook: 接收 HTTP 请求触发(支持 GET/POST)。App Triggers: 特定应用事件(如 GitHub Star, Slack 消息)。
Regular Nodes (操作节点):执行具体任务。
HTTP Request: 发送任意 API 请求(最常用)。Set: 设置或转换变量。Code: 执行自定义 JavaScript 代码。- 应用集成节点:如
Google Sheets,Telegram,MySQL等。
Flow Nodes (逻辑节点):控制执行流程。
If: 条件判断(如:如果价格 > 100 则发送邮件)。Switch: 多路分支。Merge: 合并多路数据。SplitInBatches: 批量处理(循环)。
3.2 数据流向 (Item Data)
n8n 节点之间传递的数据是 JSON 对象数组。
- 每个输入项都会触发节点执行一次(除非节点明确处理所有项)。
- 调试技巧:在编辑器中,可以点击节点执行结果的 "JSON" 视图查看具体数据结构。
4. 实战教程:从数据库导出数据并发送邮件
场景:每周一早上从 Postgres 数据库查询上周销售额,生成 Excel 表格并通过邮件发送给老板。
步骤 1: 创建 Trigger
- 添加
Schedule(Cron) 节点。 - 设置 Trigger Interval 为
Weeks,Mode 为Every Week,时间设为Monday 09:00。
步骤 2: 查询数据
添加
Postgres节点。配置 Credentials(新建数据库连接)。
Operation 选择
Execute Query。Query 内容:
sqlSELECT product_name, amount, created_at FROM sales WHERE created_at > NOW() - INTERVAL '7 days'
步骤 3: 格式转换
- 添加
Spreadsheet File节点。 - Operation 选择
Create。 - File Format 选择
XLSX。 - Binary Property 填
data(这是生成的二进制文件在内存中的变量名)。
步骤 4: 发送邮件
- 添加
Email(SMTP) 节点。 - 配置 SMTP 服务器(如 Gmail 或企业邮箱)。
- 填写 From, To, Subject。
- 在
Attachments字段填入上一步定义的 Binary Property 名 (data)。
5. 进阶技巧:表达式与代码
5.1 使用表达式 (Expressions) v-pre
在任何输入框右侧点击齿轮图标 -> Add Expression,可以引用上游数据。
- 引用上一个节点的输出:
{{ $json["field_name"] }} - 引用特定节点的数据:
{{ $('NodeName').item.json["field_name"] }}
5.2 Code 节点 (JavaScript)
当内置节点无法满足需求时,使用 Code 节点处理复杂逻辑。
javascript
// 示例:对数据进行过滤和格式化
const items = $input.all();
const result = [];
for (const item of items) {
if (item.json.status === 'active') {
result.push({
json: {
id: item.json.id,
name: item.json.name.toUpperCase(),
timestamp: new Date().toISOString()
}
});
}
}
return result;5.3 常用表达式速查表 (Cheat Sheet)
- 日期格式化 (使用 Luxon 库):
{{ $now.toFormat('yyyy-MM-dd') }}-> 2023-10-01{{ $today.minus({ days: 1 }).toFormat('yyyy-MM-dd') }}-> 昨天
- 字符串处理:
{{ $json["name"].split(' ')[0] }}-> 获取名字{{ $json["email"].toLowerCase().trim() }}-> 清洗邮箱
- 逻辑判断:
{{ $json["age"] > 18 ? 'Adult' : 'Minor' }}
5.4 错误处理 (Error Handling)
生产环境工作流必须考虑容错。
- Continue On Fail:
- 在节点设置 (Settings) 中勾选
Continue On Fail。即使节点报错,流程也会继续,错误信息会输出到error属性中。
- 在节点设置 (Settings) 中勾选
- Error Trigger:
- 创建一个单独的 Workflow,以
Error Trigger节点开始。 - 当任何 其他 工作流失败时,会自动触发此工作流。
- 用途:发送报警通知 (Slack/Email) 给管理员,包含具体的报错信息和 Workflow ID。
- 创建一个单独的 Workflow,以
6. 常见问题与维护
6.1 时区问题
如果发现 Cron 触发时间不对,检查 Docker 环境变量 GENERIC_TIMEZONE 是否设置为 Asia/Shanghai。 同时检查 n8n 界面左下角 Settings -> Personal 中的时区设置。
6.2 无法连接本地服务
在 Docker 容器中,localhost 指向容器内部。若要访问宿主机服务(如本地 MySQL),请使用 host.docker.internal(Windows/Mac)或宿主机局域网 IP。
Linux 用户注意:需在
docker-compose.yml中添加extra_hosts配置。yamlextra_hosts: - "host.docker.internal:host-gateway"
6.3 内存溢出 (OOM)
如果处理大量数据(如一次性读取 10万行 Excel),n8n 可能会崩溃。
优化:使用
SplitInBatches节点分批处理。配置:增加 Node.js 内存限制。
yamlenvironment: - NODE_OPTIONS=--max-old-space-size=4096
6.4 备份与升级
数据备份:n8n 的所有流程和凭证存储在 SQLite 数据库中(默认位于
~/.n8n/database.sqlite)。只需备份挂载的n8n_data目录即可。版本升级:
bashdocker-compose pull docker-compose up -d
