Skip to main content
Benny的老巢 Logo
Overview

n8n环境变量配置完全手册:PM2和Systemd两种生产环境部署方案

January 7, 2026
3 min read

在上篇文章中,我们讨论了如何让n8n支持局域网访问。很多朋友私信问我,通过npm安装的n8n应该如何配置环境变量?确实,相比Docker的配置方式,npm安装的配置更加灵活,但也更容易出错。今天我就把各种配置方法系统地整理一下。

为什么环境变量配置这么重要

n8n的很多核心功能都依赖环境变量来控制,比如:

  • 访问控制:是否启用基础认证
  • 网络配置:监听地址、端口、Webhook URL
  • 数据存储:数据库连接、文件存储路径
  • 功能开关:是否启用某些实验性功能

正确配置环境变量,不仅能让n8n正常运行,还能提升安全性和稳定性。

方案一:临时配置(适合快速测试)

这是最简单直接的方式,适合快速验证某个配置是否生效。

基本用法

在启动命令前直接设置环境变量:

Terminal window
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

Terminal window
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"
}
}]
}

启动和管理

Terminal window
# 启动应用
pm2 start ecosystem.config.js
# 查看状态
pm2 status
# 查看日志
pm2 logs n8n-production
# 重启应用
pm2 restart n8n-production
# 停止应用
pm2 stop n8n-production
# 保存当前进程列表
pm2 save
# 设置开机自启
pm2 startup

PM2的优势

自动重启:应用崩溃后自动重启,保证服务可用性

日志管理:自动分割日志文件,方便查看历史日志

监控功能:实时监控CPU、内存使用情况

集群模式:支持多实例负载均衡

零停机部署:支持热重载,部署时不中断服务

方案三:Systemd服务配置(Linux服务器专用)

如果你的服务器是Linux系统,使用systemd管理n8n服务是最佳选择。systemd是Linux系统的标准服务管理器,功能强大且稳定。

创建服务文件

/etc/systemd/system/目录下创建n8n.service文件:

[Unit]
Description=n8n Workflow Automation Service
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=n8n
Group=n8n
WorkingDirectory=/home/n8n
Environment="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 start
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=n8n
[Install]
WantedBy=multi-user.target

创建专用用户(推荐)

为了安全起见,建议创建一个专门运行n8n的用户:

Terminal window
# 创建用户
sudo useradd -r -s /bin/false n8n
# 创建必要目录
sudo mkdir -p /var/log/n8n
sudo chown -R n8n:n8n /var/log/n8n
# 设置权限
sudo chmod 755 /var/log/n8n

启动和管理服务

Terminal window
# 重新加载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 n8n

Systemd的优势

系统级管理:与系统启动流程深度集成

自动重启:服务崩溃后自动重启

日志集成:日志统一由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模式时必填

配置验证和测试

配置完成后,一定要进行验证测试:

测试访问

Terminal window
# 测试本地访问
curl http://localhost:5678
# 测试局域网访问
curl http://your-server-ip:5678

检查进程

Terminal window
# PM2方式
pm2 status
# Systemd方式
sudo systemctl status n8n

查看日志

Terminal window
# PM2方式
pm2 logs n8n-production
# Systemd方式
sudo journalctl -u n8n -n 50

常见配置错误及解决方法

错误1:Webhook无法触发

原因:WEBHOOK_URL配置错误

解决方法

  1. 确认WEBHOOK_URL是完整的URL
  2. 检查URL是否可以从外网访问
  3. 验证防火墙设置

错误2:基础认证不生效

原因:环境变量未正确设置

解决方法

  1. 确认所有认证相关变量都已设置
  2. 重启n8n服务
  3. 清除浏览器缓存

错误3:日志文件无法写入

原因:目录权限不足

解决方法

  1. 检查日志目录权限
  2. 确保运行用户有写权限
  3. 手动创建日志目录并设置权限

安全加固建议

生产环境的配置不仅要考虑功能,还要考虑安全:

  1. 使用强密码:密码至少16位,包含大小写字母、数字和特殊字符

  2. 限制访问IP:在防火墙层面限制访问IP范围

  3. 启用HTTPS:使用反向代理配置SSL证书

  4. 定期更新:及时更新n8n和依赖包

  5. 日志监控:定期检查日志,发现异常及时处理

  6. 备份策略:定期备份数据库和配置文件

总结

n8n的环境变量配置看似简单,但要做好并不容易。根据不同的使用场景,选择合适的配置方案:

  • 开发测试:临时配置即可
  • 小型生产环境:PM2配置简单易用
  • 大型生产环境:Systemd配置更加稳定

无论选择哪种方案,都要注意以下几点:

  1. 正确配置WEBHOOK_URL
  2. 启用基础认证并使用强密码
  3. 合理设置日志级别
  4. 定期检查服务状态
  5. 做好数据备份

按照这个指南配置,你的n8n应该能在生产环境中稳定运行。如果在配置过程中遇到问题,欢迎在评论区交流讨论。