本文將帶你一步步從零開始,在本地端(Windows 系統為例)架設 n8n 並使用 Cloudflare Tunnel 將本地服務映射為網路可訪問的固定公開網址。過程中會詳細解說重要設定與可能遇到的注意事項。
1. N8N是什麽
n8n 是一個開源的自動化工作流程平台,讓用戶可以透過圖形化介面(拖拉節點)來串接和自動化各種工具、平台與服務,無需寫程式也能輕鬆建立自動化流程(雖然我的這個要寫不少JS跟SQL就對了)。
像是下面的圖片,有許多的節點跟綫條連接,這樣做的好處就是可讀性高,以及維護容易。

主要特點
- 開源免費:n8n 完全開源,任何人都可以免費下載、使用、修改,並根據需求自行部署在本地或雲端。
- 視覺化操作:只需拖拉節點、設定參數,就能設計複雜的自動化工作流,適合沒有程式基礎的使用者。
- 高度彈性與擴充性:支援自訂節點、腳本(如 JavaScript),也能安裝社群第三方擴充,適合開發者進行進階自動化。
- 豐富的整合能力:內建超過200~400種第三方應用整合(如 Google Apps、Slack、Trello、GitHub、AWS、Notion、LINE、Shopify 等),可滿足各式自動化需求。
- 自我託管:用戶可選擇將 n8n 部署在自己的伺服器,完全掌控資料安全與隱私
爲什麽需要N8N?
先想清楚:什麽事值得自動化?
- 重複性高:每天、每週都要做的瑣事。
- 很花時間:不是難,但就是煩、耗時。
- 流程固定:步驟一樣、邏輯清楚。 訂閲系統就符合以上所有需求
如何開始使用n8n
你可以使用:
- 官方的托管伺服器: https://n8n.io/
- 本地端伺服器: 本次使用Docker Desktop來建立。
- 其他部署平臺
1. 環境與準備條件
- Windows 電腦已安裝 Docker Desktop
- 已擁有自己的網域且 DNS 交由 Cloudflare 管理(或可自行將 DNS 指向 Cloudflare)
- 了解 Cloudflare Tunnel 基本概念
2. 用 Docker 安裝 n8n
確認 Docker Desktop 已安裝啟動
- 下載並安裝 Docker Desktop
- 安裝完成並啟動,確保 Docker 正常運行 執行以下指令確認docker是否安裝成功
docker --version
應該能出現版本號

創建一個資料夾來存放你的N8N的資料 你可以挑選一個你喜歡的位置當作N8N資料的存放點,之後你儲存的那些版本都會放入這個資料夾下面。
將n8n鏡像檔pull到docker容器裏面
docker pull n8nio/n8n
4. 執行docker run,運行伺服器
執行下列命令
docker run -it --rm -p 5678:5678 -v <YOUR-FOLDER-PATH>:/home/node/.n8n n8nio/n8n
# 範例
# docker run -it --rm -p 5678:5678 -v D:\Learning\n8n:/home/node/.n8n n8nio/n8n
他將會開啓一個localhost:5678的伺服器,之後就可以注冊N8N賬號!
至此,你已經知道如何架設N8N伺服器在本地的Docker Desktop上了。
其實,如果你只是要使用基礎的一些功能(完全離綫操作)了話,到這一步就可以了。
但是這個我會改成使用本地伺服器的原因就是,HuggingFace Spaces在使用寄送mail節點的時候,他會擋住SMTP的端口,就會在認證的時候會一直出現Timeout,或者像是連不到網路卡住一樣,以至於不能使用send mail節點,但是可以使用Gmail節點,不過gmail節點同樣有他的限制。
如果你有看我的這篇文章了話,就會知道我把伺服器假設在huggingface spaces上
- 使用OAuth2:
可以使用OAuth2來當作認證的憑證,但是這個辦法有一個很明顯的缺陷,就是這個憑證會每隔一段時間(我實際經驗大概是3-5天)就會失效,所以我的訂閲系統常常就會失效。- 使用Service Account:
還有一個辦法就是可以在google cloud開啓Service Account,但是這個需要google workspace等級的賬號才能開啓,使用個人信箱的使用者是沒辦法使用這個google service Account的。
所以我決定將我的N8N的伺服器從HuggingFace Spaces 搬到我的主機上。
3. 將你的網域 DNS 設為由 Cloudflare 管理(免費)
爲什麽需要使用Cloudflare
如果你有要使用webhook節點了話,在本地的伺服器他預設的Webhook URL會是類似下面這種形式
http://localhost:5678/webhook-test/subscribe
如果你將網頁設在別人托管的伺服器了話,他根本不知道你的localhost:5678到底實際的位置在哪。
這個就像你問你朋友現在實際位置在哪,然後他跟你說在家一樣搞笑,所以需要一個方法讓外地的伺服器知道你實際的位置,那就會需要内網穿透。

