Skip to content
2026-05-251分钟automationn8ndockerworkflowgetting-started

01|n8n 入门:自托管部署与第一个工作流

n8n 是一个开源的工作流自动化引擎,名字读作 "n-eight-n"(nodemation 的缩写)。它的定位介于 Zapier / Make 这类 SaaS 自动化工具和"自己写脚本 + cron"之间:既有可视化拖拽和 400+ 内置集成,又能完全自托管、数据不出本地、还能在节点里直接写 JavaScript / Python 表达式做任意逻辑。对要处理内部数据库、内部 API 的团队来说,"自托管 + 数据可控"这一点几乎是决定性的。

这篇文章带你做三件事:用 Docker 把 n8n 跑起来、搞清楚四个核心概念、跑通第一个真正能用的工作流。

n8n 与同类工具对比

选型时最常见的问题是"它和 Zapier 有什么区别",直接看数据:

维度n8n(自托管)ZapierMake
部署形态自托管 / 云仅云仅云
数据归属完全本地经过 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

yaml
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

启动并验证:

bash
$ 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
200

200 表示服务已就绪。浏览器打开 http://localhost:5678,首次访问会要求创建管理员账号。

关于 N8N_ENCRYPTION_KEY:它用来加密所有 Credential。务必固定下来并妥善备份——一旦丢失,已存的凭据全部无法解密。生成一个:openssl rand -hex 16

第一个工作流:定时抓汇率并判断阈值

目标:每天 9 点拉一次汇率,如果美元兑人民币高于阈值就走"提醒"分支。三个节点搞定。

  1. Schedule Trigger:触发规则设为 Cron 表达式 0 9 * * *
  2. HTTP Request:GET 一个公开汇率 API,例如 https://open.er-api.com/v6/latest/USD
  3. IF:条件设为 {{ $json.rates.CNY }} 大于 7.2

把它导出后就是一段 JSON(可直接在 n8n 里 Import from File 导入复现):

json
{
  "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,应能在右侧看到类似输出:

json
{
  "result": "success",
  "base_code": "USD",
  "rates": { "CNY": 7.24, "EUR": 0.92, "JPY": 156.3 }
}

7.24 > 7.2,所以 IF 节点会走 true 分支——你可以在它后面再接一个发邮件或发飞书的节点,一个完整的"定时巡检 + 条件告警"工作流就成型了。

进阶:生产部署要注意的几件事

项目入门做法生产建议原因
数据库SQLite(默认)PostgresSQLite 并发差,执行量大时易锁库
反代/HTTPS直连 5678Nginx/Caddy + TLSWebhook 接收外部回调需 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 工作流。

0 条评论
Markdown

评论功能暂未开放

还没有评论

快来发表第一条评论吧

© 2026 A2DATA. All rights reserved.