n8n 自托管部署与 AI 工作流实战:折腾两天,我终于搞明白了这个自动化神器
建站两个月了,之前写过 Dify本地部署与使用全攻略:从零构建企业级AI工作流,当时觉得 Dify 挺好用的。但最近有朋友问我:"有没有那种可以拖拖拽拽就把各种 API 串起来的工具?"我第一反应就是 n8n。
说实话,n8n 这东西我早就听说过,但一直没认真搞过。上周末终于花了两天时间从零部署到做了一堆工作流,踩了不少坑,也确实被惊艳到了。这篇文章就记录一下整个过程,从部署到实际使用,把该踩的坑都给你趟一遍。
n8n 是什么?跟 Dify 有啥区别?
先说清楚 n8n 是干嘛的。一句话概括:n8n 是一个开源的工作流自动化平台,用拖拽的方式把各种服务、API、数据库串成自动化流程。
你可能会问,这不就是 Zapier 或者 Make 吗?对,概念上差不多,但 n8n 有几个关键区别:
- 可以自托管:数据在你自己服务器上,不用担心隐私问题
- Fair-code 许可:核心代码开源,可以免费用,企业版才收费
- 原生 AI 能力:内置了 AI Agent 节点,可以直接调用大模型
- 400+ 集成:从 GitHub、Slack 到数据库、HTTP 请求,啥都有
- 可以写代码:复杂逻辑用 JavaScript/Python 节点搞定
跟 Dify 的区别呢?Dify 更侧重于 AI 应用的构建(聊天机器人、RAG、知识库),而 n8n 更侧重于通用自动化——它可以把 AI 当成工作流中的一个环节,但不是全部。两者可以搭配用,不冲突。
说白了,如果你的需求是"我有一堆 API 要串起来,中间偶尔调用一下大模型",n8n 更合适。如果你的需求是"我要做一个 AI 聊天应用",Dify 更合适。
自托管部署:Docker 一把梭
部署 n8n 最简单的方式就是 Docker。我试过两种方式:直接 docker run 和 docker-compose,推荐后者,方便管理。
方式一:docker run(快速试玩)
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
跑起来之后访问 http://localhost:5678,注册个账号就能用了。但这种方式有几个问题:
- 没有持久化(
--rm删了容器数据就没了,去掉--rm但还是不方便) - 没有 HTTPS
- 没有 PostgreSQL(默认用 SQLite,生产环境不够用)
所以如果是认真用,还是上 docker-compose。
方式二:docker-compose(推荐)
创建一个 docker-compose.yml:
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 | |
| 19 | |
| 20 | |
| 21 | |
| 22 | |
| 23 | |
| 24 | |
| 25 | |
| 26 | |
| 27 | |
| 28 | |
| 29 | |
| 30 | |
| 31 | |
| 32 | |
| 33 | |
| 34 | |
| 35 | |
| 36 | |
| 37 | |
| 38 | |
| 39 | |
| 40 | |
| 41 | |
| 42 | |
| 43 | |
| 44 | |
| 45 | |
然后 docker-compose up -d,搞定。
这里有几个坑我得提醒你:
坑1:N8N_ENCRYPTION_KEY 必须设置
n8n 用这个 key 来加密你保存的凭据(API Key 什么的)。如果不设,每次重启容器,之前保存的凭据就解密不了了,工作流全废。生成一个随机字符串:
| 1 | |
把这个值填到 N8N_ENCRYPTION_KEY 里。
坑2:WEBHOOK_URL 必须设置
如果你用了 Webhook 触发器(比如 GitHub webhook、Slack 事件回调),这个 URL 必须是外部能访问到的地址。不设的话,n8n 生成的 webhook URL 是 http://localhost:5678/...,外部服务根本调不到。
坑3:HTTPS 得自己搞
n8n 不自带 HTTPS,你得在前面放个 Nginx 反向代理或者 Caddy。我用的是 Nginx:
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 | |
| 19 | |
| 20 | |
注意那个 WebSocket 的配置,不加的话 n8n 的前端会一直连不上,页面卡在 loading。
部署完验证一下
跑起来之后访问你的域名,应该能看到 n8n 的注册页面。注册完进到主界面,点左边的 "Credentials" 看看能不能正常添加凭据,再点 "Workflows" 创建一个简单的工作流测试一下。
我第一次部署的时候,注册页面死活打不开,看了半天日志发现是 PostgreSQL 没起来——healthcheck 配错了,pg_isready 命令写成了 pg_ready,少了个 is。低级错误,但排查了半小时。
第一个工作流:定时抓取 RSS 并用 AI 总结
光部署没用,得搞点实际的东西。我做的第一个完整工作流是:每天早上自动抓取几个技术博客的 RSS,用大模型生成摘要,然后发到我的邮箱。
这个工作流的节点链路是这样的:
- Schedule Trigger:每天早上 8 点触发
- RSS Feed Read:抓取多个 RSS 源
- Split In Items:把多篇文章拆成单条处理
- HTTP Request:调用 OpenAI API 生成摘要
- Gmail:把摘要发到邮箱
配置 Schedule Trigger
双击 Schedule Trigger 节点,设置触发规则。我设的是每天早上 8 点:
- Trigger Interval: Days
- Hour: 8
- Minute: 0
配置 RSS Feed Read
添加一个 RSS Feed Read 节点,填入 RSS URL。比如我订阅了 Hacker News 的 RSS:
| 1 | |
如果你想抓多个 RSS 源,可以加多个 RSS 节点,然后用 Merge 节点合并。
配置 OpenAI 调用
这里我踩了个大坑。n8n 有内置的 OpenAI 节点,但我发现用 HTTP Request 节点更灵活:
- Method: POST
- URL:
https://api.openai.com/v1/chat/completions - Authentication: Predefined Credential → OpenAI API
- Body (JSON):
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
那个 {{ $json.title }} 是 n8n 的表达式语法,会自动取上一个节点输出的 JSON 字段。
坑4:n8n 的表达式编辑器有时候抽风
你在 UI 里点 "Expression" 模式然后拖字段过来,有时候拖过来的路径不对。建议先在前面的节点跑一次,看看输出的 JSON 结构,然后手动写表达式。
坑5:大模型节点超时
如果你用的是自部署的大模型(比如本地的 Ollama,还没部署的话可以参考这篇 零基础上手:Llama 3 与 Qwen 等主流大模型本地一键部署实战指南),响应可能很慢。n8n 默认的 HTTP Request 超时是 300 秒,但如果你的模型特别慢,可以在节点设置里调大。我有一次跑 Llama 3 70B 的时候,一个请求跑了快 5 分钟,直接超时了。后来换成了 GPT-4o-mini,速度快多了。
配置 Gmail 发送
最后加一个 Gmail 节点,配置 OAuth2 凭据(这个有点麻烦,需要去 Google Cloud Console 创建 OAuth 应用),然后设置收件人和邮件内容。
邮件内容可以用 HTML 模板:
| 1 | |
| 2 | |
| 3 | |
调试技巧
n8n 有个特别好用的功能:Pin Data。你可以在任何节点上右键,把它的输出数据 "pin" 住,这样下次运行的时候这个节点就直接用 pinned 的数据,不用真的去调 API。调试的时候特别方便,省得每次都真的去请求 OpenAI 花钱。
还有就是 Execute Node 功能——你可以只执行单个节点,不用跑整个工作流。先跑前面的节点拿到数据,pin 住,然后单独调试后面的节点。
进阶玩法:构建 AI Agent 工作流
n8n 从 1.x 版本开始内置了 AI Agent 节点,这个才是真正的杀手功能。你可以构建一个完整的 AI Agent,它能使用工具、访问数据库、调用 API,就像一个自动化的"数字员工"(如果你对智能体的构建感兴趣,也可以看看这篇 Hermes Agent 全面指南:从入门到精通的开源 AI 智能体)。
构建一个能查数据库的 AI Agent
我做了一个工作流,让 AI Agent 可以查询我的 PostgreSQL 数据库,回答关于业务数据的问题。
节点链路:
- Chat Trigger:用户发消息触发
- AI Agent:核心 Agent 节点
- OpenAI Chat Model:大模型(给 Agent 用的)
- Postgres Tool:Agent 可以使用的工具
配置 AI Agent 节点:
- Agent Type: Tools Agent
- System Message:
| 1 | |
| 2 | |
| 3 | |
然后连接 Postgres Tool 节点作为 Agent 的工具。Agent 会自动决定什么时候需要查数据库、写什么 SQL。
这个真的有点惊艳到我了。 我问它"上个月新增了多少用户?",它自己写了个 SELECT COUNT(*) FROM users WHERE created_at >= ... 的查询,然后把结果整理成人话回复给我。
坑6:Agent 节点的 token 消耗很大
因为 Agent 可能会多轮调用大模型(思考 → 决定用工具 → 看结果 → 再思考),token 消耗比普通调用多很多。我一个复杂查询花了大概 3000-5000 tokens。如果用 GPT-4o,一次查询就几毛钱。建议用便宜的模型(GPT-4o-mini、Claude Haiku)做 Agent,复杂的推理任务再切贵的模型。
坑7:Agent 可能写出危险的 SQL
Agent 写 SQL 的时候可能会写出 DELETE 或 DROP 语句(虽然概率很低)。建议给数据库用户设置只读权限,或者在 Postgres Tool 的配置里限制只能执行 SELECT。
构建一个多工具 Agent
更酷的是,你可以给 Agent 连接多个工具:
- HTTP Request Tool:让 Agent 调用任意 API
- Calculator Tool:让 Agent 能做数学计算
- Code Tool:让 Agent 能执行代码
- Vector Store Tool:让 Agent 能搜索知识库
我做了一个"全能助手"工作流,连了搜索引擎 API、天气 API、和一个本地知识库。问它"今天北京天气怎么样?帮我查一下明天的会议安排",它会分步调用天气 API 和查知识库,然后把结果汇总给我。
这种多工具 Agent 的配置关键是 System Message 要写好。你得告诉 Agent:
- 你是谁,你的职责是什么
- 你有哪些工具,每个工具什么时候用
- 回复的格式要求
- 什么情况下不要用工具(避免不必要的 API 调用)
System Message 写得好不好,直接决定了 Agent 的表现。我前几次试的时候 Agent 经常乱用工具,后来在 System Message 里加了 "只有当用户明确要求查询外部信息时才使用搜索引擎工具",就好多了。
n8n vs Dify:到底选哪个?
之前写过 Dify 的教程,现在又写了 n8n,肯定有人会问:这俩到底选哪个?
我的看法是:看你的需求。
选 n8n 的场景:
- 你需要连接各种外部服务(API、数据库、SaaS 工具)
- 你的核心需求是自动化,AI 只是其中一个环节
- 你需要复杂的条件分支、循环、错误处理
- 你是开发者,喜欢灵活控制每个细节
- 你需要定时任务、Webhook 触发等非对话式场景
选 Dify 的场景:
- 你要做一个 AI 聊天应用(客服、助手)
- 你需要 RAG(知识库问答)
- 你不太想写代码,想纯可视化搭建
- 你的用户是普通用户,需要一个聊天界面
- 你更关注 prompt 工程和模型调优
两者搭配用:
其实最理想的状态是两者搭配。比如用 n8n 做数据采集和预处理,把结果推给 Dify 做 AI 应用。或者用 Dify 的 API 作为 n8n 工作流中的一个节点。
我目前的用法是:n8n 负责各种自动化(RSS 抓取、CI/CD 通知、数据同步),Dify 负责 AI 聊天应用。各司其职,挺好。
高级配置与优化
环境变量配置
n8n 有很多环境变量可以调,这里列几个常用的:
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 | |
| 19 | |
社区节点
n8n 有个社区节点(Community Nodes)功能,可以安装第三方开发的节点。在 Settings → Community Nodes 里搜索安装。
我装了几个比较有用的:
- n8n-nodes-pdf:解析 PDF 文件
- n8n-nodes-telegram:Telegram Bot 集成(比内置的更强)
- n8n-nodes-wechat:微信相关节点
安装社区节点的方式:
| 1 | |
| 2 | |
或者直接在 n8n 的 UI 里安装,更方便。
性能优化
如果你的工作流很多、执行很频繁,需要注意性能:
1. 数据库用 PostgreSQL
前面说了,别用 SQLite。PostgreSQL 在并发场景下表现好得多。我一开始用 SQLite 跑了几天,发现执行记录查询越来越慢,换了 PostgreSQL 之后就好了。
2. 定期清理执行记录
n8n 会保存每次执行的完整数据,时间长了数据库会很大。建议设置 EXECUTIONS_DATA_PRUNE=true 和 EXECUTIONS_DATA_MAX_AGE=30,自动清理 30 天前的记录。
3. 用 Sub-Workflow 拆分复杂逻辑
如果一个工作流太复杂(几十个节点),执行会很慢。可以把它拆成多个 Sub-Workflow,主工作流用 "Execute Workflow" 节点调用子工作流。这样每个子工作流可以独立调试,也更容易维护。
4. 限制并发
如果你同时触发了太多工作流,服务器可能扛不住。可以在环境变量里设置最大并发数,或者在工作流设置里限制同时执行数。
常见问题 FAQ
Q: n8n 免费吗?
核心功能免费,可以自托管。企业功能(LDAP、SSO、多环境)需要付费。对于个人和小团队来说,免费版完全够用。
Q: n8n 支持哪些大模型?
通过内置节点支持:OpenAI、Anthropic、Google Gemini、Azure OpenAI、Ollama。通过 HTTP Request 节点可以调用任何兼容 OpenAI 格式的 API(比如 vLLM、LiteLLM)。
Q: 工作流数据安全吗?
自托管的话,数据全在你自己的服务器上。n8n 的 Fair-code 许可允许商业使用,但不允许作为 SaaS 服务转售。如果你处理敏感数据,建议:
- 设置
N8N_ENCRYPTION_KEY(加密凭据) - 用 HTTPS
- 数据库设强密码
- 定期备份
Q: 可以用 n8n 做 CI/CD 吗?
可以,但不推荐。n8n 更适合"当 X 发生时做 Y"这种事件驱动的自动化。CI/CD 还是用 GitHub Actions、GitLab CI 这些专用工具更合适。不过你可以用 n8n 来增强 CI/CD,比如当 CI 失败时自动发通知到 Slack。
Q: 手机上能用吗?
n8n 的 Web 界面在手机上体验不太好,毕竟主要是给桌面端设计的。但你可以在手机上查看执行记录、启停工作流。如果需要手机端操作,可以考虑用 n8n 的 API 搭建一个简单的移动端界面。
Q: 社区活跃吗?
相当活跃。n8n 的 GitHub 有 60K+ stars,社区论坛也有很多高质量的讨论。遇到问题基本都能搜到解决方案。官方的文档也写得不错,比我见过的很多开源项目都详细。
我的使用心得
用了两周 n8n 之后,总结几点感受:
好的方面:
- 拖拽式界面确实方便,复杂的工作流也能直观地看到数据流向
- AI Agent 功能很惊艳,能做的事情比想象的多
- 社区生态好,遇到问题基本都有人踩过坑
- 自托管意味着数据在自己手里,这点很重要
不好的方面:
- 学习曲线比想象的陡,很多概念(Credential、Expression、Pin Data)需要时间理解
- 有些节点的文档不够详细,得自己试
- 大型工作流的调试还是有点痛苦
- 移动端体验差
总体来说,n8n 值得一试。 如果你有一些重复性的工作想自动化,或者想给自己的应用加上自动化能力,n8n 是个很好的选择。它不像 Dify 那样专注于 AI,但胜在通用性强——基本上只要是有 API 的东西,都能串起来。
后面我打算再折腾一下 n8n 的 Webhook 集成,搞一个 GitHub PR 自动审查的工作流。到时候再写一篇记录。有啥问题评论区聊。
参考链接
- n8n 官网:https://n8n.io
- n8n GitHub:https://github.com/n8n-io/n8n
- n8n 文档:https://docs.n8n.io
- n8n 社区论坛:https://community.n8n.io
- Docker 部署文档:https://docs.n8n.io/hosting/installation/docker/