搭建N8N
mhr18 2025-08-02 20:08 3 浏览 0 评论
一、概述
n8n 是一款强大的工作流自动化工具,它允许用户通过可视化界面创建自动化工作流,无需编写复杂代码。作为一个开源的自动化平台,N8N支持连接各种服务和应用程序,实现数据流转和任务自动化。
核心特点
- 开源免费: 基于Apache 2.0许可证发布,可以自由使用和修改
- 自托管: 可以在自己的服务器上部署,保证数据隐私和安全
- 可视化界面: 通过拖拽方式创建工作流,无需编程知识
- 丰富的集成: 支持500+种服务和应用的集成
- 灵活的扩展性: 支持自定义节点和JavaScript代码
关键差异总结:
开源 vs 商业
- N8N是唯一开源且支持自托管的产品,适合对数据隐私和控制权要求高的用户
- Zapier/Make提供"开箱即用"的便捷性,但需持续付费
技术门槛
- N8N需要一定的技术能力(部署/维护/自定义开发)
- Zapier最适合非技术用户,Make适合有一定技术背景的业务人员
扩展能力
- N8N通过自定义节点和代码可实现无限扩展
- Zapier/Make的扩展受限于平台提供的功能模块
成本效益
- N8N长期成本最低(无订阅费,仅服务器成本)
- Zapier/Make在高用量场景下费用可能急剧上升
企业适用性
- 大型企业倾向N8N(数据主权+定制化)
- 中小企业更偏好Zapier/Make(快速部署+免运维)
二、配置
1、默认位置:
最常见和默认的位置是:
~/.n8n/
这里:
- ~ 代表当前用户的主目录。例如,如果你是以 pi 用户身份运行 n8n,那么路径就是 /home/pi/.n8n/。
- .n8n 是一个隐藏目录(以点开头)。你需要使用 ls -a 命令才能看到它。
这个 .n8n 目录包含了:
- database.sqlite : (默认情况下) SQLite 数据库文件,存储了你的工作流 (Workflows)、凭证 (Credentials)、执行记录 (Executions) 等核心数据。如果你配置了外部数据库(如 PostgreSQL 或 MySQL),这个文件可能不存在或不被主要使用。
- config : 可能包含一些本地配置信息的文件。
- Workflows 和 Credentials: 工作流和凭证的定义也存储在数据库中。
- 其他运行时文件: 例如加密密钥等。
如果N8N是以root用户身份运行的(而不是 pi 用户),则配置文件在/root/.n8n/ 目录下,而不是 /home/pi/.n8n/
2、配置(.env)
(1)时区和本地化
#n8n 实例时区。对于调度节点(例如 Cron)来说很重要。
GENERIC_TIMEZONE=Asia/Shanghai
#与Accept-Language 标头兼容的区域标识符。n8n 不支持区域标识符,例如de-AT。在默认区域以外的区域设置中运行时,n8n 会以所选区域设置显示 UI 字符串,并回退到en任何未翻译的字符串。
N8N_DEFAULT_LOCALE=zh-CN
(2)与 PostgreSQL 一起使用
默认情况下,n8n 使用 SQLite。n8n 还支持 PostgreSQL。n8n在 v1.0 中删除了对 MySQL 和 MariaDB 的支持。详细参数请参考官方文档
# 要使用的数据库。默认:sqlite,可选值:sqlite,postgresdb
DB_TYPE=postgresdb
# PostgreSQL 数据库的名称。默认:n8n
DB_POSTGRESDB_DATABASE=n8n
#PostgreSQL 主机。默认:localhost
DB_POSTGRESDB_HOST=localhost
#PostgreSQL 端口。默认:5432
DB_POSTGRESDB_PORT=5432
#PostgreSQL 用户。默认:postgres
DB_POSTGRESDB_USER=postgres
#PostgreSQL 密码。
DB_POSTGRESDB_PASSWORD=password123
(3) Reids 配置
在 n8n 配置 Redis 的主要作用是提升工作流的执行效率和可靠性
#使用的Redis数据库。默认:0
QUEUE_BULL_REDIS_DB=0
# Redis 主机。默认:0
QUEUE_BULL_REDIS_HOST=localhost
# 使用的 Redis 端口。默认:6379
QUEUE_BULL_REDIS_PORT=6379
#Redis 密码
QUEUE_BULL_REDIS_PASSWORD=123456
(4)S3外部数据存储
#S3 兼容外部存储中 n8n 存储桶的主机。例如,s3.us-east-1.amazonaws.com
N8N_EXTERNAL_STORAGE_S3_HOST=s3.us-east-1.amazonaws.com
#S3 兼容外部存储中的 n8n 存储桶的名称
N8N_EXTERNAL_STORAGE_S3_BUCKET_NAME=bucket
#S3 兼容外部存储中 n8n bucket 的区域。例如,us-east-1
N8N_EXTERNAL_STORAGE_S3_BUCKET_REGION=us-east-1
#S3 兼容外部存储中的访问密钥
N8N_EXTERNAL_STORAGE_S3_ACCESS_KEY=123456
#访问与 S3 兼容的外部存储中的机密。
N8N_EXTERNAL_STORAGE_S3_ACCESS_SECRET=123456
(5)其他配置
# 当部署环境不是本机,且没有域名时,需要配置此项,否则无法访问
#N8N_SECURE_COOKIE=false
#用户可访问编辑器的公共 URL。也用于从 n8n 发送的电子邮件以及基于 SAML 身份验证的重定向 URL。
N8N_EDITOR_BASE_URL=
#提供用于加密 n8n 数据库中凭证的自定义密钥。默认情况下,n8n 在首次启动时会生成一个随机密钥。
N8N_ENCRYPTION_KEY=
#设置为true以禁用 UI。默认:false
N8N_DISABLE_UI=false
#设置为true以预览模式运行。默认:false
N8N_PREVIEW_MODE=false
#启用工作流模板(true) 或禁用 (false)。默认:false
N8N_TEMPLATES_ENABLED=true
#n8n 运行的 HTTP 端口。默认:5678
N8N_PORT=5678
# 用于实现 n8n 的协议。默认:http,枚举字符串:http,https
N8N_PROTOCOL=http
# n8n 应该监听的 IP 地址。默认:0.0.0.0
N8N_LISTEN_ADDRESS=0.0.0.0
#HTTPS 协议的 SSL 密钥。
N8N_SSL_KEY=
HTTPS 协议的 SSL 证书。
N8N_SSL_CERT=
更多详细配置,可参考官网
部署
1、docker部署
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
n8n_data 为容器映射的配置文件,可在映射任意宿主机目录,配置文件.evn需要在该目录下
2、npm部署
npm n8n
3、npm启动脚本
脚本和日志目录位于 /usr/local/n8n,需要根据实际情况修改
- 保存脚本: 将下面的代码保存到一个文件,例如 n8n_service.sh
#!/bin/bash
# 服务名称
SERVICE_NAME="n8n"
# n8n 安装目录 (请根据你的实际安装目录修改)
N8N_HOME="/usr/local/n8n" # 假设全局安装
# n8n 名称
N8N_START_CMD="n8n"
# 用户名 (可选,如果需要以特定用户运行 n8n)
# N8N_USER="pi" # 替换为你的用户名
# 日志文件路径
LOG_FILE="/usr/local/n8n/n8n.log"
# 函数:获取PID(关键修改)
get_pid() {
# 匹配包含n8n的node进程
pgrep -f "node.*n8n"
}
# 函数:启动服务
start() {
echo "启动 $SERVICE_NAME 服务..."
if [ -n "$(get_pid)" ]; then
echo "$SERVICE_NAME 已经在运行。"
return 0
fi
cd "$N8N_HOME" || exit 1
source /root/.n8n/.env && nohup npx n8n >> "$LOG_FILE" 2>&1 &
echo "$SERVICE_NAME 启动成功,PID: $!,日志: $LOG_FILE"
}
# 函数:停止服务(关键修改)
stop() {
echo "停止 $SERVICE_NAME 服务..."
PIDS=$(get_pid)
if [ -z "$PIDS" ]; then
echo "$SERVICE_NAME 没有运行。"
return 0
fi
# 将PID列表转换为数组
IFS=#39;\n' read -d '' -r -a PID_ARRAY <<< "$PIDS"
# 杀死所有进程
for pid in "${PID_ARRAY[@]}"; do
if [ -n "$pid" ]; then
kill "$pid"
fi
done
# 等待所有进程结束
for pid in "${PID_ARRAY[@]}"; do
if [ -n "$pid" ]; then
while kill -0 "$pid" 2>/dev/null; do
sleep 1
done
fi
done
echo "$SERVICE_NAME 已停止。"
}
# 函数:重启服务
restart() {
echo "重启 $SERVICE_NAME 服务..."
stop
sleep 2 # 等待服务停止
start
echo "$SERVICE_NAME 重启完成。"
}
# 函数:更新服务
update() {
echo "更新 $SERVICE_NAME 服务..."
stop
sleep 5 # 等待服务彻底停止
sudo npm update n8n -g
start
echo "$SERVICE_NAME 更新完成。"
}
# 函数:检查服务状态
status() {
PID=$(pgrep -x "$N8N_START_CMD")
if [ -z "$PID" ]; then
echo "$SERVICE_NAME 未运行。"
else
echo "$SERVICE_NAME 正在运行,PID: $PID"
fi
}
# 开机自启配置
enable_autostart() {
sudo tee /etc/systemd/system/$SERVICE_NAME.service > /dev/null <<EOF
[Unit]
Description=n8n workflow automation platform
After=network.target
[Service]
Type=simple
User=$N8N_USER
WorkingDirectory=$N8N_HOME
ExecStart=/usr/bin/npm start
Restart=on-failure
StandardOutput=append:$LOG_FILE
StandardError=append:$LOG_FILE
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable $SERVICE_NAME.service
echo "$SERVICE_NAME 已配置为开机自启动."
}
disable_autostart() {
sudo systemctl disable $SERVICE_NAME.service
sudo rm /etc/systemd/system/$SERVICE_NAME.service
sudo systemctl daemon-reload
echo "$SERVICE_NAME 已禁用开机自启动."
}
# 主逻辑
case "$1" in
start)
start
;; # 启动
stop)
stop
;; # 停止
restart)
restart
;; # 重启
update)
update
;; # 更新
status)
status
;; # 状态
enable_autostart)
enable_autostart
;;
disable_autostart)
disable_autostart
;;
*)
echo "用法: $0 {start|stop|restart|update|status|enable_autostart|disable_autostart}"
exit 1
;;
esac
exit 0
- 修改权限: 使脚本可执行
chmod +x n8n_service.sh
- 使用脚本:
- 启动 n8n: sudo ./n8n_service.sh start
- 停止 n8n: sudo ./n8n_service.sh stop
- 重启 n8n: sudo ./n8n_service.sh restart
- 更新 n8n: sudo ./n8n_service.sh update
- 查看状态: sudo ./n8n_service.sh status
- 开启自启动: sudo ./n8n_service.sh enable_autostart
- 关闭自启动: sudo ./n8n_service.sh disable_autostart
- 日志: n8n 的日志会输出到 /var/log/n8n.log 文件。
- 开机自启 (Systemd):
脚本中已经包含了enable_autostart() 函数,它会创建一个 systemd 服务文件,并启用开机自启。你需要使用 sudo ./n8n_service.sh enable_autostart 命令来启用它。
解释:
- #!/bin/bash : 指定脚本使用 Bash 解释器。
- 变量: 脚本开头定义了一些变量,方便修改和管理。
- 函数: 脚本定义了多个函数,每个函数执行一个特定的操作 (启动、停止、重启等)。
- case语句: 根据用户输入的参数,执行相应的函数。
- nohup : 使程序在后台运行。
- pgrep : 查找进程 ID。
- kill : 停止进程。
- npm update : 更新 n8n 包。
- Systemd 配置: 使用 systemctl 命令来管理 systemd 服务,实现开机自启。 创建 /etc/systemd/system/n8n.service 文件,并配置服务的启动方式,用户,工作目录以及日志。
相关推荐
- 外贸独立站卡成PPT?你可能用错了对象缓存!
-
最近帮一个上海的电子元器件客户优化网站,发现他的WooCommerce后台操作要等5秒才能响应——查了下服务器日志,MySQL查询每秒炸出200+次!原来他的"高性能"主机根本没用对象...
- 搭建N8N
-
一、概述n8n是一款强大的工作流自动化工具,它允许用户通过可视化界面创建自动化工作流,无需编写复杂代码。作为一个开源的自动化平台,N8N支持连接各种服务和应用程序,实现数据流转和任务自动化。核心特点...
- 性能优化!7个策略,让Spring Boot 处理每秒百万请求
-
首先,我需要确定这个问题的背景。可能用户是在处理高并发的系统,或者正在设计一个需要应对大流量的应用。他们的身份可能是后端开发工程师,或者是系统架构师,对性能优化有较高需求。接下来,我要想,处理百万级的...
- 定时任务优化总结(从半个小时优化到秒级)
-
整体优化思路:1.按需查询、2.分小批次游标查询、3.JED场景下按数据库分片分组更新、4.精准定位要处理的数据、5.负载均衡业务背景:站外广告投放平台在做推广管理状态优化重构的时候,引入了...
- 跨境电商建站隐藏技巧:Redis缓存,让站点“记住”用户更高效
-
用户登录后,每次刷新页面都要重新验证身份,有时候还会出现“会话丢失”,用户不得不重新登录,体验很差找我们帮忙后,我们建议用Redis缓存会话数据。简单来说,Redis就像站点的“临时记事本”,用户登...
- 服务架构性能优化与Java实现
-
服务架构性能优化大全(附Java代码实现)一、缓存核心思想:将高频访问数据存储在高速存储中,减少慢速存储(如数据库)访问场景:读多写少的数据(用户信息、配置数据)Java实现:使用Caffeine缓存...
- 百万并发不是梦!Nginx高并发优化配置与性能调优全解
-
Nginx的最大转发能力受硬件、配置和系统参数影响,处理超高并发请求时需多维度优化和扩展。以下是具体分析和解决方案:一、Nginx最大转发能力的关键因素硬件资源CPU:Nginx依赖多核CPU,...
- 面试官:工作中优化MySQL的手段有哪些?
-
MySQL是面试中必问的模块,而MySQL中的优化内容又是常见的面试题,所以本文来看“工作中优化MySQL的手段有哪些?”。工作中常见的MySQL优化手段分为以下五大类:索引优化:确保高频查...
- 万字长文|RAG优化全攻略:微服务部署+动态权重策略,代码级详解
-
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在官网-聚客AI学院大模型应用开发微调项目实践课程学习平台从理论到实践,全面解析RAG性能瓶颈与高阶优化方案。一、RAG核心架...
- 在Windows环境下,本地部署和启动开源项目Ragflow的源代码
-
在当前AI领域中,基于检索增强生成(RAG)的应用备受关注,而开源项目RAGFlow因其灵活性和功能性成为了一个热门选择。不过,由于其快速的版本迭代,可能会存在一些Bug,并且在实际项目落地时通常需要...
- 这款 .NET 9 + React 后台权限管理系统太强了!支持多租户、按钮权限(简单易用且文档齐全)
-
前言在数字化转型浪潮中,高效且安全的权限管理是后台系统的核心基石。传统方案或依赖臃肿的三方框架,或难以满足细粒度权限需求。今天推荐一款完全独立开发、基于前沿技术栈开发的RBAC权限系统。它摒弃了现成A...
- 开源声明:只是一个随便写写的管理系统(认真脸)
-
最近微信公众号和技术博客都断更了,最近2了两周时间撸了一套管理系统的脚手架。原因是因为最近项目需要用到,但是找了一圈Github或者Gitee,基本都不合适。要么有前端,配套后端是Node而...
- 「第七期」深信服go实习一面二面HR面
-
一面面试时长:1h自我介绍channel知识点协程goroutinemysql的两种存储引擎InnoDB索引redis使用单线程还是多线程?有多少个库?redis持久化有哪些?各自优势?谁更常用?P...
- Go中使用sync.Map实现线程安全的缓存
-
不依赖外部库,在Go中实现自己的线程安全缓存照片来源:PossessedPhotography在Unsplash缓存是优化现代应用程序性能的关键方面。它允许您存储并快速检索昂贵操作的结果或经常访...
- Redis中RedisTemplate 和 StringRedisTemplate
-
前言:RedisTemplate和StringRedisTemplate都是Spring提供的操作Redis的模板类,但它们之间在序列化方式和使用场景上有显著区别。序列化方式不同Redi...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (83)
- php redis (97)
- redis 存储 (67)
- redis 锁 (74)
- 启动 redis (73)
- redis 时间 (60)
- redis 删除 (69)
- redis内存 (64)
- redis并发 (53)
- redis 主从 (71)
- redis同步 (53)
- redis结构 (53)
- redis 订阅 (54)
- redis 登录 (62)
- redis 面试 (58)
- redis问题 (54)
- 阿里 redis (67)
- redis的缓存 (57)
- lua redis (59)
- redis 连接池 (64)