架設網站有多累

如果你還以為架網站只要選好版型、打打字就好,那你就大錯特錯了,網站最難的不是製作的過程本身,也不是寫html,真正的惡夢是「讓全世界的人連上你的網站」。

這一個月來,除了網站本身的排版與設計,我最大宗的心力其實都耗費在解決「連線問題」上。畢竟網站做得再精美,如果架好之後別人連不上,那不是很尷尬嗎?於是我就踏上了一個無盡深淵......。

一、DDNS的迷思(需要公網IP)

一開始,我天真地以為只要搞定動態 DNS 就能讓外網訪問。於是嘗試了Duck DNS 和 No-IP 這類主流服務。

然而————當時的我根本沒有公網IP。在沒有真實對外IP的情況下,這些解析服務就像是給了你一個精準的地址,卻發現根本沒有一條路可以通到你家。這場試驗很快就宣告失敗,讓我第一次感受到內網架站的殘酷現實。

二、使用Tailscale Funnel做內網穿透(不太推薦)

既然傳統的DDNS行不通,我轉而把目光投向了我平常就有在用的VPN軟體 Tailscale。這款軟體有玩過 Minecraft Java版的人可能有聽過,只要你跟朋友都有安裝並加入同一個虛擬區域網,就可以進入彼此的世界。

然後我發現 Tailscale 其實還藏著一個「內網穿透」功能————Tailscale Funnel。簡單來說,它可以讓沒有安裝 Tailscale 的外人也能直接透過瀏覽器訪問。這對於當時急需對外連線的我來說,簡直就像是黑暗中看到的一線曙光。

透過 Tailscale Funnel,我建立了一個能直接從外部訪問的連結:originalfries.tail9060b2.ts.net。但這條克難的通道帶來的卻是滿滿的痛苦:

  • 連結超級長,根本無法記憶。
  • 速度極為緩慢。
  • 極度不穩定,三不五時就會自己斷線。

為了維持Tailscale Funnel的運作,我甚至在樹莓派上寫了一個自動化腳本。設定每5分鐘透過 curl 自動檢測一次網站的HTTP狀態碼:

# 每5分鐘自動用curl 檢查網域狀態,若斷線則觸發以下重啟指令:

if [ "$STATUS" -ne 200 ] && [ "$STATUS" -ne 301 ] && [ "$STATUS" -ne 302 ]; then
    /usr/bin/tailscale serve reset
    /usr/bin/tailscale funnel --bg 80
fi

同時用 crontab 設定定時任務讓它背景默默執行。但是最糟的情況是,剛檢查完就斷線,那就必須空等整整五分鐘,直到下一次檢測觸發才會恢復。

三、申請公網IP(不是每個人都適用)

受夠了不穩定的Funnel 之後,我徹底死心,決定嘗試去跟電信商申請一個專屬的公網IP。

沒想到,這成了壓垮駱駝的最後一根稻草。經過一番查詢與確認,我才發現家裡使用的「全科寬頻」只能提供內部IP,根本無法提供獨立的公網IP。

四、Cloudflare Tunnel 搭配 購買網域(我的解法)

在陷入絕望之際,我開始研究 Cloudflare Zero Trust。發現它只需要輸入一張信用卡進行驗證,就能免費使用!免費版的額度可能對我來說根本用不完。

而且我發現網域並沒有想像中的那麼貴,甚至一年只要花個200-300台幣就能買到不錯的域名,大概就是一兩餐的價錢吧?於是我就買了,並且透過 Cloudflare Tunnel 建立安全的對外通道,這才解決了網站的連線部分。

然而,這還只是架設網站作業的冰山一角而已喔,還有著大量的挑戰與Debug等著你!

返回頂端