n8n Docker 架設後的自訂網域設定:OAuth 與 Webhook 全面指南
website-development
目錄
- 前言
- 為什麼需要設定自訂域名?
- 前置需求
- 步驟一:設定容器環境變數(對外網址與監聽)
- 1.1 停止並移除現有容器(若已在跑)
- 1.2 使用正確的環境變數重新啟動
- 1.3 重要環境變數說明
- 步驟二:檢查 Redirect URL 是否生效
- 步驟三:設定 OAuth 回調
- 3.1 OAuth Redirect URL 格式
- 3.2 常見 OAuth 提供者設定
- 步驟四:設定 Webhook 對外網址
- 4.1 Webhook URL 格式
- 4.2 測試 Webhook
- 驗證:服務是否用正確網域對外
- 檢查容器日誌
- 檢查環境變數
- 常見問題(FAQ)與排錯
- 問題 1:OAuth 認證後顯示「無法連接到回調 URL」
- 問題 2:Webhook 無法接收資料
- 問題 3:設定後仍然顯示 localhost 或 IP
- 進階設定技巧
- 使用 Docker Compose(建議)
- 環境變數檔案管理(.env)
- 結論
n8n Docker 架設後的自訂網域設定:OAuth 與 Webhook 全面指南
前言
已經用 Docker 起好 n8n,卻在做 OAuth 整合或收 Webhook 時卡在網域設定?這篇一步帶你把 n8n 的對外網址設定正確,確保 OAuth 回調與 Webhook 都能穩定、可預期地運作。
為什麼需要設定自訂域名?
當你在 n8n 連接第三方服務(Google、GitHub、Discord…)時,供應商需要一個「固定且正確」的回調 URL。若網域沒設定好,常見症狀包括:
- OAuth 認證流程在回調時失敗(redirect_uri mismatch)
- Webhook 沒有打進來或 signature 驗證失敗
- 供應商回傳 3xx/4xx/5xx,或回調到錯誤的位址(localhost/IP)
前置需求
- 已用 Docker 啟動 n8n
- 有一個指向伺服器的網域(例:
n8n.yourdomain.com
) - n8n 已能以 IP:5678 存取(基本可用)
步驟一:設定容器環境變數(對外網址與監聽)
1.1 停止並移除現有容器(若已在跑)
docker stop n8n
docker rm n8n
1.2 使用正確的環境變數重新啟動
# 請將 n8n.yourdomain.com 替換為你的實際網域
docker run -d --restart unless-stopped --name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-e WEBHOOK_URL=https://n8n.yourdomain.com \
-e WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com \
-e N8N_HOST=0.0.0.0 \
-e N8N_PORT=5678 \
-e N8N_PROTOCOL=https \
docker.n8n.io/n8nio/n8n
小提示
- 若由反向代理(Nginx/Traefik/Caddy)做 TLS 終止,容器內常用
N8N_PROTOCOL=http
,對外網址仍為https
(由代理負責 SSL)。N8N_HOST=0.0.0.0
表示容器內監聽所有位址,不會改變對外可見網址;對外公開網址以WEBHOOK_URL/WEBHOOK_TUNNEL_URL
為準。
1.3 重要環境變數說明
環境變數 | 作用 | 範例值 |
---|---|---|
WEBHOOK_URL | Webhook 接收地址 | https://n8n.yourdomain.com |
WEBHOOK_TUNNEL_URL | Webhook 隧道地址 | https://n8n.yourdomain.com |
N8N_HOST | n8n 綁定的主機 | 0.0.0.0 |
N8N_PORT | n8n 服務端口 | 5678 |
N8N_PROTOCOL | 使用的協議 | https |
步驟二:檢查 Redirect URL 是否生效
若此處仍顯示為 localhost
或 IP:
- 檢查與修正容器環境變數
WEBHOOK_URL
、WEBHOOK_TUNNEL_URL
- 重新啟動容器讓設定生效
步驟三:設定 OAuth 回調
3.1 OAuth Redirect URL 格式
在第三方服務的 OAuth App 中,將 Redirect/Callback URI 設為:
https://n8n.yourdomain.com/rest/oauth2-credential/callback
3.2 常見 OAuth 提供者設定
Google OAuth:
- 前往 Google Cloud Console
- 選擇您的專案 → APIs & Services → Credentials
- 編輯 OAuth 2.0 客戶端 ID
- 在「已授權的重新導向 URI」加入:
https://n8n.yourdomain.com/rest/oauth2-credential/callback
GitHub OAuth:
- 前往 GitHub → Settings → Developer settings → OAuth Apps
- 編輯您的應用程式
- 設定 Authorization callback URL:
https://n8n.yourdomain.com/rest/oauth2-credential/callback
Discord OAuth:
- 前往 Discord Developer Portal
- 選擇您的應用程式 → OAuth2
- 在 Redirects 中加入:
https://n8n.yourdomain.com/rest/oauth2-credential/callback
步驟四:設定 Webhook 對外網址
4.1 Webhook URL 格式
第三方服務發送 Webhook 至 n8n 時,URL 應使用:
https://n8n.yourdomain.com/webhook/your-webhook-id
4.2 測試 Webhook
在 n8n 中建立一個 Webhook 觸發器並測試:
- 新建工作流程
- 加入「Webhook」觸發器
- 記下顯示的 Webhook URL
- 使用 curl 測試:
curl -X POST https://n8n.yourdomain.com/webhook/your-webhook-id \
-H "Content-Type: application/json" \
-d '{"test": "data"}'
驗證:服務是否用正確網域對外
檢查容器日誌
# 查看 n8n 容器日誌(確認啟動與請求狀態)
docker logs n8n
# 看到類似: n8n ready on ::, port 5678
檢查環境變數
# 進入容器檢查環境變數是否生效
docker exec n8n env | grep -E "WEBHOOK_URL|WEBHOOK_TUNNEL_URL|N8N_HOST|N8N_PROTOCOL"
應該顯示:
WEBHOOK_URL=https://n8n.yourdomain.com
WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com
N8N_HOST=0.0.0.0
N8N_PROTOCOL=https
常見問題(FAQ)與排錯
問題 1:OAuth 認證後顯示「無法連接到回調 URL」
解法:
- DNS 解析是否正確指向伺服器
- 防火牆/安全群組是否開放對外端口(或已配置反向代理)
- Docker 環境變數是否正確、容器是否已重啟
問題 2:Webhook 無法接收資料
解法:
# 檢查端口是否正確開放
sudo netstat -tlnp | grep 5678
# 重啟 n8n 容器
docker restart n8n
問題 3:設定後仍然顯示 localhost 或 IP
解法:
# 完全清除容器和重新建立
docker stop n8n
docker rm n8n
# 清除瀏覽器快取
# 重新運行容器(使用正確的環境變數)
進階設定技巧
使用 Docker Compose(建議)
建立 docker-compose.yml
檔案:
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- WEBHOOK_URL=https://n8n.yourdomain.com
- WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=https
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
運行:
docker compose up -d
環境變數檔案管理(.env)
建立 .env
檔案:
N8N_DOMAIN=n8n.yourdomain.com
WEBHOOK_URL=https://n8n.yourdomain.com
WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com
N8N_HOST=0.0.0.0
N8N_PORT=5678
N8N_PROTOCOL=https
結論
把 n8n 的對外網址(Editor/Webhook Base URL)設定正確,是順利完成 OAuth 與 Webhook 整合的關鍵。記住三件事:
- 外部網址要一致:
WEBHOOK_URL
、WEBHOOK_TUNNEL_URL
指向你的網域 - OAuth 回調固定格式:
https://<your-domain>/rest/oauth2-credential/callback
- 修改後要重啟:變更環境變數後務必重啟容器
設定完成後,您就可以順利使用各種第三方服務的整合功能了!