内網穿透:
内網穿透是一種網路技術,其主要目的是讓外部網路的用戶能夠連接和訪問位於內部私有網路(內網)中的設備或服務。通常內網中的設備使用的是私有IP地址,這些地址在公共互聯網上是無法直接訪問的,因為內網通常被防火牆和路由器保護著,只允許授權用戶從外網進入。內網穿透的基本原理
建立中轉服務器(穿透服務端):
在公共網路(外網)架設一台中轉服務器,這台服務器具有公網 IP,可以被外部訪問。內網設備啟動穿透客戶端:
內網中的設備啟動穿透客戶端軟體,主動向中轉服務器建立連線。因為是內網發起連線,所以不會被防火牆阻擋。建立安全通道(隧道):
中轉服務器和內網客戶端間建立一條安全的隧道,當外部用戶訪問中轉服務器的指定端口或域名時,服務器會將請求通過隧道轉發到內網目標設備。數據傳輸與回應:
外部用戶透過中轉服務器發送的請求,經過隧道傳到內網設備,處理後的回應經由隧道返回給外部用戶。
這樣做的好處:
不用在路由器開放端口或配置複雜的轉發規則。
不暴露真實的內網 IP,增強安全。
可讓位於 NAT(網絡地址轉換)後的內網設備可被外部訪問。
簡單比喻:
內網穿透就像是一條秘密通道,讓外面的人可以透過一條安全的地下通道進入你的內部房間,而不需要從正門(互聯網公開入口)走,只要能找到這條秘密通道,並且通道的兩端都有專人看守並加密溝通,外部世界就可以安全又方便地訪問內部。
實現步驟
先聲明,我是在namecheap租用我的網域名稱的,所以會需要下面的步驟,如果你在其他地方租用網域,操作方式或許會有點不同
- 先登入 Cloudflare,註冊帳號(免費)。
- 進入之後,點擊連結網域

- 點擊繼續

- 選擇免費

- 然後會出現以下畫面

- 登入namecheap
- 點擊MANAGE

- 點擊Advanced DNS,然後確定DNSSEC有關閉,像我這樣

- 點擊Domain,將Cloudflare提供的兩個DNS替換,點擊NameServes的DNS選項,選擇Custom DNS,將那兩個DNS複製貼上,然後記得點擊 ✔

