經過昨天的 Docker Compose 封裝,我們的系統已經具備了上線的基礎。但在目前的狀態下,如果你拿起手機,在 Telegram 裡傳送一個網址給你的 Bot,系統是不會有反應的。
因為我們的 n8n 和 FastAPI 都運行在電腦的「內部網路」中,而 Telegram 的伺服器位於雲端,它無法直接穿透你家的路由器把 Webhook 請求送進來。為了解決這個問題,並確保連線的安全性與穩定性,我們將引入企業級的解決方案:Cloudflare Tunnel。
建立企業級外部通道:Cloudflare Tunnel
與 ngrok 每次重啟就會換網址不同,Cloudflare Tunnel 可以綁定您自己的專屬網域(例如 n8n.yourdomain.com),並且完全免費、提供 SSL 憑證,還能隱藏您伺服器的真實 IP。
(前提:您需要有一個託管在 Cloudflare 的專屬網域)
Step 1:取得 Tunnel Token
Step 2:將 Tunnel 加入 Docker Compose
這就是 Docker 架構最迷人的地方!我們不需要在電腦上手動安裝軟體,只要在昨天的 docker-compose.yml 裡面多加一個服務即可:
請打開 docker-compose.yml,在 services 區塊中加入 cloudflared:
version: '3.8'
services:
# ... (原本的 fastapi 區塊) ...
# ... (原本的 n8n 區塊) ...
# 新增 Cloudflare Tunnel 服務
cloudflared:
image: cloudflare/cloudflared:latest
container_name: ai_tunnel
restart: always
command: tunnel run
environment:
- TUNNEL_TOKEN=這裡貼上您剛剛複製的_TOKEN
depends_on:
- n8n
存檔後,在終端機執行 docker compose up -d,Tunnel 就會在背景啟動並連上 Cloudflare!
Step 3:設定 Public Hostname
設定完成後,您的 n8n 正式擁有了一個安全的公開網址
既然我們有了正式網址,就不需要再每次手動點擊畫布上的按鈕了。
更新 Webhook 網址:請回到 Telegram 或是您的 Webhook 節點,如果是自行綁定的 API,請將接收網址更新為你自己的網址
開啟 Active 開關:在 n8n 畫布的右上角,將 workflow publish。這代表 n8n 已經從「測試模式」切換到「正式上線模式」。現在,它會 24 小時在背景待命,你完全不用打開 n8n 網頁,它也能自動接收手機傳來的訊息。
當你在手機上貼上一個網址並按下傳送,資料將會經歷以下這段完美的接力賽:
沒有任何人工介入,完全自動化。