Skip to content

💡 n8n 笔记

1. 什么是 n8n?

n8n 是一款基于节点(Node-based)的公平开源(Fair-code)工作流自动化工具。简单来说,它就像是一个可以自主掌控、无限扩展的“高级版 Zapier”。通过可视化的方式,把不同的应用、数据库和 API 像搭积木一样串联起来,实现全自动化的数据流转。


2. 概念速览

在 n8n 中,有三个高频概念需要牢记:

  • Trigger(触发器): 工作流的起点。可以是“每隔一小时(定时)”、“收到一封新邮件(事件驱动)”或者“接收到一个 Webhook 请求”。
  • Node(节点): 执行具体动作的单元。比如发送一条 Slack 消息、在 MySQL 插入一条数据、或者运行一段自定义的 JavaScript/Python 脚本。
  • Data Structure(数据结构): 节点之间传递的数据一律是 JSON 数组。前一个节点的输出,就是后一个节点的输入。

3. 核心环境变量

在部署 n8n 时,强烈建议先配置以下两个至关重要的环境变量:

  • GENERIC_TIMEZONE=Asia/Shanghai:将全局时区设置为上海(北京时间),确保定时触发器(Cron)和时间节点符合本地时间,避免由于默认 UTC 时区导致的定时任务时差问题。
  • N8N_SECURE_COOKIE=false:如果你在本地或测试环境中使用 HTTP 访问(没有配置 SSL/HTTPS 证书),必须将其设置为 false。否则由于浏览器的安全 Cookie 策略,你将遇到登录后提示 Cookie 错误或无法保持登录状态的问题。

4. 多途径部署指南

途径 A:Docker 容器化部署(推荐)

使用 Docker 部署是最快、最干净的方式。通过 -e 参数可以直接将核心环境变量注入到容器中。

步骤 1:创建持久化数据目录

在宿主机上创建一个目录,用于存放 n8n 的工作流和配置数据,确保容器重启或更新时数据不丢失:

bash
mkdir -p /data/n8n

步骤 2:运行 Docker 容器

执行以下命令启动容器,并将主机的 5678 端口映射出来:

bash
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -e GENERIC_TIMEZONE=Asia/Shanghai \
  -e N8N_SECURE_COOKIE=false \
  -v /data/n8n:/home/node/.n8n \
  --restart always \
  n8nio/n8n

途径 B:Node.js 本地原生部署 (npm)

如果你不想使用容器,可以直接利用系统的 Node.js 环境进行全局安装和启动。

步骤 1:环境检查

确保系统已安装 Node.js(建议使用 Node.js v18 以上版本)和 npm:

bash
node -v
npm -v

步骤 2:全局安装 n8n

使用 npm 将 n8n 核心包安装到全局环境:

bash
npm install n8n -g

步骤 3:注入变量并启动

根据你的操作系统环境,选择对应的命令注入变量并启动 n8n:

  • Linux / macOS:

    bash
    export GENERIC_TIMEZONE=Asia/Shanghai
    export N8N_SECURE_COOKIE=false
    n8n start
  • Windows (CMD):

    cmd
    set GENERIC_TIMEZONE=Asia/Shanghai
    set N8N_SECURE_COOKIE=false
    n8n start
  • Windows (PowerShell):

    powershell
    $env:GENERIC_TIMEZONE="Asia/Shanghai"
    $env:N8N_SECURE_COOKIE="false"
    n8n start

5. 生产环境避坑建议

  • 数据库切换: n8n 默认使用内置的 SQLite 数据库。如果是生产环境高并发场景,强烈建议在启动时通过环境变量将后端数据库切换为 PostgreSQL,这样系统的稳定性和并发响应速度会得到质的飞跃。
  • 后台常驻(针对 npm 部署): 如果使用 Node.js 部署在 Linux 服务器上,直接运行 n8n start 会在关闭终端时退出。建议配合 pm2 进行后台常驻管理:
    bash
    npm install pm2 -g
    pm2 start n8n -- start