最近我把主站由 humfurie.org 遷移到 humfurie.com。聽落只是改個名,結果牽涉到 DNS、動態 DNS、Cloudflare 快取、反向代理、DNS 過濾器,以及我自行架設的幾乎所有服務。我從來冇諗過會咁麻煩,所以寫低這篇文章,記錄改了甚麼、需要更新甚麼,以及如果你也要做同樣的事,應該檢查哪些東西。
改了甚麼
兩個網域同時對調了角色,這正是它比一般遷移更複雜的原因:
- humfurie.org 變成了 humfurie.com。現在這是我的主站和作品集。
- humphrey.humfurie.org 變成了 humfurie.org。這是一個獨立的網站:一個 Laravel 加 React 12 的應用程式,是我用來學習 Laravel 的副業項目。
所以 humfurie.org 並不是消失了,而是指向了一個與以前完全不同的網站,這會影響快取等方面,下面會講到。
第 1 步:DNS 記錄和動態 DNS
第一項工作是把我所有的網域和子網域加入新的 DNS 記錄。我對外提供的每個服務都有自己的主機名稱,所以每一個都需要在新網域下建立一條記錄。
我亦在 Portainer 用 oznu 的映像檔設定了動態 DNS(DDNS)。當你屋企寬頻的公開 IP 位址改變時,DDNS 可以令 DNS 記錄繼續指向你的網絡。如果冇它,網絡供應商一旦分配了新位址,自行架設的環境就可能無聲無息地失效。
第 2 步:切換子網域上的每個服務
所有運行在子網域上的東西都要遷移到新網域。清單比我記得的還要長:
- 我的作品集和新的 humfurie.org 網站
- Immich
- AdGuard
- Outline
- n8n
- humfurie.org 的 API
- 我的 Resend 實例
- Cordova 網站
- LibreChat
- 我的 R2 實例
這些服務各自的設定裏都引用了自己的主機名稱,所以改完 DNS 之後,冇一個可以當成「設定好就唔使理」。
第 3 步:重做 Cloudflare 快取
切換之後,頁面不能正常載入。原因是快取:Cloudflare 仍然保留着舊環境的內容和設定。我要重做快取,頁面才恢復正常。
我亦專門重做了 humfurie.org 的快取設定。因為它現在是一個與原本那個位址上完全不同的網站,舊的快取行為已經不再適用。如果你也把網域挪給新網站使用,同樣要處理這個問題。
第 4 步:更新程式碼和 MCP 連線
程式碼方面,我把作品集改成使用 humfurie.com。由於我的個人服務現在換了網域,我亦更新了 Claude 的 MCP,因為舊的 URL 已經失效。做完這些之後,我把所有改動都推送上去。
第 5 步:伺服器端(這還未完結)
我以為程式碼推送完就完事,其實不然。部署在我自行架設伺服器上的服務,同樣需要使用新網域:
- 我透過 SSH 連上伺服器,把每個服務都拉取了最新程式碼。
- 我更新了各個 .env 檔案,裏面存放着每個服務啟動時讀取的網域設定。
- 我更新了 Traefik,也就是我的反向代理。它按主機名稱來路由請求,所以換網域意味着這裏亦有大量要改的地方。
- 我更新了 AdGuard,因為我用到它的 DNS 功能,裏面的項目需要和新網域保持一致。
第 6 步:我仍然無法解釋的警告(本地問題定全球問題?)
就在我以為一切正常時,出現了一個新問題。我的一些子網域(n8n、outline 和 cordova)被顯示為不安全,瀏覽器提示連線不是私人連線。這個問題仍未解決,老實說,我還不知道它只是我自己網絡上的本地問題,還是所有人都會遇到的全球問題。
以下是我目前的發現,以及為甚麼說不通:
- Google 安全瀏覽的網站狀態顯示這些網站是安全的,但警告依然出現。
- SSL 憑證看起來冇問題。我在 Mac 上檢查 n8n.humfurie.com,見到的是切換當日簽發的有效 Let's Encrypt 憑證,主機名稱亦正確。所以至少在那條路徑上,憑證看起來冇問題。
- 我的 DNS 返回了奇怪的結果。查看 AdGuard 的查詢記錄,返回的位址是 0.0.0.0 或 192.168.0.0,而我的伺服器本應返回 192.168.1.1。據我所知,這個情況對所有網站都存在,不只是我自己的,這顯示問題出在我的 DNS 設定上,而不是 Google。
我目前懷疑是 AdGuard,因為我在使用它的 DNS 功能,而且遷移期間改動了很多設定。返回空位址的 DNS 過濾器會令瀏覽器無路可去,憑證警告可能只是副作用。但我仍未確認,亦不能排除新網域確實存在信譽問題的可能。接下來我會查看查詢記錄裏每次回應的原因(攔截、改寫,還是上游返回的結果),比較 AdGuard、路由器和公共解析器(例如 1.1.1.1)的回應,並用手機的流動數據開啟同樣的網站,看看問題在我的網絡以外是否也會出現。
等我弄清楚是本地問題還是全球問題,我會更新這一節。
如果你要切換網域,請對照這份清單
- 開始之前,列出所有使用舊網域主機名稱的服務。
- 把所有新網域和子網域加入 DNS 記錄,如果 IP 會改變,請設定 DDNS。
- 清除並重建 CDN 快取,尤其是當舊網域現在指向另一個網站時。
- 更新每一個應用程式設定和 .env 檔案,而不僅僅是程式碼儲存庫裏的程式碼。
- 更新反向代理的路由規則。
- 更新所有引用舊名稱的本地 DNS 或過濾規則,並用網絡以外的裝置都測試一次。
- 更新透過 URL 呼叫你服務的整合,包括 MCP 連線這類工具。
- 盡早在 Google Search Console 驗證新網域,這樣子網域被標記時,你可以看到安全警告並申請重新審核。
最後的想法
大部分環境現在已經運行在新網域上,但步驟比我預期的多得多,第 6 步的警告仍然是個懸而未決的問題。最主要的教訓是:自行架設意味着你要為每一個依賴負責,包括那些你已經不再留意的部分,例如 DNS、快取和路由。如果你打算做類似的遷移,先寫好檢查清單,而且不只要在自己的網絡內測試,亦要在網絡以外測試。想起更多細節之後,我會繼續補充這篇文章。