- 回到CloudFlare點擊繼續
- 完成的話會發送一封mail到你注冊的賬號裏面,收到就代表完成,可以進行下一步
三、安裝與設定 Cloudflare Tunnel
1. 安裝 cloudflared
- 下載 Windows 版 Cloudflare Tunnel 客戶端
2. 登入並建立 Tunnel
打開 PowerShell,執行:
cloudflared.exe login
- 預設瀏覽器會跳出 Cloudflare 登入與授權頁面
- 授權後會在
%USERPROFILE%\.cloudflared\產生授權憑證
3. 建立 Tunnel
建立 Tunnel(名稱自訂,如 n8n-tunnel):
cloudflared.exe tunnel create n8n-tunnel
4. DNS 綁定子域名
將你想要的子域名(比方說 webhook.yourdomain.com,請自行換成自己的)綁定到 Tunnel:
cloudflared.exe tunnel route dns n8n-tunnel webhook.yourdomain.com
這會自動在 Cloudflare DNS 承接 CNAME 記錄。
5. 編寫 cloudflared 設定檔 config.yml
在 %USERPROFILE%\.cloudflared\config.yml 建立或修改內容:
在同一個資料夾下,還有一個json檔,把這個名稱複製,接下來貼上。
tunnel:<YOUR-CREDENTIALS-FILENAME> # 在上面 create 指令有顯示
credentials-file: C:\Users\<YOUR-USERNAME>\.cloudflared\<YOUR-CREDENTIALS-FILENAME>.json
ingress:
- hostname: webhook.yourdomain.com
service: http://localhost:5678 # n8n 預設監聽本地端口
- service: http_status:404 # fallback 回傳404
請替換 <> 及 Windows 用戶名和yourdomain成真實的名稱。
6. 啟動 Tunnel
cloudflared.exe tunnel run n8n-tunnel
此時 Cloudflare Tunnel 會將你本地的 5678 端口透過 webhook.yourdomain.com 對外公開。
四、n8n 中 Webhook 節點設定
- 在 n8n 的工作流中新增一個 Webhook 節點
- 設定 Path,例如填
success(不帶前綴斜線) - 設定 HTTP Method (POST 或你需要的)
- 後續節點可以加入「Respond to Webhook」節點回應請求
- 啟用流程
五、修改以及呼叫你的 webhook
1. 在options選項新增Allowed Origins (CORS)
填入你的blog網址
2. 新增四個Response Headers
- Access-Control-Allow-Origin
Name: Access-Control-Allow-Origin
Value: *(允許所有域名) 或 https://tommypan.dev (只允許您的網站) - Access-Control-Allow-Methods
Name: Access-Control-Allow-Methods
Value: GET, POST, PUT, DELETE, OPTIONS - Access-Control-Allow-Headers
Name: Access-Control-Allow-Headers
Value: Content-Type, Authorization - Content-Type
Name: Content-Type
Value: application/json
你本地 n8n 用 Cloudflare Tunnel 對外公開後,要呼叫的網址格式是:
https://webhook.yourdomain.com/webhook/<YOUR-WEBHOOK-PATH>
這裡 webhook.yourdomain.com 是你 Cloudflare DNS 指向 Tunnel 的子域名,<YOUR-WEBHOOK-PATH> 是你在 Webhook 節點設定的 path。
總結
透過本篇文章,我們完成了從零開始在本地端架設 n8n 伺服器並讓外網能夠訪問的完整流程。以下是整個過程的重點回顧:
🎯 主要目標達成
- ✅ 成功在本地端部署 n8n 伺服器
- ✅ 解決了 HuggingFace Spaces 的 SMTP 限制問題
- ✅ 建立了穩定的外網訪問通道
- ✅ 配置了正確的 CORS 設定
📋 關鍵步驟回顧
- 環境準備:安裝 Docker Desktop 並確認運行正常
- 本地部署:使用 Docker 容器運行 n8n 服務
- 域名管理:將 DNS 轉移到 Cloudflare 進行管理
- 隧道建立:使用 Cloudflare Tunnel 實現內網穿透
- Webhook 配置:設定正確的 CORS 響應頭
🔧 技術要點
- Docker 容器化:確保 n8n 服務的穩定運行和易於管理
- Cloudflare Tunnel:安全可靠的內網穿透解決方案
- CORS 配置:解決跨域請求問題,確保 webhook 正常運作
- DNS 管理:透過 Cloudflare 提供額外的安全性和效能優化
💡 為什麽選擇本地部署?
相比於 HuggingFace Spaces 等雲端平台,本地部署的優勢包括:
- 無 SMTP 限制:可以正常使用郵件發送功能
- 完全控制:資料和服務完全掌握在自己手中
- 成本效益:長期使用成本更低
- 穩定性:避免雲端平台的服務中斷影響
透過這個完整的部署流程,您現在擁有了一個功能完整、穩定可靠的 n8n 自動化平台,可以支援各種複雜的自動化需求,特別是像電子報訂閱系統這樣需要穩定郵件發送功能的應用場景。
