n8n 自动化平台部署与配置笔记
📋 项目概述
在 CentOS 7 虚拟机上通过 Docker 部署 n8n 2.3.1 版本,并通过 Nginx 反向代理配置 HTTPS 访问。
🚀 环境准备
系统环境
- 操作系统:CentOS 7.9
- 虚拟化:VMware 虚拟机
- 网络:桥接模式,IP: 192.168.3.95
- 防火墙:firewalld
软件要求
- Docker 20.10+
- Docker Compose(可选)
- Nginx 1.20+
📦 安装步骤
1. Docker 安装与配置
bash
# 安装 Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
2. 拉取 n8n 镜像
bash
# 拉取最新版本
docker pull n8nio/n8n:2.3.1
# 或离线安装(如果已下载镜像)
docker load -i n8n_2.3.1.tar
🔧 n8n 基础部署
最小化运行(测试用)
bash
docker run -d --rm --name n8n -p 5678:5678 n8nio/n8n:2.3.1
持久化运行(推荐)
bash
docker run -d \
--name n8n \
-p 5678:5678 \
-v ~/n8n_data:/home/node/.n8n \
n8nio/n8n:2.3.1
完整环境变量配置
bash
docker run -d \
--name n8n \
-p 5678:5678 \
-v ~/n8n_data:/home/node/.n8n \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=1qaz@WSX \
-e N8N_WEBHOOK_URL=https://192.168.3.95/ \
-e TZ=Asia/Shanghai \
-e GENERIC_TIMEZONE=Asia/Shanghai \
n8nio/n8n:2.3.1
🔐 HTTPS 反向代理配置
1. Nginx 安装
bash
# CentOS 7 需要先修复 yum 仓库
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all && sudo yum makecache
# 通过 EPEL 安装 Nginx
sudo yum install epel-release -y
sudo yum install nginx -y
2. SSL 证书生成
bash
# 创建证书目录
sudo mkdir -p /etc/nginx/ssl/n8n
cd /etc/nginx/ssl/n8n
# 生成自签名证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout n8n.key -out n8n.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=192.168.3.95"
# 设置权限
sudo chmod 600 n8n.key
sudo chmod 644 n8n.crt
3. Nginx 配置文件
创建 /etc/nginx/conf.d/n8n.conf:
nginx
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name 192.168.3.95;
return 301 https://$server_name$request_uri;
}
# HTTPS 服务器
server {
listen 443 ssl http2;
server_name 192.168.3.95;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/n8n/n8n.crt;
ssl_certificate_key /etc/nginx/ssl/n8n/n8n.key;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 安全响应头
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
# n8n 应用代理
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 传递客户端信息
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;
}
# 健康检查端点
location /healthz {
proxy_pass http://localhost:5678/healthz;
access_log off;
}
}
4. 调整 n8n 配置
bash
# 停止并重新运行 n8n,绑定到本地端口
docker stop n8n
docker rm n8n
docker run -d \
--name n8n \
--restart unless-stopped \
-p 127.0.0.1:5678:5678 \
-v ~/n8n_data:/home/node/.n8n \
-e N8N_PROTOCOL=https \
-e N8N_HOST=127.0.0.1 \
-e N8N_PORT=5678 \
-e N8N_WEBHOOK_URL=https://192.168.3.95/ \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=4321!QAZ \
-e GENERIC_TIMEZONE=Asia/Shanghai \
n8nio/n8n:2.3.1
bash
docker run -d \
--name n8n \
--restart unless-stopped \
-p 127.0.0.1:5678:5678 \
-v ~/n8n_data:/home/node/.n8n \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro \
-e TZ=Asia/Shanghai \
-e N8N_PROTOCOL=https \
-e N8N_HOST=127.0.0.1 \
-e N8N_PORT=5678 \
-e N8N_WEBHOOK_URL=https://192.168.3.95/ \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=4321!QAZ \
-e GENERIC_TIMEZONE=Asia/Shanghai \
n8nio/n8n:2.3.1
5. 防火墙配置
bash
# 开放 HTTP/HTTPS 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# 验证规则
sudo firewall-cmd --list-all
🛠️ 权限与 SELinux 问题解决
1. 数据目录权限
bash
# 修复 n8n 数据目录权限
sudo chown -R 1000:1000 ~/n8n_data
sudo chmod -R 755 ~/n8n_data
2. SELinux 处理
bash
# 查看 SELinux 状态
sudo sestatus
# 临时禁用(用于测试)
sudo setenforce 0
# 允许 Nginx 网络连接
sudo setsebool -P httpd_can_network_connect 1
# 永久禁用(如果需要)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
✅ 验证与测试
服务状态检查
bash
# 检查所有服务状态
sudo systemctl status nginx
docker ps | grep n8n
# 测试端口监听
sudo netstat -tlnp | grep -E ':(80|443|5678)'
连接测试
bash
# 测试 HTTPS 连接
curl -k https://192.168.3.95/healthz
# 预期返回: {"status":"ok"}
# 测试 HTTP 自动重定向
curl -I http://192.168.3.95
# 预期返回: 301 重定向到 HTTPS

