2026年9月21日 星期一

在 私人網路上把 WordPress 架給全世界看: Vic 的疊代筆記上線記

這一篇記錄在我這台 ASUS Ascent GX10 電腦上,把一個 WordPress 部落格從零架起來、並在「沒有路由器管理權」的限制下讓外網成功訪問的完整過程。有成功、有踩坑,失敗的部分恰恰是最有學習價值的。

一、環境與限制(先講難的)

項目 現況
主機 Ubuntu 24.04 ARM64,20 核 / 121GB RAM / NVIDIA GB10
對外網路 LTE AP,沒有管理權,改不了 port forward
對外 IP 223.143.242.85(動態,隨時可能換)
既有域名 duckdns.org(NS 在註冊商 giantpanda)+ Duck DNS 子域

核心限制只有兩句:① 入站 port forward 做不到;② 域名註冊商不給 NS 編輯權。這兩個限制直接決定後面的路線。

二、第一階:Docker Compose 把 WordPress 跑起來

三個容器一把梭:

services:
  db:        # MySQL 8
    image: mysql:8.0
  wordpress: # 網站本體
    image: wordpress:latest
    ports: ['8082:80']
  tunnel:    # Cloudflare 正式 tunnel(之後留作後備)
    image: cloudflare/cloudflared:latest
  quicktunnel: # Cloudflare Quick Tunnel(真正對外的通道)
    image: cloudflare/cloudflared:latest
    restart: always
    command: tunnel --no-autoupdate --url http://wordpress:80

WordPress 對外監聽 8082,本機 200 OK。這階沒有坑。

三、第二階:外網訪問的三段試錯(重點)

路徑 1:Duck DNS + 路由器 port forward

最經典的方案。Duck DNS 手動改成正確外網 IP,全球 DNS 都生效,外部打 80 埠回傳 522 —— 流量有到路由器,就是沒人把它轉發。

卡點在最後一步:LTE AP ,沒有管理權。此路正式封死。

路徑 2:Cloudflare Tunnel + 自有域名

「正統解」路線,我做到了 80%:

  • ✅ Tunnel 建立完成(token 模式、Healthy、自動重連)
  • ✅ Public hostname 路由:winson-blog.duckdns.org → http://wordpress:80
  • ✅ CNAME 指向 *.cfargotunnel.com,橘雲 Proxied 也開
  • ❌ NS 委派改不了:duckdns.org 的 NS 在 giantpanda,後台只有 A/CNAME 紀錄區,沒有「修改 NS」按鈕。Cloudflare 分配的 jewel / tim 兩個 NS 沒有人能寫進去

結論:註冊商不給 NS 編輯權 = Cloudflare 永遠停在 pending。卡了半天的最後 10%。

路徑 3:Cloudflare Quick Tunnel(採用 ⭐)

Quick Tunnel(trycloudflare.com)不需要任何 DNS、不需要改 NS、不需要路由器權限 —— 關鍵在於流量是家裡機器主動出站,LTE AP 完全不擋(它只擋入站)。一列命令:

command: tunnel --no-autoupdate --url http://wordpress:80

20 秒後拿到全球可解析的 HTTPS 網址。唯一代價:重啟容器隨機子域會換。寫了個 quicktunnel-url.sh,重開機跑一次就拿回新網址。

四、第三階:收尾(logo、主題、色調)

  • Logo:畫三個方向 —— A「疊層 V 字」(V = Vic + 版本堆疊)、B「收斂螺旋」、C「v1→v3 階梯」,選了 A
  • Favicon + 文章頭部:產出 16/24/32/48/180/192 全套,用 WP-CLI 導入媒體庫、設為 site_icon 和 custom_logo
  • 主題:Kadencia 不在 WP 官方庫(商業主題),改裝 GeneratePress 3.6.1 —— 極速、輕量、免費就夠
  • 色調:全套改成跟 logo 一致的 indigo 系 —— 連結 #4338CA、標題 #1E1B4B、code block 淺藍底,程式碼閱讀友善

五、現在能做到的

  • WordPress 本機 8082 常駐,Quick Tunnel 對全世界提供 HTTPS
  • 重開機 / 容器重啟:tunnel 自動重連,跑一次 quicktunnel-url.sh 拿回新網址
  • 外網 IP 換了?無所謂(出站流量,網址跟你家 IP 無綁定關係)

六、下一步(坦白講)

  1. 固定網址:Quick Tunnel 的隨機子域每次重啟都換。正解是找一個「改得到 NS 的域名」—— 花 $10 年在 Porkbun / Namecheap / Cloudflare Registrar 任買一個,接上現有的 tunnel token,網址就永久固定。這是最該做的下一步
  2. SMTP + 備份策略(目前 wp 只在 volume,還沒備份機制)

一句話總結:限制不會讓你做不成,只是在逼你選對工具。沒有 router 權限,就用出站 tunnel 替代入站轉發;沒有 NS 委派權,就用不需要 NS 的 tunnel。這篇部落格本身,就是那段試錯的產物。

沒有留言:

張貼留言