n8n部署与使用案例

介绍

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框中即可
      在这里插入图片描述

工作流模板使用

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):(idu):(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值