📊 最终访问信息
| 组件 | 配置 | 访问方式 |
|---|---|---|
| n8n 应用 | Docker 容器运行 | 内部: http://127.0.0.1:5678 |
| Nginx 代理 | HTTPS 反向代理 | 外部: https://192.168.3.95 |
| 认证信息 | 基础认证 | 用户名: admin 密码: 1qaz@WSX |
| SSL 证书 | 自签名证书 | 浏览器会有安全警告 |
🚨 故障排除指南
常见问题及解决方案
1. Nginx 启动失败
bash
# 查看详细错误
sudo journalctl -u nginx --no-pager -n 30
sudo tail -f /var/log/nginx/error.log
# 测试配置语法
sudo nginx -t
2. 502 Bad Gateway
bash
# 检查 n8n 是否运行
docker ps | grep n8n
curl http://127.0.0.1:5678/healthz
# 检查容器日志
docker logs n8n
3. 权限被拒绝错误
bash
# 查看文件权限
ls -la ~/n8n_data
# 以 root 用户运行测试
docker run -d --name n8n_test -u root -p 5678:5678 n8nio/n8n:2.3.1
4. 安全 Cookie 警告
症状: 访问时提示安全 Cookie 配置错误
解决方案:
- 确保使用
https://协议访问 - 或临时禁用安全 Cookie:
-e N8N_SECURE_COOKIE=false
📝 管理命令备忘
服务管理
bash
# Nginx 管理
sudo systemctl start|stop|restart|status nginx
sudo nginx -t # 测试配置
# n8n 容器管理
docker start|stop|restart n8n
docker logs n8n --tail 50 # 查看日志
docker exec -it n8n /bin/bash # 进入容器
数据备份
bash
# 创建备份脚本
cat > /root/backup_n8n.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/root/n8n_backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czf "$BACKUP_DIR/n8n_backup_$DATE.tar.gz" ~/n8n_data
echo "备份完成: $BACKUP_DIR/n8n_backup_$DATE.tar.gz"
EOF
chmod +x /root/backup_n8n.sh
健康检查
bash
# 简易监控脚本
cat > /usr/local/bin/check_n8n.sh << 'EOF'
#!/bin/bash
STATUS=$(curl -s -k -o /dev/null -w "%{http_code}" https://192.168.3.95/healthz)
if [ "$STATUS" != "200" ]; then
echo "[$(date)] n8n 健康检查失败: HTTP $STATUS"
docker restart n8n
systemctl restart nginx
fi
EOF
chmod +x /usr/local/bin/check_n8n.sh
🔮 进阶配置建议
1. 使用真实域名和 Let's Encrypt 证书
bash
# 安装 certbot
sudo yum install certbot python3-certbot-nginx -y
# 获取证书
sudo certbot --nginx -d your-domain.com
# 自动续期
sudo certbot renew --dry-run
2. Docker Compose 部署(推荐)
创建 docker-compose.yml:
yaml
version: '3.8'
services:
n8n:
image: n8nio/n8n:2.3.1
container_name: n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_PROTOCOL=https
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_WEBHOOK_URL=https://your-domain.com/
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_secure_password
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- ./n8n_data:/home/node/.n8n
3. 性能优化配置
nginx
# 在 Nginx 配置中添加
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
proxy_buffering off;
proxy_request_buffering off;
📌 注意事项
- 版本兼容性:n8n 2.0+ 不再支持 MySQL,仅支持 PostgreSQL 或 SQLite
- 数据迁移:从旧版本升级需要数据库迁移
- 安全警告:自签名证书在浏览器中会显示安全警告,生产环境建议使用正式证书
- 端口冲突:确保 5678、80、443 端口未被其他服务占用
- 定期更新:关注 n8n 版本更新,及时升级以获得新功能和安全修复
📞 支持与参考
- n8n 官方文档: https://docs.n8n.io/
- GitHub 仓库: https://github.com/n8n-io/n8n
- 社区论坛: https://community.n8n.io/
文档版本 : 1.0
更新日期 : 2026年1月7日
部署环境 : CentOS 7.9 + Docker + Nginx
n8n 版本: 2.3.1
💡 提示 : 本文档基于实际部署经验编写,记录了所有关键步骤和遇到的问题解决方案。建议根据实际环境调整配置参数。
如果遇到难以解决的问题可以寻求各类AI智能问答的帮;亦或者留言,有时间就会回复的
👑 天下英雄出我辈,一入江湖岁月催 我是热爱生活的「 无间行者 」,努力把实践过的解决方案分享给大家 如果这篇文章对你有用,一键三连,感谢你的鼓励,让我知道你在看
