n8n是一款开源的无代码/低代码工作流自动化工具,支持通过可视化界面拖拽节点、配置参数来实现各类业务流程的自动化,例如数据同步、消息通知、定时任务、API集成等。本指南将详细讲解n8n在Linux系统中的安装部署、基础使用、进阶技巧及问题排查,帮助你从入门到精通掌握n8n。

第一部分:入门基础——环境准备与安装部署

1.1 了解n8n的运行依赖

n8n基于Node.js开发,运行时依赖Node.js环境,同时为了数据持久化,推荐搭配数据库(默认使用SQLite,生产环境建议MySQL/PostgreSQL)。不同安装方式对环境的要求略有差异,以下是核心依赖说明:

  • Node.js:推荐v18.x或v20.x版本(n8n对Node.js版本有明确兼容要求,避免使用过旧或过新的版本);

  • 数据库:开发环境可使用默认SQLite,生产环境建议MySQL 8.0+、PostgreSQL 12+;

  • 系统资源:最低配置1核CPU、2GB内存(生产环境建议2核4GB以上,根据工作流复杂度调整);

  • 网络:需开放端口(默认5678),确保能访问互联网以下载节点依赖和更新。

1.2 三种主流安装方式(按需选择)

Linux系统中安装n8n有多种方式,分别适用于开发测试、生产部署等不同场景,以下是详细步骤:

方式一:Node.js直接安装(开发测试首选)

适合快速搭建开发环境,步骤简单,便于调试。

  1. 安装Node.js使用nvm(Node版本管理器)安装指定版本Node.js,避免系统自带版本兼容问题:`# 安装nvm
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

刷新环境变量(或重启终端)

source ~/.bashrc

安装Node.js 20.x版本

nvm install 20

设置为默认版本

nvm use 20

验证安装

node -v # 输出v20.x.x即可
npm -v # 输出对应npm版本`

  1. 安装n8n使用npm全局安装n8n:`npm install -g n8n

验证安装

n8n -v # 输出n8n版本号即可`

  1. 启动n8n直接启动(开发环境):n8n start启动成功后,终端会提示访问地址:http://localhost:5678,若需外部访问,需开放5678端口(防火墙配置见1.3)。

方式二:Docker安装(生产部署推荐)

Docker安装可避免环境冲突,便于版本管理和迁移,是生产环境的首选方式。

  1. 安装Docker以CentOS为例,其他Linux发行版可参考Docker官方文档:`# 卸载旧版本
    sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

安装依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置Docker源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装Docker CE

sudo yum install -y docker-ce docker-ce-cli containerd.io

启动Docker并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

验证安装

sudo docker --version`

  1. 拉取n8n镜像拉取官方最新稳定版镜像:sudo docker pull n8nio/n8n:latest

  2. 启动n8n容器基础启动(使用默认SQLite,数据存储在容器内,重启后数据丢失,仅用于测试):sudo docker run -d \ --name n8n \ -p 5678:5678 \ n8nio/n8n:latest生产环境启动(数据持久化+时区配置):`# 创建本地数据目录(用于挂载容器数据)
    mkdir -p ~/n8n/data

启动容器,挂载数据目录并配置时区

sudo docker run -d
–name n8n
-p 5678:5678
-v ~/n8n/data:/home/node/.n8n
-e TZ=Asia/Shanghai
–restart unless-stopped
n8nio/n8n:latest`参数说明:`-d`后台运行;`–name`指定容器名;`-p`端口映射;`-v`数据卷挂载(避免数据丢失);`-e TZ`配置时区;`–restart`设置开机自启。

  1. 验证启动`# 查看容器运行状态
    sudo docker ps | grep n8n

查看日志(排查启动问题)

sudo docker logs -f n8n`

方式三:Docker Compose安装(生产环境,支持多服务集成)

