n8n Docker 架設後的自訂網域設定:OAuth 與 Webhook 全面指南

n8n Docker 架設後的自訂網域設定:OAuth 與 Webhook 全面指南

website-development

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_URLWebhook 接收地址https://n8n.yourdomain.com
WEBHOOK_TUNNEL_URLWebhook 隧道地址https://n8n.yourdomain.com
N8N_HOSTn8n 綁定的主機0.0.0.0
N8N_PORTn8n 服務端口5678
N8N_PROTOCOL使用的協議https

步驟二:檢查 Redirect URL 是否生效

n8n OAuth2 Redirect URL 檢查

若此處仍顯示為 localhost 或 IP:

  • 檢查與修正容器環境變數 WEBHOOK_URLWEBHOOK_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

  1. 前往 Google Cloud Console
  2. 選擇您的專案 → APIs & Services → Credentials
  3. 編輯 OAuth 2.0 客戶端 ID
  4. 在「已授權的重新導向 URI」加入:
    https://n8n.yourdomain.com/rest/oauth2-credential/callback

GitHub OAuth

  1. 前往 GitHub → Settings → Developer settings → OAuth Apps
  2. 編輯您的應用程式
  3. 設定 Authorization callback URL:
    https://n8n.yourdomain.com/rest/oauth2-credential/callback

Discord OAuth

  1. 前往 Discord Developer Portal
  2. 選擇您的應用程式 → OAuth2
  3. 在 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 觸發器並測試:

  1. 新建工作流程
  2. 加入「Webhook」觸發器
  3. 記下顯示的 Webhook URL
  4. 使用 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 整合的關鍵。記住三件事:

  1. 外部網址要一致WEBHOOK_URLWEBHOOK_TUNNEL_URL 指向你的網域
  2. OAuth 回調固定格式https://<your-domain>/rest/oauth2-credential/callback
  3. 修改後要重啟:變更環境變數後務必重啟容器

設定完成後,您就可以順利使用各種第三方服務的整合功能了!

n8nDockerOAuthWebhookReverse ProxyNginxSSLDevOps