【笔记】n8n 自动化平台安装部署使用笔记(一)

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

症状: 访问时提示安全 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;

📌 注意事项

  1. 版本兼容性:n8n 2.0+ 不再支持 MySQL,仅支持 PostgreSQL 或 SQLite
  2. 数据迁移:从旧版本升级需要数据库迁移
  3. 安全警告:自签名证书在浏览器中会显示安全警告,生产环境建议使用正式证书
  4. 端口冲突:确保 5678、80、443 端口未被其他服务占用
  5. 定期更新:关注 n8n 版本更新,及时升级以获得新功能和安全修复

📞 支持与参考


文档版本 : 1.0
更新日期 : 2026年1月7日
部署环境 : CentOS 7.9 + Docker + Nginx
n8n 版本: 2.3.1

💡 提示 : 本文档基于实际部署经验编写,记录了所有关键步骤和遇到的问题解决方案。建议根据实际环境调整配置参数。

如果遇到难以解决的问题可以寻求各类AI智能问答的帮;亦或者留言,有时间就会回复的


👑 天下英雄出我辈,一入江湖岁月催 我是热爱生活的「 无间行者 」,努力把实践过的解决方案分享给大家 如果这篇文章对你有用,一键三连,感谢你的鼓励,让我知道你在看


相关推荐
呆萌的代Ma8 天前
N8N webhook节点添加Authentication认证
大模型·n8n
熊文豪11 天前
打造智能写作工作流:n8n + 蓝耘MaaS平台完整实战指南
ai写作·工作流·n8n·蓝耘maas
呆萌的代Ma17 天前
解决n8n的输入内容报错JSON parameter needs to be valid JSON
json·n8n
呆萌的代Ma17 天前
n8n处理webhook的参数值,为可能的参数设置默认值
n8n
℡終嚸♂68023 天前
n8n 未初始化接管到读取 Flag Writeup
服务器·web安全·web·n8n
無间行者2 个月前
【笔记】n8n 新手上路指南(三)
自动化流程·n8n
無间行者2 个月前
【笔记】n8n Docker 容器时间与时区同步记录(二)
自动化流程·n8n
HoldBelief2 个月前
安装N8N2.11.2 以及 访问宿主机上的文件
n8n
一马平川的大草原3 个月前
基于n8n构建企业内部知识库
人工智能·知识库·n8n