01|n8n 入门:自托管部署与第一个工作流
n8n 是一个开源的工作流自动化引擎,名字读作 "n-eight-n"(nodemation 的缩写)。它的定位介于 Zapier / Make 这类 SaaS 自动化工具和"自己写脚本 + cron"之间:既有可视化拖拽和 400+ 内置集成,又能完全自托管、数据不出本地、还能在节点里直接写 JavaScript / Python 表达式做任意逻辑。对要处理内部数据库、内部 API 的团队来说,"自托管 + 数据可控"这一点几乎是决定性的。
这篇文章带你做三件事:用 Docker 把 n8n 跑起来、搞清楚四个核心概念、跑通第一个真正能用的工作流。
n8n 与同类工具对比
选型时最常见的问题是"它和 Zapier 有什么区别",直接看数据:
| 维度 | n8n(自托管) | Zapier | Make |
|---|---|---|---|
| 部署形态 | 自托管 / 云 | 仅云 | 仅云 |
| 数据归属 | 完全本地 | 经过 Zapier | 经过 Make |
| 计费方式 | 自托管免费 | 按任务数 | 按操作数 |
| 内置集成 | 400+ | 6000+ | 1800+ |
| 自定义代码 | 支持 JS/Python 节点 | 受限 | 受限 |
| 复杂分支/循环 | 原生支持 | 较弱 | 支持 |
| AI / LLM 编排 | 原生 AI Agent 节点 | 插件 | 插件 |
结论很清楚:要最多现成集成、不在乎数据出境、不想运维,选 Zapier;要数据可控、要写复杂逻辑、要省钱,选自托管 n8n。
四个核心概念
n8n 的全部能力建立在四个概念上,理解了它们就理解了 n8n:
| 概念 | 作用 | 类比 |
|---|---|---|
| Workflow | 一张完整的自动化流程图 | 一个程序 |
| Node(节点) | 流程中的一个步骤,有输入有输出 | 一个函数调用 |
| Trigger(触发器) | 启动工作流的节点(定时/Webhook/手动) | main 入口 |
| Credential(凭据) | 集中加密存储的 API key / 账号密码 | 环境变量保险箱 |
数据在节点之间以 JSON 数组(items) 的形式流动,每个 item 形如 { "json": { ... }, "binary": { ... } }。下游节点用表达式 {{ $json.字段名 }} 引用上游输出——这是 n8n 里最高频的语法,务必记牢。
实战 Demo:用 Docker Compose 部署 n8n
入门可以用单条 docker run,但生产建议直接上 Postgres 持久化。新建 docker-compose.yml:
version: "3.8"
services:
postgres:
image: postgres:16
restart: always
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: a_strong_password
POSTGRES_DB: n8n
volumes:
- ./pg-data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=a_strong_password
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_ENCRYPTION_KEY=replace_with_a_random_32_char_key
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
volumes:
- ./n8n-data:/home/node/.n8n
depends_on:
- postgres启动并验证:
$ docker compose up -d
[+] Running 2/2
✔ Container automation-postgres-1 Started
✔ Container automation-n8n-1 Started
$ docker compose ps
NAME IMAGE STATUS PORTS
automation-n8n-1 docker.n8n.io/n8nio/n8n:latest Up 6 seconds 0.0.0.0:5678->5678/tcp
automation-postgres-1 postgres:16 Up 7 seconds 5432/tcp
$ curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5678/healthz
200200 表示服务已就绪。浏览器打开 http://localhost:5678,首次访问会要求创建管理员账号。
关于
N8N_ENCRYPTION_KEY:它用来加密所有 Credential。务必固定下来并妥善备份——一旦丢失,已存的凭据全部无法解密。生成一个:openssl rand -hex 16。
第一个工作流:定时抓汇率并判断阈值
目标:每天 9 点拉一次汇率,如果美元兑人民币高于阈值就走"提醒"分支。三个节点搞定。
- Schedule Trigger:触发规则设为 Cron 表达式
0 9 * * *。 - HTTP Request:GET 一个公开汇率 API,例如
https://open.er-api.com/v6/latest/USD。 - IF:条件设为
{{ $json.rates.CNY }}大于7.2。
把它导出后就是一段 JSON(可直接在 n8n 里 Import from File 导入复现):
{
"name": "daily-fx-check",
"nodes": [
{
"parameters": { "rule": { "interval": [{ "field": "cronExpression", "expression": "0 9 * * *" }] } },
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [240, 300]
},
{
"parameters": { "url": "https://open.er-api.com/v6/latest/USD", "options": {} },
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [460, 300]
},
{
"parameters": {
"conditions": {
"number": [
{ "value1": "={{ $json.rates.CNY }}", "operation": "larger", "value2": 7.2 }
]
}
},
"name": "IF",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [680, 300]
}
],
"connections": {
"Schedule Trigger": { "main": [[{ "node": "HTTP Request", "type": "main", "index": 0 }]] },
"HTTP Request": { "main": [[{ "node": "IF", "type": "main", "index": 0 }]] }
}
}点 HTTP Request 节点的 Execute step,应能在右侧看到类似输出:
{
"result": "success",
"base_code": "USD",
"rates": { "CNY": 7.24, "EUR": 0.92, "JPY": 156.3 }
}7.24 > 7.2,所以 IF 节点会走 true 分支——你可以在它后面再接一个发邮件或发飞书的节点,一个完整的"定时巡检 + 条件告警"工作流就成型了。
进阶:生产部署要注意的几件事
| 项目 | 入门做法 | 生产建议 | 原因 |
|---|---|---|---|
| 数据库 | SQLite(默认) | Postgres | SQLite 并发差,执行量大时易锁库 |
| 反代/HTTPS | 直连 5678 | Nginx/Caddy + TLS | Webhook 接收外部回调需 HTTPS |
| 执行数据保留 | 永久 | EXECUTIONS_DATA_MAX_AGE=336(小时) | 执行记录会撑爆数据库 |
| 并发能力 | 单进程 main 模式 | queue 模式 + Redis + worker | 主进程不被长任务阻塞 |
| 加密密钥 | 随机生成 | 固定 + 备份 | 丢了凭据全废 |
单实例 main 模式在 2 核 4G 机器上可稳定承载约 5~10 并发执行;超过这个量级建议切 queue 模式,用 Redis 做队列、独立 worker 进程消费,主进程只负责调度与 UI。
小结
n8n 的入门门槛很低:一个 Docker Compose 文件就能跑起来,三个节点就能做出一个实用的定时巡检流程。但要记住四个概念——Workflow 是流程、Node 是步骤、Trigger 是入口、Credential 是密钥保险箱,以及数据以 JSON items 流动、用 {{ $json.x }} 引用上游。把这篇的 Compose 跑起来、把示例工作流导进去执行一遍,你就有了后续三篇的实验环境。下一篇我们用它来编排 LLM,搭出真正的 AI 工作流。

评论功能暂未开放
还没有评论
快来发表第一条评论吧