若需同时部署n8n和数据库(如PostgreSQL),推荐使用Docker Compose,简化多服务管理。

  1. 安装Docker Compose`# 下载Docker Compose二进制文件
    sudo curl -L “https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-(uname−s)−(uname -s)-(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose

赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

验证安装

docker-compose --version`

  1. 创建docker-compose.yml文件在本地创建目录(如~/n8n-compose),并创建配置文件:`version: ‘3.8’

services:
postgres:
image: postgres:14
container_name: n8n-postgres
restart: unless-stopped
environment:
POSTGRES_USER: n8n_user
POSTGRES_PASSWORD: n8n_password
POSTGRES_DB: n8n_db
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- n8n-network

n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n_db
- DB_POSTGRESDB_USER=n8n_user
- DB_POSTGRESDB_PASSWORD=n8n_password
- N8N_PORT=5678
- N8N_HOST=0.0.0.0
ports:
- “5678:5678”
volumes:
- ~/n8n/data:/home/node/.n8n
depends_on:
- postgres
networks:
- n8n-network

networks:
n8n-network:
driver: bridge

volumes:
postgres_data:`说明:配置了PostgreSQL数据库作为n8n的数据存储,n8n服务依赖PostgreSQL启动。

  1. 启动服务`# 进入配置文件所在目录
    cd ~/n8n-compose

启动服务(后台运行)

docker-compose up -d

查看服务状态

docker-compose ps

查看日志

docker-compose logs -f n8n`

1.3 防火墙与端口配置(外部访问必备)

若需从外部浏览器访问n8n,需开放5678端口,以下是主流Linux发行版的防火墙配置:

  1. CentOS/RHEL(firewalld)`# 开放5678端口
    sudo firewall-cmd --zone=public --add-port=5678/tcp --permanent

重新加载防火墙规则

sudo firewall-cmd --reload

验证端口是否开放

sudo firewall-cmd --zone=public --query-port=5678/tcp`

  1. Ubuntu/Debian(ufw)`# 开放5678端口
    sudo ufw allow 5678/tcp

启用ufw(若未启用)

sudo ufw enable

验证端口状态

sudo ufw status`

第二部分:基础使用——熟悉n8n核心功能

2.1 首次访问与初始化配置

  1. 访问n8n界面在浏览器输入:http://[Linux服务器IP]:5678,首次访问会进入初始化页面。

  2. 创建管理员账户按照提示设置管理员邮箱和密码(生产环境务必设置强密码),完成后进入n8n主界面。

  3. 熟悉主界面布局 左侧导航栏:工作流(核心)、节点库、凭证、设置等;

  4. 中间画布:拖拽节点、连接流程的可视化编辑区域;

  5. 右侧面板:节点配置、运行日志、流程详情等。

2.2 凭证管理(连接外部服务的关键)

n8n通过“凭证”管理外部服务(如MySQL、GitHub、钉钉等)的访问权限,避免在节点中直接填写敏感信息。

  1. 创建凭证点击左侧“凭证”→“添加凭证”,选择对应服务的凭证类型(如MySQL、API密钥、OAuth2等),按照提示填写信息(如MySQL的主机、端口、用户名、密码),保存后即可在节点中引用。

  2. 凭证分类与权限可通过“标签”对凭证分类,同时支持设置凭证的访问权限(仅管理员可见或指定用户可见)。

2.3 第一个工作流:定时发送邮件

通过一个简单的定时发送邮件工作流,熟悉n8n的核心操作:拖拽节点、配置参数、运行测试。

  1. 创建工作流点击左侧“工作流”→“新建工作流”,进入工作流编辑页面。

  2. **添加“定时触发”节点(启动器)**在左侧节点库搜索“Cron”,拖拽到中间画布,配置定时规则:Cron表达式:如0 9 * * *(每天上午9点执行);

  3. 时区:选择Asia/Shanghai。

  4. **添加“发送邮件”节点(操作节点)**拖拽“Email”节点到画布,点击节点进入配置:凭证类型:选择SMTP,填写邮箱SMTP信息(如QQ邮箱SMTP服务器smtp.qq.com,端口465,用户名、授权码);

  5. 邮件内容:填写收件人、主题、正文(支持变量,如{{$now}}获取当前时间)。

  6. 连接节点与测试运行点击“Cron”节点的输出端口,拖拽连线到“Email”节点的输入端口,完成流程连接。点击顶部“运行”按钮,测试工作流是否正常执行,可在右侧“执行日志”中查看运行状态(成功/失败原因)。

  7. 保存并启用工作流点击顶部“保存”,输入工作流名称(如“每日9点发送邮件”),勾选“启用”,工作流将按照定时规则自动执行。

2.4 核心节点类型与使用场景

n8n提供数百种节点,覆盖数据处理、API集成、文件操作、通知等场景,常见节点分类:

  • 触发节点:Cron(定时)、Webhook(API触发)、Manual(手动触发)、Database(数据库变更触发);

  • 数据处理节点:Set(设置变量)、Filter(筛选数据)、Split In Batches(批量拆分数据)、Function(自定义JS代码处理数据);

  • 集成节点:数据库(MySQL、PostgreSQL、MongoDB)、云服务(AWS、阿里云、腾讯云)、办公软件(钉钉、企业微信、Slack)、API(HTTP Request,调用自定义API);

  • 通知节点:Email、SMS(短信)、DingTalk(钉钉)、WeChat(企业微信)、Telegram。

