在上篇文章中,我们讨论了如何让n8n支持局域网访问。很多朋友私信问我,通过npm安装的n8n应该如何配置环境变量?确实,相比Docker的配置方式,npm安装的配置更加灵活,但也更容易出错。今天我就把各种配置方法系统地整理一下。
为什么环境变量配置这么重要
n8n的很多核心功能都依赖环境变量来控制,比如:
- 访问控制:是否启用基础认证
- 网络配置:监听地址、端口、Webhook URL
- 数据存储:数据库连接、文件存储路径
- 功能开关:是否启用某些实验性功能
正确配置环境变量,不仅能让n8n正常运行,还能提升安全性和稳定性。
方案一:临时配置(适合快速测试)
这是最简单直接的方式,适合快速验证某个配置是否生效。
基本用法
在启动命令前直接设置环境变量:
N8N_BASIC_AUTH_ACTIVE=true \N8N_BASIC_AUTH_USER=admin \N8N_BASIC_AUTH_PASSWORD=your_secure_password \N8N_HOST=0.0.0.0 \N8N_PORT=5678 \WEBHOOK_URL=http://192.168.1.100:5678 \n8n start优点和缺点
优点:
- 简单直接,不需要额外配置文件
- 适合快速测试和开发环境
缺点:
- 每次启动都要重新输入
- 不适合生产环境
- 容易出错,命令太长
适用场景
- 本地开发测试
- 临时验证某个配置
- 快速搭建演示环境
方案二:PM2守护进程配置(生产环境推荐)
PM2是Node.js应用的进程管理器,特别适合生产环境。它能自动重启、日志管理、监控等功能。
安装PM2
npm install -g pm2创建配置文件
在项目根目录创建ecosystem.config.js文件:
module.exports = { apps: [{ name: "n8n-production", script: "n8n", instances: 1, autorestart: true, watch: false, max_memory_restart: '1G', env: { NODE_ENV: "production", N8N_HOST: "0.0.0.0", N8N_PORT: "5678", N8N_PROTOCOL: "http", N8N_BASIC_AUTH_ACTIVE: "true", N8N_BASIC_AUTH_USER: "admin", N8N_BASIC_AUTH_PASSWORD: "your_secure_password_here", WEBHOOK_URL: "http://your-server-ip:5678", N8N_PATH: "/", N8N_TIMEZONE: "Asia/Shanghai", N8N_LOG_LEVEL: "info", N8N_LOG_OUTPUT: "console,file", N8N_LOG_FILE_LOCATION: "/var/log/n8n/", N8N_METRICS: "false", N8N_DIAGNOSTICS_ENABLED: "false", N8N_EDITOR_BASE_URL: "http://your-server-ip:5678", N8N_HOST: "0.0.0.0", N8N_PORT: "5678", EXECUTIONS_MODE: "queue", QUEUE_BULL_REDIS_HOST: "localhost", QUEUE_BULL_REDIS_PORT: "6379", QUEUE_BULL_REDIS_DB: "0" } }]}启动和管理
# 启动应用pm2 start ecosystem.config.js
# 查看状态pm2 status
# 查看日志pm2 logs n8n-production
# 重启应用pm2 restart n8n-production
# 停止应用pm2 stop n8n-production
# 保存当前进程列表pm2 save
# 设置开机自启pm2 startupPM2的优势
自动重启:应用崩溃后自动重启,保证服务可用性
日志管理:自动分割日志文件,方便查看历史日志
监控功能:实时监控CPU、内存使用情况
集群模式:支持多实例负载均衡
零停机部署:支持热重载,部署时不中断服务
方案三:Systemd服务配置(Linux服务器专用)
如果你的服务器是Linux系统,使用systemd管理n8n服务是最佳选择。systemd是Linux系统的标准服务管理器,功能强大且稳定。
创建服务文件
在/etc/systemd/system/目录下创建n8n.service文件:
[Unit]Description=n8n Workflow Automation ServiceAfter=network.targetWants=network-online.target
[Service]Type=simpleUser=n8nGroup=n8nWorkingDirectory=/home/n8nEnvironment="NODE_ENV=production"Environment="N8N_HOST=0.0.0.0"Environment="N8N_PORT=5678"Environment="N8N_PROTOCOL=http"Environment="N8N_BASIC_AUTH_ACTIVE=true"Environment="N8N_BASIC_AUTH_USER=admin"Environment="N8N_BASIC_AUTH_PASSWORD=your_secure_password_here"Environment="WEBHOOK_URL=http://your-server-ip:5678"Environment="N8N_PATH=/"Environment="N8N_TIMEZONE=Asia/Shanghai"Environment="N8N_LOG_LEVEL=info"Environment="N8N_LOG_OUTPUT=console,file"Environment="N8N_LOG_FILE_LOCATION=/var/log/n8n/"Environment="N8N_METRICS=false"Environment="N8N_DIAGNOSTICS_ENABLED=false"Environment="N8N_EDITOR_BASE_URL=http://your-server-ip:5678"Environment="EXECUTIONS_MODE=queue"Environment="QUEUE_BULL_REDIS_HOST=localhost"Environment="QUEUE_BULL_REDIS_PORT=6379"Environment="QUEUE_BULL_REDIS_DB=0"ExecStart=/home/n8n/.nvm/versions/node/v22.17.0/bin/n8n startRestart=alwaysRestartSec=10StandardOutput=journalStandardError=journalSyslogIdentifier=n8n
[Install]WantedBy=multi-user.target创建专用用户(推荐)
为了安全起见,建议创建一个专门运行n8n的用户:
# 创建用户sudo useradd -r -s /bin/false n8n
# 创建必要目录sudo mkdir -p /var/log/n8nsudo chown -R n8n:n8n /var/log/n8n
# 设置权限sudo chmod 755 /var/log/n8n启动和管理服务
# 重新加载systemd配置sudo systemctl daemon-reload
# 启动服务sudo systemctl start n8n
# 设置开机自启sudo systemctl enable n8n
# 查看服务状态sudo systemctl status n8n
# 查看服务日志sudo journalctl -u n8n -f
# 重启服务sudo systemctl restart n8n
# 停止服务sudo systemctl stop n8nSystemd的优势
系统级管理:与系统启动流程深度集成
自动重启:服务崩溃后自动重启
日志集成:日志统一由journald管理
资源限制:可以设置CPU、内存限制
依赖管理:可以设置服务启动顺序
关键环境变量详解
访问控制类
N8N_HOST
- 作用:设置n8n监听的地址
- 值:
0.0.0.0(所有接口)或具体IP - 必填:否,默认为localhost
N8N_PORT
- 作用:设置n8n监听的端口
- 值:端口号,如5678
- 必填:否,默认为5678
N8N_BASIC_AUTH_ACTIVE
- 作用:是否启用基础认证
- 值:true/false
- 必填:否,默认为false
N8N_BASIC_AUTH_USER
- 作用:基础认证的用户名
- 值:用户名字符串
- 必填:启用认证时必填
N8N_BASIC_AUTH_PASSWORD
- 作用:基础认证的密码
- 值:密码字符串
- 必填:启用认证时必填
网络配置类
WEBHOOK_URL
- 作用:设置Webhook的完整URL
- 值:完整的URL地址
- 必填:是,影响Webhook功能
N8N_PROTOCOL
- 作用:设置协议类型
- 值:http/https
- 必填:否,默认为http
N8N_EDITOR_BASE_URL
- 作用:设置编辑器的基础URL
- 值:完整的URL地址
- 必填:否,默认为自动检测
日志配置类
N8N_LOG_LEVEL
- 作用:设置日志级别
- 值:error/warn/info/debug/trace
- 必填:否,默认为info
N8N_LOG_OUTPUT
- 作用:设置日志输出方式
- 值:console/file/both
- 必填:否,默认为console
N8N_LOG_FILE_LOCATION
- 作用:设置日志文件路径
- 值:文件路径
- 必填:启用文件日志时必填
执行配置类
EXECUTIONS_MODE
- 作用:设置执行模式
- 值:regular/queue
- 必填:否,默认为regular
QUEUE_BULL_REDIS_HOST
- 作用:Redis主机地址
- 值:主机地址
- 必填:queue模式时必填
QUEUE_BULL_REDIS_PORT
- 作用:Redis端口
- 值:端口号
- 必填:queue模式时必填
配置验证和测试
配置完成后,一定要进行验证测试:
测试访问
# 测试本地访问curl http://localhost:5678
# 测试局域网访问curl http://your-server-ip:5678检查进程
# PM2方式pm2 status
# Systemd方式sudo systemctl status n8n查看日志
# PM2方式pm2 logs n8n-production
# Systemd方式sudo journalctl -u n8n -n 50常见配置错误及解决方法
错误1:Webhook无法触发
原因:WEBHOOK_URL配置错误
解决方法:
- 确认WEBHOOK_URL是完整的URL
- 检查URL是否可以从外网访问
- 验证防火墙设置
错误2:基础认证不生效
原因:环境变量未正确设置
解决方法:
- 确认所有认证相关变量都已设置
- 重启n8n服务
- 清除浏览器缓存
错误3:日志文件无法写入
原因:目录权限不足
解决方法:
- 检查日志目录权限
- 确保运行用户有写权限
- 手动创建日志目录并设置权限
安全加固建议
生产环境的配置不仅要考虑功能,还要考虑安全:
-
使用强密码:密码至少16位,包含大小写字母、数字和特殊字符
-
限制访问IP:在防火墙层面限制访问IP范围
-
启用HTTPS:使用反向代理配置SSL证书
-
定期更新:及时更新n8n和依赖包
-
日志监控:定期检查日志,发现异常及时处理
-
备份策略:定期备份数据库和配置文件
总结
n8n的环境变量配置看似简单,但要做好并不容易。根据不同的使用场景,选择合适的配置方案:
- 开发测试:临时配置即可
- 小型生产环境:PM2配置简单易用
- 大型生产环境:Systemd配置更加稳定
无论选择哪种方案,都要注意以下几点:
- 正确配置WEBHOOK_URL
- 启用基础认证并使用强密码
- 合理设置日志级别
- 定期检查服务状态
- 做好数据备份
按照这个指南配置,你的n8n应该能在生产环境中稳定运行。如果在配置过程中遇到问题,欢迎在评论区交流讨论。