如何部署n8n在私有Ubuntu 22.04服务器上VPS配置域名和SSL证书

在虚拟专用服务器 (VPS) 上安装 n8n 可以提高自动化工作流程的灵活性和控制力。 在 VPS 上自托管 n8n 的两种主要方法是使用 Docker 或 Node 包管理器 (npm)。此方法涉及在 VPS 上设置 Docker 和 Docker Compose,然后在 Docker 容器中定义和运行 n8n。

0. 前期准备

0.1. 域名DNS指向IP

为了确保服务器的安全性和便捷性,需要先将域名链接到服务器(IP)上

在Namecheap中找到对应的域名

ADD NEW RECORD ⇒ 输入子域名(n8n)⇒ 输入服务器IP地址 ⇒ 确认

0.1.1 确认是否链接成功

进入https://dnschecker.org/

输入自己的域名

如果大部分是对号,并且IP地址是VPS服务器的地址,那么说明链接成功了

1. 安装必要的包

1.1 更新Ubuntu服务器

sudo apt update && apt upgrade -y

1.2 安装Docker

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$UBUNTU_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.3 安装Docker engine && docker compose

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

1.4 安装Nginx

sudo apt update && sudo apt install nginx -y

1.5 安装Certbot

sudo apt install certbot python3-certbot-nginx -y

1.6 开放必要端口

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

2. 安装n8n

2.1 创建n8n目录和配置文件

# 创建n8n目录
sudo mkdir -p /opt/n8n
cd /opt/n8n

# 创建数据目录并设置正确权限(解决权限问题)
sudo mkdir -p n8n_data
sudo chown -R 1000:1000 n8n_data
sudo chmod -R 755 n8n_data

2.2 创建Docker Compose配置文件

sudo nano docker-compose.yml

初始配置(HTTP模式,避免SSL问题)

version: '3.8'
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: always
    user: "1000:1000"  # 明确指定用户ID,避免权限问题
    ports:
      - "127.0.0.1:5678:5678"  # 只绑定本地,避免直接暴露
    environment:
      - N8N_HOST=n8n1.techchris.net
      - N8N_PORT=5678
      - N8N_PROTOCOL=http  # 先用HTTP
      - WEBHOOK_URL=http://n8n1.techchris.net
      - N8N_SECURE_COOKIE=false  # 避免安全cookie问题
      - GENERIC_TIMEZONE=Asia/Seoul
    volumes:
      - ./n8n_data:/home/node/.n8n

ℹ️ 将 N8N_HOST & WEBHOOK_URL 部分换成自己的域名

2.3 启动n8n容器

sudo docker compose up -d

ℹ️ 整个 过程会持续一段时间,结束后会出现如下图所示:

3. 创建Nginx配置文件

3.1 创建Nginx文件

sudo nano /etc/nginx/sites-available/n8n1.techchris.net

ℹ️ 将 n8n1.techchris.net 替换成自己的域名

HTTP配置(避免SSL证书路径错误):

server {
    listen 80;
    server_name n8n1.techchris.net;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        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;
        proxy_cache_bypass $http_upgrade;
        
        # n8n特殊配置
        proxy_set_header X-Forwarded-Host $host;
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
        proxy_buffering off;
        proxy_request_buffering off;
    }
}

ℹ️ 将 server_name 改为自己的域名

3.2 启用n8n站点配置

创建符合链接

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/n8n1.techchris.net /etc/nginx/sites-enabled/

测试&加载Nginx

# 测试Nginx配置
sudo nginx -t

# 重载Nginx配置
sudo systemctl reload nginx

如果出现这个提示,说明成功配置了Nginx

3.3 访问自己的域名后如果

访问自己的域名,如果此时将会出现这个页面,说明已经✅成功了

4. 申请SSL证书

4.1 通过Let’s Encrypt申请SSL证书

# 使用Let's Encrypt申请SSL证书
sudo certbot --nginx -d n8n1.techchris.net

ℹ️ 将 n8n1.techchris.net 修改为自己的域名
成功后会显示:

4.2 更新n8n配置为https模式

SSL证书申请成功后,更新Docker配置:

sudo nano /opt/n8n/docker-compose.yml

HTTPS配置:

version: '3.8'
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: always
    user: "1000:1000"
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n1.techchris.net
      - N8N_PORT=5678
      - N8N_PROTOCOL=https  # 改为HTTPS
      - WEBHOOK_URL=https://n8n1.techchris.net
      - N8N_SECURE_COOKIE=true  # 启用安全cookie
      - GENERIC_TIMEZONE=Asia/Seoul
    volumes:
      - ./n8n_data:/home/node/.n8n

ℹ️ 将 N8N_PROTOCOL & WEBHOOK_URL 改为自己的域名
N8N_SECURE_COOKIE 改为 true

4.3 重新启动docker compose配置

# 重启容器应用新配置
sudo docker compose down
sudo docker compose up -d

此时会发现SSL锁已经配置到了n8n上了

通过以上的步骤可以实现将n8n部署在私有服务器上,并且配置自己的域名保证访问的便捷性,更重要的是将该域名配置SSL锁确保了信息传输中的安全性。

Views: 0

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注