第三部分:进阶技巧——提升工作流效率

3.1 工作流变量与表达式(动态数据处理)

n8n支持通过变量和表达式实现动态数据传递,核心用法:

3.1.1 内置变量

  • {{$now}}:当前时间;

  • {{$json["字段名"]}}:获取上一节点输出的JSON数据中的指定字段(如{{$json[“name”]}}获取name字段值);

  • {{$node["节点名称"].json["字段名"]}}:获取指定节点输出的字段值(跨节点数据引用)。

3.1.2 自定义表达式

通过“Expression”编辑器编写复杂逻辑,支持JS语法和n8n内置方法:

  • 字符串拼接:"Hello " + {{$json["name"]}};

  • 条件判断:{{$json["age"] > 18 ? "成年" : "未成年"}};

  • 日期格式化:{{$now.format("YYYY-MM-DD HH:mm:ss")}}。

3.2 函数节点(自定义代码扩展)

当可视化配置无法满足需求时,可使用“Function”节点编写JS代码处理数据,示例:


// 接收上一节点的输入数据
const inputData = items[0].json;

// 自定义处理逻辑:计算年龄
const birthDate = new Date(inputData.birthDate);
const now = new Date();
const age = now.getFullYear() - birthDate.getFullYear();

// 输出处理后的数据(需保持数组格式)
return [
  {
    json: {
      ...inputData,  // 保留原始数据
      age: age
    }
  }
];

提示:函数节点中可使用items获取所有输入数据,console.log()输出日志(在执行日志中查看)。

3.3 工作流分支与条件判断

实际业务中常需根据不同条件执行不同分支,通过“IF”节点实现:

  1. 拖拽“IF”节点到画布,连接到触发节点后;

  2. 配置判断条件(如{{$json[“status”]}} === “success”);

  3. “IF”节点会生成两个输出端口:“True”(条件满足)和“False”(条件不满足),分别连接不同的后续节点(如成功发送通知,失败执行重试)。

3.4 批量处理与循环

当需要处理大量数据(如批量同步数据库数据)时,使用“Split In Batches”和“Loop”节点:

  • Split In Batches:将数据按指定数量拆分(如每次处理100条),避免单次处理压力过大;

  • Loop:通过“Loop Start”和“Loop End”节点实现循环逻辑(如循环调用API直到获取所有数据)。

3.5 工作流版本管理与备份

  1. 版本管理:编辑工作流后,点击顶部“保存”→“保存新版本”,可添加版本说明,后续可通过“版本历史”回滚到任意版本;

  2. 备份恢复:
    手动备份:点击左侧“设置”→“导出/导入”→“导出工作流”,下载JSON格式备份文件;

  3. 自动备份:生产环境建议定期备份n8n数据目录(如Docker挂载的~/n8n/data)和数据库。

第四部分:生产部署——稳定性与安全性优化

4.1 数据库优化(替换默认SQLite)

默认SQLite仅适用于开发测试,生产环境需替换为MySQL或PostgreSQL,以提升并发性能和数据可靠性。

4.1.1 配置MySQL作为数据存储(Docker方式)


# 启动MySQL容器
sudo docker run -d \
  --name n8n-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root_password \
  -e MYSQL_DATABASE=n8n_db \
  -e MYSQL_USER=n8n_user \
  -e MYSQL_PASSWORD=n8n_password \
  -v mysql_data:/var/lib/mysql \
  --restart unless-stopped \
  mysql:8.0

# 重新启动n8n容器,指定MySQL配置
sudo docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v ~/n8n/data:/home/node/.n8n \
  -e TZ=Asia/Shanghai \
  -e DB_TYPE=mysqldb \
  -e DB_MYSQLDB_HOST=[MySQL服务器IP] \
  -e DB_MYSQLDB_PORT=3306 \
  -e DB_MYSQLDB_DATABASE=n8n_db \
  -e DB_MYSQLDB_USER=n8n_user \
  -e DB_MYSQLDB_PASSWORD=n8n_password \
  --restart unless-stopped \
  --link n8n-mysql:mysql \
  n8nio/n8n:latest

4.2 启用HTTPS(提升安全性)

