【笔记】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智能问答的帮;亦或者留言,有时间就会回复的


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


相关推荐
無间行者15 小时前
【笔记】n8n 新手上路指南(三)
自动化流程·n8n
無间行者2 天前
【笔记】n8n Docker 容器时间与时区同步记录(二)
自动化流程·n8n
HoldBelief3 天前
安装N8N2.11.2 以及 访问宿主机上的文件
n8n
一马平川的大草原24 天前
基于n8n构建企业内部知识库
人工智能·知识库·n8n
勇气要爆发24 天前
2026年想学AI,面对 Dify、Coze、n8n、LangChain 该学哪个?
人工智能·langchain·dify·coze·n8n
呆萌的代Ma1 个月前
N8N(二):示例项目:将表单内容写入到飞书表格中
大模型·飞书·n8n
呆萌的代Ma1 个月前
N8N(一):在Docker中安装N8N
docker·容器·n8n
rs勿忘初心1 个月前
n8n工作流使用问题集合
常见问题·n8n·工作流平台·json解析方法·json参数报错
m_136871 个月前
n8n 启动时报 EACCES permission denied 的完整排查与修复
自动化·n8n