工商時間這系列講的是「讓本地系統安全走入公網」——而在那之前,你得先有一套真正能打的 AI 全端應用: 《AI 賦能全端開發:從零打造企業級智慧應用》:從 Spring Boot 後端、React 前端到資料庫與權限,一路加上 Spring AI、RAG 與 AI Agent,用一個專案走完整條路。 🎁 課程最後額外加碼「Cloudflare Tunnel 穿透實戰」:教你如何在免固定 IP、不開路由器 Port 的安全前提下,把公司內部或本機架設好的全套系統安全穿透到公網,讓外部客戶、主管或團隊直接連線體驗! |
一條指令把 Spring Boot + React 送上公網:Cloudflare Tunnel 實戰
上期我們把內網穿透的底層秘密拆開了:不要等待外部連進來,而是由本地主動向雲端邊緣(Edge)建立出站長連線。
這期我們直接動手。
情境很常見:你在筆電上跑著 Spring Boot 後端(localhost:8080),前端 React 開發伺服器跑在 Vite(localhost:5173)。客戶或主管說想線上看一下 Demo,或者你想在手機上實測觸控體驗。
你不需要去 AWS 開 EC2、不需要買固定 IP、不需要登入路由器設定 Port Forwarding,甚至不用自己去申請 SSL 憑證。
我們只需要一個工具:cloudflared。
四步打通公網隧道
整個設定流程乾淨俐落,在 Windows(PowerShell)或 macOS/Linux 上完全一致:
第一步:安裝並登入 Cloudflare
# Windows 使用 winget 安裝(或至官方 GitHub 下載單一執行檔)
winget install Cloudflare.cloudflared
# 授權登入(會自動彈出瀏覽器,選擇你託管在 Cloudflare 的網域名稱)
cloudflared tunnel login
第二步:建立專屬隧道(Tunnel)
# 建立名為 ai-crm 的隧道
cloudflared tunnel create ai-crm
執行後會得到一個隧道的 UUID(例如 a1b2c3d4-5678-90ab-cdef-1234567890ab),並在本地的 .cloudflared 資料夾生成以該 UUID 命名的認證憑證檔案(<UUID>.json)。
第三步:核心靈魂——一份 config.yml 搞定前後端同站路由
傳統部署全端專案最煩的就是 CORS(跨來源資源共用):前端在 domain-a.com,後端在 api.domain-b.com,每次發請求瀏覽器都要先送一次 OPTIONS preflight,Headers 沒設好就直接報紅。
Cloudflare Tunnel 的 Ingress Rules 讓我們用一份檔案,把前後端收攏進同一個網域名稱:
# config.yml
tunnel: a1b2c3d4-5678-90ab-cdef-1234567890ab
credentials-file: C:\Users\your-name\.cloudflared\a1b2c3d4-5678-90ab-cdef-1234567890ab.json
ingress:
# 1. 將 /api 開頭的所有後端請求,導向 Spring Boot (8080)
- hostname: crm.yourdomain.com
path: ^/api
service: http://localhost:8080
# 2. 其餘所有頁面請求,導向 React Vite 前端 (5173)
- hostname: crm.yourdomain.com
service: http://localhost:5173
# 3. 兜底規則(Catch-all):未匹配的請求回傳 404
- service: http_status:404

第四步:綁定 DNS 並啟動隧道
# 讓 Cloudflare 自動在你的網域下加上 CNAME DNS 紀錄
cloudflared tunnel route dns ai-crm crm.yourdomain.com
# 啟動隧道!
cloudflared tunnel run ai-crm
按下 Enter 的那一瞬間,打開瀏覽器輸入 https://crm.yourdomain.com——
你的本地開發機,已經頂著全球 Anycast CDN 與正式 HTTPS 憑證,正式對全世界開放了。