生产环境需启用HTTPS,避免数据传输明文泄露,推荐使用Nginx反向代理实现:

  1. 安装Nginx`# CentOS
    sudo yum install -y nginx

Ubuntu

sudo apt install -y nginx

启动Nginx并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx`

  1. 配置SSL证书通过Let’s Encrypt获取免费SSL证书(需提前解析域名到服务器IP):`# 安装Certbot
    sudo yum install -y certbot python3-certbot-nginx # CentOS

sudo apt install -y certbot python3-certbot-nginx # Ubuntu

获取证书并自动配置Nginx

sudo certbot --nginx -d your-domain.com`

  1. 配置Nginx反向代理编辑Nginx配置文件(如/etc/nginx/conf.d/n8n.conf):`server {
    listen 80;
    server_name your-domain.com;

    重定向HTTP到HTTPS

    return 301 https://hosthosthostrequest_uri;
    }

server {
listen 443 ssl;
server_name your-domain.com;

# SSL证书配置(Certbot自动生成)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;

# 反向代理到n8n
location / {
    proxy_pass http://localhost:5678;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

# WebSocket支持(n8n实时通信需要)
location /ws {
    proxy_pass http://localhost:5678/ws;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

}`

  1. 验证配置并重启Nginx`# 验证配置语法
    sudo nginx -t

重启Nginx

sudo systemctl restart nginx之后可通过https://your-domain.com`访问n8n。

4.3 性能优化与监控

4.3.1 性能优化

  • 调整Node.js内存限制:若工作流复杂,可增加Node.js内存分配,Docker方式启动时添加环境变量-e NODE_OPTIONS=--max-old-space-size=4096(4GB内存);

  • 禁用不必要的节点:在“设置”→“节点”中禁用不使用的节点,减少资源占用;

  • 工作流调度优化:避免大量工作流在同一时间触发,通过Cron表达式分散执行时间。

4.3.2 监控n8n运行状态

  • 日志监控:Docker方式可通过docker logs -f n8n实时查看日志,也可将日志挂载到本地目录,结合ELK等工具分析;

  • 健康检查:n8n提供健康检查接口http://localhost:5678/healthz,返回200表示运行正常,可集成到Prometheus、Grafana等监控工具;

  • 系统资源监控:使用top、htop、glances等工具监控服务器CPU、内存、磁盘使用率。

4.4 安全加固

  • 设置强密码:管理员账户密码需包含大小写字母、数字和特殊字符,定期更换;

  • 限制访问IP:通过Nginx配置允许特定IP访问n8n,如在location块中添加allow 192.168.1.0/24; deny all;;

  • 定期更新:及时更新n8n版本(Docker方式通过docker pull n8nio/n8n:latest拉取最新镜像后重启容器),修复安全漏洞;

  • 禁用公开注册:在“设置”→“认证”中禁用“允许新用户注册”,仅管理员可创建账户。

第五部分:问题排查与常见问题解决

5.1 安装启动问题

  • 问题1:n8n启动后无法访问排查步骤:① 检查容器是否运行(docker ps);② 检查端口是否占用(netstat -tulpn | grep 5678);③ 检查防火墙是否开放端口;④ 查看日志(docker logs n8n)定位错误。

  • 问题2:Docker启动n8n后数据丢失原因:未挂载数据卷。解决:停止容器(docker stop n8n),删除容器(docker rm n8n),重新使用-v参数挂载数据卷启动。

5.2 工作流运行问题

  • **问题1:节点执行失败,提示“凭证无效”**排查步骤:① 检查凭证配置是否正确(如API密钥、用户名密码);② 验证外部服务是否正常(如MySQL是否可连接);③ 重新创建凭证并在节点中引用。

  • 问题2:定时工作流不执行排查步骤:① 检查工作流是否已“启用”;② 验证Cron表达式是否正确(可通过Cron在线工具校验);③ 检查时区配置是否正确;④ 查看工作流日志(“执行历史”)。

  • 问题3:数据处理错误,变量无法获取排查步骤:① 查看上一节点的输出数据(执行日志中“节点输出”);② 验证变量表达式是否正确(如字段名是否拼写错误);③ 使用“Debug”节点打印变量值,定位问题。

5.3 性能问题

  • 问题:工作流执行缓慢解决方法:① 优化工作流逻辑,减少节点数量;② 使用“Split In Batches”批量处理数据;③ 升级服务器配置(增加CPU、内存);④ 替换为MySQL/PostgreSQL数据库。

更多推荐