Webhook 未設置

描述問題/錯誤/疑問

您好,我自架的 n8n 實例中的 Webhook URL 無法設定。我已經設定了 Cloudflare tunnel(我可以使用公開 URL xx.domain.com:5678 存取 n8n 實例並登入),並且我知道它正在運作。即使它沒有運作,也不會影響我的問題:

無論我如何更改環境變數,它都不會將 OAuth 重新導向 URL 從預設的 localhost:5678 更新為我的公開 URL。

以下是我設定的環境變數:

  • N8N_EDITOR_BASE_URL=
  • N8N_PROTOCOL=https
  • N8N_HOST=
  • WEBHOOK_URL=https://
  • N8N_PROXY_HOPS=1

我感覺自己在原地打轉。要麼我遺漏了什麼明顯的東西,希望有人能指出,要麼我需要清除所有東西重新開始,因為在過去的 3 週裡我一直在試圖解決這個問題而陷入了兔子洞。

關於您的 n8n 設定的資訊

  • n8n 版本: 2.20.7-exp.0
  • 資料庫(預設值:SQLite): sqlite
  • n8n EXECUTIONS_PROCESS 設定(預設值:own、main): N/A
  • 執行 n8n 的方式(Docker、npm、n8n cloud、桌面應用程式): npm
  • 作業系統: Ubuntu 24.04.4 LTS

@minkeyboy2004,歡迎!
在使用 npm 版本的 n8n 時,你有試過在執行 n8n 之前先在 shell 中匯出這些變數嗎?像是執行這些命令:

export N8N_HOST=xx.domain.com
export N8N_PROTOCOL=https
export N8N_EDITOR_BASE_URL=https://xx.domain.com/
export WEBHOOK_URL=https://xx.domain.com/
export N8N_PROXY_HOPS=1

然後執行 n8n start。大多數情況下這就是解決方案,因為對於 n8n,有時候你設定的環境變數無法被存取。試試看這個方法,如果還是失敗的話告訴我。

確保你根據以下內容設定這些變數:

@Anshul_Namdev,

抱歉我可能應該早點說明我是怎麼設定的!是的,我一直在用「export」指令來執行它們,而不是把它們儲存在檔案裡。當我在 CLI 執行「env」指令時,我會得到所有那些變數,並顯示我定義的值,而且我在每次更改後都停止過實例並重新啟動,但都沒有用。

歡迎 @minkeyboy2004 加入我們的社群!我是 Jay,我是 n8n 認證創作者。

對於 npm install,變數需要放在 .env 檔案中,或在啟動 n8n 之前在同一個 shell 工作階段中設定。最可靠的方法是建立一個 ~/.n8n/.env 檔案(n8n 會自動讀取),或在你的 systemd 服務檔案中的 [Service] 下設定,使用 Environment="WEBHOOK_URL=https://yourdomain.com/"。還有一個重點是使用 WEBHOOK_URL,而不是 N8N_HOST。設定 WEBHOOK_URL=https://yourdomain.com/(包含末尾斜線)並重啟 n8n。重啟後,在 UI 中檢查「設定」>「n8n API」來確認 webhook URL 已更新。

歡迎來到 n8n 社群 @minkeyboy2004
你是如何啟動你的 n8n 的?

@nguyenthieutoan

我已經按照你的建議做了,在 n8n 目錄下建立了環境檔案 ~/.n8n/.env 並重新啟動了 n8n,但回呼 URL 仍然顯示為「localhost」

以下是檔案配置:

我也嘗試過移除 N8N_HOST 和編輯器基礎 URL(因為我在螢幕截圖中設定過),在所有變更後重新啟動,但它仍然顯示 localhost:5678

@tamy.santos

我認為你已經解決了!我使用 PM2 Process Manager 以便能夠即時查看應用程式的指標,而不需要登入伺服器進行檢查。我通常會使用 “pm2 start n8n” 來啟動,但自從建立了 .env 檔案並只使用 “n8n” 來啟動後,它似乎就能正常運作了,所以無論 pm2 做了什麼包裝動作,顯然都會破壞它。

感謝你們兩位!全部功勞歸功於 @tamy.santos@nguyenthieutoan 兩位

對於日後遇到這個問題的其他人,PM2 似乎阻止了 n8n 取得環境變數。如果我找到如何在設定環境變數的同時使用 PM2 的方法,我會更新這個回覆。

啊真棒 @minkeyboy2004
我很高兴!感谢你把回答标记为解决方案,这样其他成员可以更容易地找到帮助。
随时欢迎你回来,如果需要的话 :waving_hand:

@minkeyboy2004 很高興你已經解決了這個問題!對於 PM2 + 環境變數的問題,解決方法是使用 PM2 生態系統檔案(ecosystem.config.js),在 env 鍵下設定你的環境變數,然後執行 pm2 start ecosystem.config.js。這樣 PM2 會直接將變數傳遞給程序,而不是依賴它讀取 .env 檔案(PM2 預設不會這樣做)。

對於任何回到這裡的人:我按照本指南使用 PM2 設定環境變數!