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_URL
與WEBHOOK_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 | https 或 http ,與反向代理協議一致 |
N8N_BASE_URL | 外部存取完整 URL,影響 UI 與認證 |
WEBHOOK_URL | Webhook 回呼入口,需外網可達 |
故障排除與最佳實踐
症狀 | 可能原因 | 解法 |
---|---|---|
瀏覽器不斷顯示 Connection Lost | Nginx 未轉發 WebSocket | 確保 Upgrade 與 Connection 標頭設定 |
Cloudflare「彈性 SSL」導致 OAuth 失敗 | 伺服器端流量仍走 HTTP | 將 SSL 模式改為 Full (Strict) |
無法簽發憑證 | 80 埠被防火牆阻擋 | 確認 UFW / 雲端安全群組開通 |
重開機後 n8n 關閉 | 忘記啟用 systemd enable |
sudo systemctl enable n8n |
負載高 / 工作排程卡頓 | 伺服器資源不足 | 升級至 2 vCPU / 4 GB RAM 或啟用分散式執行 |
升級與備份策略
-
Docker 用戶
docker compose pull && docker compose up -d
升級完成後,舊映像可透過
docker image prune -f
清理。 -
npm 用戶
sudo npm i -g n8n@latest sudo systemctl restart n8n
-
備份
- 設置
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,自動化你的開發、行銷和營運流程吧!