介绍
n8n 是一个开源的 工作流自动化工具(类似 Zapier 或 Make),允许用户通过可视化界面连接不同的应用程序和服务,构建复杂的自动化流程。它的名字源自“nodemation”(节点自动化),强调其基于节点(node)的架构。
核心特点
- 开源与可自托管
- n8n 采用 公平代码(Fair-code) 许可,允许用户免费使用、修改甚至自托管,适合注重数据隐私的企业或个人。
- 企业版提供云托管选项(需付费)。
- 可视化工作流编辑器
- 通过拖放节点(nodes)构建自动化流程,每个节点代表一个应用或操作(如 HTTP 请求、数据库查询、AI 工具调用等)。
- 广泛的集成支持
- 支持 600+ 应用和服务(如 Slack、GitHub、Google Sheets、OpenAI、Telegram 等),也支持自定义 API 调用。
- 社区贡献的节点可通过 n8n.nodes 库扩展功能。
- 灵活的执行方式
- 可手动触发、定时触发或通过 Webhook 触发。
- 支持条件分支、错误处理、数据转换等高级逻辑。
- 开发者友好
- 支持 JavaScript/Python 代码片段嵌入,满足定制化需求。
- 可导出/导入 JSON 格式的工作流,便于版本控制和共享。
常见应用场景
- 跨应用数据同步:如将表单提交自动存入数据库并发送通知。
- 自动化营销:抓取社交媒体数据,触发邮件或消息提醒。
- 内部流程自动化:审批流、定时报告生成等。
- AI 集成:调用 OpenAI/ChatGPT 处理文本并返回结果。
- IoT 控制:通过 API 连接智能家居设备。
核心概念
工作流(Workflow)
由多个节点组成的自动化流程,可以手动触发或按计划执行。
- 手动触发:点击n8n中的按钮即可运行流程
- 应用事件:当Telegram、Notion或Airtable等应用中发生某些事情时运行流程
- 按计划进行:每天、每小时或自定义间隔运行流程
- 在webhook调用时:在收到HTTP请求时运行流程
- 表单提交时:在n8n中生成Web表单并将其响应传递给工作流
- 由另一个工作流执行时:当由来自不同工作流的执行工作流节点调用时运行该流程
- 在聊天消息中:当用户发送聊天消息时运行此流程。适用于AI节点
- 其他方法:在工作流错误、文件更改等情况下运行流程
节点(Node)
工作流的基本构建块,每个节点代表一个特定操作:
- 触发器节点(如:定时器、Webhook)
- 工作节点(如:HTTP请求、数据库查询)
- 逻辑节点(如:IF条件、合并)
- 人工智能:构建自主代理,总结或搜索文档等。
- 应用程序中的操作:在Google Sheets、.Telegram或Notion等应用或→服务中执行某些操作
- 数据转换:操作、过滤或转换数据
- 流动:分支、合并或循环流程等
- 核心:运行代码、发出HTTP请求、设置webhook等
- 人机互动:等待批准或人工输入后再继续
- 添加另一个触发器:触发器启动您的工作流程。工作流程可以有多个触器。
Webhook:一种轻量级的、基于 HTTP 的回调机制,允许一个应用程序(或服务)向另一个应用程序实时推送数据。它通常用于不同系统之间的自动化通信,无需轮询(反复查询),从而更高效地触发事件或传递信息。
实时性:不同于传统的轮询(不断询问“数据有没有更新?”),Webhook 是事件驱动的,数据会立即推送,减少延迟和资源浪费。
连接(Connection)
节点间的箭头,定义数据流动方向和处理顺序
部署
windows
- nodejs部署
# 先安装nodejs,直接下面命令可以部署。我本机部署成功了。
npx n8n
# 在另一台电脑上部署报了python解释器找不到,某个文件无权限删除问题。
# 尝试安装了miniconda,并且管理员命令行执行命令,都没成功,最后选择了docker安装。
- docker部署
# windows安装docker
# 官网下载地址:https://docs.docker.com/desktop/setup/install/windows-install/
# 选择docker desktop for windows x86_64 下载
# 可以自定义安装docker目录
start /w "" "Docker Desktop Installer.exe" install --installation-dir=D:\Docker
# 任务栏搜索 启用或关闭windows功能
# 勾选:适用于Linux的Windows子系统 、虚拟机平台
# docker安装好并且上面功能启用后可以重启电脑,然后打开docker会让安装个wsl,回车安装即可。
# Setting->Docker Engine:配置一下镜像源
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://cr.console.aliyun.com",
"https://mirror.ccs.tencentyun.com"
]
}
# 保存后,docker页面左下角显示engine running 即可正常使用Docker。
# 部署n8n
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
# 即可访问:http://localhost:5678
# 启用
docker start n8n
# 停用
docker stop n8n
- 解决内网其他人访问n8n显示:安全cookie限制问题
# 禁用安全cookie会使会话cookie通过非HTTPS连接传输,这可能存在安全风险
# nodejs启用服务前,设置环境变量(仅对当前会话有效)
set N8N_SECURE_COOKIE=false
# docke启动增加配置
docker run -e N8N_SECURE_COOKIE=false n8nio/n8n
# 永久设置:此电脑 > 属性 > 高级系统设置 > 系统变量 > 新建
# 变量名:N8N_SECURE_COOKIE
# 变量值:false
# 通过配置文件持久化配置:C:\Users\<您的用户名>\.n8n\config.js
module.exports = {
secureCookie: false
}
# 访问n8n web界面,打开浏览器开发者工具(F12),查看"网络"选项卡中的响应头
# 检查Set-Cookie头中是否没有Secure标志,证明配置成功
Linux
cd /data
mkdir n8n_data
docker volume create n8n_data
docker pull n8nio/n8n
docker run -it --name n8n -p 1030:5678 -v /data/n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIE=false --user $(id -u):$(id -g) n8nio/n8n
# 如果镜像拉不下来,可以添加下面这个镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.xuanyuan.me"
]
}
systemctl daemon-reload
systemctl restart docker
- 汉化
# https://github.com/other-blowsnow/n8n-i18n-chinese/releases
# editor-ui.tar.gz
wget https://github.com/other-blowsnow/n8n-i18n-chinese/releases/download/n8n%401.95.3/editor-ui.tar.gz
cd /home/n8n_data
tar -xzvf editor-ui.tar.gz
# 解压后就是下面用到的dist
# 重启docker
docker run -d --name n8n \
-p 1030:5678 \
-v /data/n8n_be_sinicized/dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist -v /data/n8n_data:/home/node/.n8n \
-e N8N_DEFAULT_LOCALE=zh-CN \
-e N8N_SECURE_COOKIE=false \
--user $(id -u):$(id -g) \
n8nio/n8n
使用
- 访问URL注册账号,简单填写调查问题,即可获取免费的license key到邮箱
- 可以创建工作流来使用了
定时获取微博热搜数据,大模型提取内容发邮件,案例
- 点击add first step > 选择on a schedule > execute step > Back to canvas
- 右上角 ··· 选择 settings > Timezone 选择shanghai时区
- 加 > core > http request > url可以随便一个页面通过开发者模式network中拿到一个请求url
- 比如:https://weibo.com/ajax/side/hotSearch
- 加 > Data transformation > Edit Fields > 左侧input中data拖到Fields to Set中
- 加 > AI > AI Agent > Source for Prompt选择define below > Back to canvas
- prompt中添加:对于新闻数据:{{ $json.data }} 请整理并返回
- chat model加 > DeepSeek Chat Model > create new credential > 去deepseek官网申请api key > 新申请有免费的就用,没有就花10块买 > 或者自己部署一个ollama chat model
- 加 > Human in the loop > send email > create new credential > 使用qq邮箱服务器作为邮件服务器 > 上网搜索怎么配置即可 > Operation 选 send > from email选上面qq邮箱地址
- subject自己填 > Email Format 选text > 左面data拖到text框中即可
- subject自己填 > Email Format 选text > 左面data拖到text框中即可
工作流模板使用
n8n提供了丰富的自动化工作流模板,并且数量还在不断增加,这些工作流模板可以直接拿来使用
- 点击templates
- 选择一个templates
- use for free
- copy template to clipboard[json]
- 在n8n环境中新创建一个工作流,然后Ctrl + V粘贴拷贝的模版
代码使用
两个节点之间点击add,搜索code,可以让AI编写添加代码
// 初始化一个空数组,用于存储处理后的数据
const formattedItems = [];
// 遍历所有输入项
for (const item of $input.all()) {
// 获取当前项中的日期字段(假设字段名为 currentDate)
const originalDate = new Date(item.json.currentDate);
if (!isNaN(originalDate.getTime())) { // 检查日期是否有效
// 转换日期格式为 YYYY-MM-DD HH:mm:ss
const formattedDate = `${originalDate.getFullYear()}-${String(originalDate.getMonth() + 1).padStart(2, '0')}-${String(originalDate.getDate()).padStart(2, '0')} ${String(originalDate.getHours()).padStart(2, '0')}:${String(originalDate.getMinutes()).padStart(2, '0')}:${String(originalDate.getSeconds()).padStart(2, '0')}`;
// 判断是否在 9 点到 18 点之间
const hours = originalDate.getHours();
const isWithinWorkingHours = hours >= 9 && hours < 18;
// 将转换后的日期和判断结果添加到新的对象中
formattedItems.push({
json: {
...item.json, // 保留原始数据
formattedDate, // 添加新字段:格式化后的日期
isWithinWorkingHours // 添加新字段:是否在工作时间内
}
});
} else {
// 如果日期无效,仍然保留原始数据,并标记错误
formattedItems.push({
json: {
...item.json,
formattedDate: null, // 标记为无效
isWithinWorkingHours: false // 无效日期视为不在工作时间内
}
});
}
}
// 返回处理后的数据
return formattedItems;
还可以添加IF节点,将输入的timestamp拖到参数中,设定存在并且一些其他条件。
遇到的问题
使用了中文汉化包,发现点了注册页面,没反应
docker镜像版本要跟汉化包版本对应上,否则会使用不了
- 解决方法
docker pull n8nio/n8n:latest
# https://github.com/other-blowsnow/n8n-i18n-chinese/releases
# 下载最新版的editor-ui.tar.gz进行映射
使用root用户启动docker,映射了/data/n8n_data:/home/node/.n8n,发现宿主机和docker里面都没有数据
找了半天原因:
- 虽然通过 --user (id−u):(id -u):(id−u):(id -g) 指定了用户,但可能:容器内的用户 UID/GID 被映射到了 root(如果主机用户的 UID 是 0)。
- 未显式设置 N8N_USER_FOLDER 或 HOME,n8n 默认会根据 当前用户 选择家目录:
如果是 root 用户,数据会存到 /root/.n8n。
如果是 node 用户(n8n 默认用户),数据会存到 /home/node/.n8n。- 数据最后在/root/.n8n目录下找到
- 解决方法:强制指定
docker run -dit \
--name n8n \
-p 1030:5678 \
-v /data/n8n_data:/home/node/.n8n \ # 确保主机目录权限正确
-v /data/n8n_chinese_ui/dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist # 中文汉化
-e N8N_DEFAULT_LOCALE=zh-CN
-e N8N_SECURE_COOKIE=false
-e N8N_USER_FOLDER=/home/node \ # 显式指定数据目录
-e HOME=/home/node \ # 强制使用 node 用户的家目录
--user $(id -u):$(id -g) \ # 确保与主机用户一致
n8nio/n8n