n8n Linux安装与使用从入门到精通指南
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直接安装(开发测试首选)
适合快速搭建开发环境,步骤简单,便于调试。
- 安装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版本`
- 安装n8n使用npm全局安装n8n:`npm install -g n8n
验证安装
n8n -v # 输出n8n版本号即可`
- 启动n8n直接启动(开发环境):
n8n start启动成功后,终端会提示访问地址:http://localhost:5678,若需外部访问,需开放5678端口(防火墙配置见1.3)。
方式二:Docker安装(生产部署推荐)
Docker安装可避免环境冲突,便于版本管理和迁移,是生产环境的首选方式。
- 安装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`
-
拉取n8n镜像拉取官方最新稳定版镜像:
sudo docker pull n8nio/n8n:latest -
启动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`设置开机自启。
- 验证启动`# 查看容器运行状态
sudo docker ps | grep n8n
查看日志(排查启动问题)
sudo docker logs -f n8n`
方式三:Docker Compose安装(生产环境,支持多服务集成)
若需同时部署n8n和数据库(如PostgreSQL),推荐使用Docker Compose,简化多服务管理。
- 安装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`
- 创建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启动。
- 启动服务`# 进入配置文件所在目录
cd ~/n8n-compose
启动服务(后台运行)
docker-compose up -d
查看服务状态
docker-compose ps
查看日志
docker-compose logs -f n8n`
1.3 防火墙与端口配置(外部访问必备)
若需从外部浏览器访问n8n,需开放5678端口,以下是主流Linux发行版的防火墙配置:
- 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`
- Ubuntu/Debian(ufw)`# 开放5678端口
sudo ufw allow 5678/tcp
启用ufw(若未启用)
sudo ufw enable
验证端口状态
sudo ufw status`
第二部分:基础使用——熟悉n8n核心功能
2.1 首次访问与初始化配置
-
访问n8n界面在浏览器输入:
http://[Linux服务器IP]:5678,首次访问会进入初始化页面。 -
创建管理员账户按照提示设置管理员邮箱和密码(生产环境务必设置强密码),完成后进入n8n主界面。
-
熟悉主界面布局 左侧导航栏:工作流(核心)、节点库、凭证、设置等;
-
中间画布:拖拽节点、连接流程的可视化编辑区域;
-
右侧面板:节点配置、运行日志、流程详情等。
2.2 凭证管理(连接外部服务的关键)
n8n通过“凭证”管理外部服务(如MySQL、GitHub、钉钉等)的访问权限,避免在节点中直接填写敏感信息。
-
创建凭证点击左侧“凭证”→“添加凭证”,选择对应服务的凭证类型(如MySQL、API密钥、OAuth2等),按照提示填写信息(如MySQL的主机、端口、用户名、密码),保存后即可在节点中引用。
-
凭证分类与权限可通过“标签”对凭证分类,同时支持设置凭证的访问权限(仅管理员可见或指定用户可见)。
2.3 第一个工作流:定时发送邮件
通过一个简单的定时发送邮件工作流,熟悉n8n的核心操作:拖拽节点、配置参数、运行测试。
-
创建工作流点击左侧“工作流”→“新建工作流”,进入工作流编辑页面。
-
**添加“定时触发”节点(启动器)**在左侧节点库搜索“Cron”,拖拽到中间画布,配置定时规则:Cron表达式:如
0 9 * * *(每天上午9点执行); -
时区:选择Asia/Shanghai。
-
**添加“发送邮件”节点(操作节点)**拖拽“Email”节点到画布,点击节点进入配置:凭证类型:选择SMTP,填写邮箱SMTP信息(如QQ邮箱SMTP服务器smtp.qq.com,端口465,用户名、授权码);
-
邮件内容:填写收件人、主题、正文(支持变量,如{{$now}}获取当前时间)。
-
连接节点与测试运行点击“Cron”节点的输出端口,拖拽连线到“Email”节点的输入端口,完成流程连接。点击顶部“运行”按钮,测试工作流是否正常执行,可在右侧“执行日志”中查看运行状态(成功/失败原因)。
-
保存并启用工作流点击顶部“保存”,输入工作流名称(如“每日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”节点实现:
-
拖拽“IF”节点到画布,连接到触发节点后;
-
配置判断条件(如{{$json[“status”]}} === “success”);
-
“IF”节点会生成两个输出端口:“True”(条件满足)和“False”(条件不满足),分别连接不同的后续节点(如成功发送通知,失败执行重试)。
3.4 批量处理与循环
当需要处理大量数据(如批量同步数据库数据)时,使用“Split In Batches”和“Loop”节点:
-
Split In Batches:将数据按指定数量拆分(如每次处理100条),避免单次处理压力过大;
-
Loop:通过“Loop Start”和“Loop End”节点实现循环逻辑(如循环调用API直到获取所有数据)。
3.5 工作流版本管理与备份
-
版本管理:编辑工作流后,点击顶部“保存”→“保存新版本”,可添加版本说明,后续可通过“版本历史”回滚到任意版本;
-
备份恢复:
手动备份:点击左侧“设置”→“导出/导入”→“导出工作流”,下载JSON格式备份文件; -
自动备份:生产环境建议定期备份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反向代理实现:
- 安装Nginx`# CentOS
sudo yum install -y nginx
Ubuntu
sudo apt install -y nginx
启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx`
- 配置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`
- 配置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;
}
}`
- 验证配置并重启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数据库。
更多推荐

所有评论(0)