用 Ubuntu 24 + Nginx 反向代理公開網域完整安裝 n8n 教學

How to Install n8n on Ubuntu 24 with Nginx as reverse proxy for public domain

在這篇攻略中,你將學會:

  • 從零配置 Ubuntu 24 LTS 伺服器、網域與防火牆
  • 以兩種方式(Docker Compose 與原生 npm)安裝 n8n
  • 使用 Nginx 建立安全的 HTTPS 反向代理,解決 WebSocket「Connection Lost」常見錯誤
  • 透過 Let’s Encrypt 自動簽發與續期憑證
  • 把 n8n 註冊為 systemd 服務,確保重開機後自動啟動
  • 最佳化效能、安全性、備份、升級與多執行個體佈署方案

關鍵字:n8n Ubuntu 24 安裝、Nginx reverse proxy、public domain、Let’s Encrypt、systemd

系統需求與前置檢查

  • Ubuntu 24.04 LTS(1 vCPU / 1 GB RAM 最低需求,2 vCPU / 2 GB RAM 建議)
  • 一組可控 DNS 的網域或子網域(例如 n8n.example.com
  • 開放 TCP 80、443、22 之防火牆規則 (UFW 或雲端安全群組)
  • 具有 sudo 權限的 SSH 帳號

更新作業系統與安裝基礎工具

sudo apt update && sudo apt upgrade -y      # 套件更新
sudo apt install -y ca-certificates curl gnupg ufw git
sudo ufw allow 22 && sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw enable

安裝方法比較

方法 優點 缺點
Docker Compose - 易於升級與回滾
- 與作業系統隔離
- 佔用額外磁碟空間
npm + systemd - 檔案量最少 - 升級需手動重建環境

Docker Compose 部署流程

建立 docker-compose.yml

version: "3.8"
services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_BASE_URL=https://n8n.example.com
      - WEBHOOK_URL=https://n8n.example.com
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:
  • N8N_BASE_URLWEBHOOK_URL 必須用 https,否則 OAuth2 / Webhook 會失敗。
  • 如需外部資料庫,可加掛 postgres 服務並在環境變數指定連線。

啟動與驗證

docker compose up -d        # 背景啟動
docker compose logs -f n8n  # 即時查看日誌

瀏覽 http://伺服器IP:5678 若能出現登入畫面代表 n8n 運行成功。

原生 npm + systemd 部署流程

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -   # Node 18 LTS
sudo apt install -y nodejs
sudo npm install -g n8n

建立 n8n.service

sudo nano /etc/systemd/system/n8n.service
[Unit]
Description=n8n workflow automation
After=network.target

[Service]
Type=simple
User=ubuntu
Environment=N8N_HOST=n8n.example.com
Environment=N8N_PORT=5678
Environment=N8N_PROTOCOL=https
ExecStart=/usr/bin/n8n
Restart=on-failure

[Install]
WantedBy=multi-user.target

啟用服務並檢查:

sudo systemctl daemon-reload
sudo systemctl enable --now n8n
sudo systemctl status n8n

systemd 方式能確保伺服器重新開機後自動還原服務。

安裝 Nginx 與設定反向代理

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/n8n
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  server_name n8n.example.com;
  location / {
    proxy_pass http://localhost:5678;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    chunked_transfer_encoding off;
  }
  return 301 https://$host$request_uri;   # 強制 HTTPS
}
  • map 區塊解決 WebSocket「Connection Lost」問題。
  • 啟用站點、測試並重新載入:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

取得 Let’s Encrypt SSL 憑證

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.example.com

憑證續期自動化:

sudo crontab -e
# 加入
0 3 * * * certbot renew --quiet && systemctl reload nginx

Let’s Encrypt 憑證每90天自動續期,避免過期導致瀏覽器警示。

重要環境變數對照表

變數 說明
N8N_HOST 公開網域名稱 (不含協議)
N8N_PORT n8n 內部監聽埠 (預設 5678)
N8N_PROTOCOL httpshttp,與反向代理協議一致
N8N_BASE_URL 外部存取完整 URL,影響 UI 與認證
WEBHOOK_URL Webhook 回呼入口,需外網可達

故障排除與最佳實踐

症狀 可能原因 解法
瀏覽器不斷顯示 Connection Lost Nginx 未轉發 WebSocket 確保 UpgradeConnection 標頭設定
Cloudflare「彈性 SSL」導致 OAuth 失敗 伺服器端流量仍走 HTTP 將 SSL 模式改為 Full (Strict)
無法簽發憑證 80 埠被防火牆阻擋 確認 UFW / 雲端安全群組開通
重開機後 n8n 關閉 忘記啟用 systemd enable sudo systemctl enable n8n
負載高 / 工作排程卡頓 伺服器資源不足 升級至 2 vCPU / 4 GB RAM 或啟用分散式執行

升級與備份策略

  1. Docker 用戶

    docker compose pull && docker compose up -d
    

    升級完成後,舊映像可透過 docker image prune -f 清理。

  2. npm 用戶

    sudo npm i -g n8n@latest
    sudo systemctl restart n8n
    
  3. 備份

    • 設置 n8n_data 卷每日快照 (rsync / RClone)
    • 匯出 .n8n 資料夾與 Postgres 資料表
    • 定期備份 Nginx 與 systemd 配置檔至 Git

多實例、高可用與進階配置

  • 外接 Postgres:在 docker-compose.yml 另起一個 postgres 服務,並將 N8N_DATABASE_* 指向之。
  • 橫向擴充:使用 Docker Swarm / Kubernetes 部署多例 n8n,並以 Nginx 或 Traefik 做負載平衡。
  • 單點登入 (SSO):整合 Keycloak 或 Auth0,透過環境變數 N8N_AUTH_* 操作。
  • 硬化安全
    • 啟用 UFW、Fail2Ban、SSH 金鑰登入
    • 隱藏 Nginx 版本 server_tokens off;
    • 於 Cloudflare 打開 WAF、Rate Limit

結語

依照本文流程,你已成功在 Ubuntu 24 LTS 上:

  • 部署 n8n 並讓其自動隨機器啟動
  • 使用 Nginx 安全代理處理 HTTPS 與 WebSocket
  • 透過 Let’s Encrypt 取得免費憑證並設定自動續期
  • 準備完善的升級、備份與高可用方案

現在就開始將繁瑣重複的工作交給 n8n,自動化你的開發、行銷和營運流程吧!