璦翎爸
發布於 2026-03-24 / 15 閱讀
0

【實戰紀錄】從底層修改到 Docker 部署:我的 Halo 網誌重生之旅

這不是一篇普通的安裝教學,而是一個「碼農爸」為了追求極致,從 Eclipse 開發環境搭建、源碼修改,到最終在 NAS 上實現跨平台打包部署的血淚實戰。

🛠 一、 開發環境的拓荒:Eclipse 與 Gradle

一切的起點,是想在 Mac 上建立一個可以修改 Halo 源碼的環境。

  • 基礎搭建:安裝 Java 21 與 Eclipse。我們遇到了專案結構的挑戰,Halo 並非 Maven 專案,而是 Gradle

  • 關鍵修正:為了解決繁體語系的不完整,我們深入 SignUpData.java 調整邏輯,並手動補齊了 zh-TW.jsonmessages_zh_TW.properties

  • 編譯挑戰:學會使用 ./gradlew clean build -x test 跳過冗長的測試,直接取得核心的 .jar 執行檔。

🐳 二、 容器化的進擊:Docker Desktop 與 Buildx

當程式改好了,如何讓它跑在 Synology DS716+ 上?

  • 架構陷阱:我的 Mac 是 Intel CPU,雖然與 NAS 架構一致,但為了保險與未來的遷移性,我們學會了使用 docker buildx

  • Dockerfile 實戰:透過多階段建置(Multi-stage build),將 Gradle 產出的 JAR 檔包裝成專屬的 Image my-halo:v1

  • 映像檔搬運:利用 docker save 導出 .tar,再透過 scp 傳送到 NAS,用 docker load 完成匯入。

💥 三、 重生之路:徹底清空與初始化

部署過程中,我們遇到了最棘手的問題:密碼失效與資料庫鎖死

  • 暴力美學:在只有一篇測試文章的情況下,我果斷選擇「砍掉重練」。

  • 清理指令

    Bash

    sudo docker compose down
    sudo rm -rf db logs indices  # 徹底清除舊資料的靈魂
    
  • 重新出發:手動建立 mkdir db 並賦予 777 權限,看著 8090 埠跳出「初始化歡迎畫面」的那一刻,一切辛苦都值得了。

⚙️ 四、 最後的調校:URL 與主題設定

重生後的前台空白,是最後的魔王。

  • 網址校正:發現 HALO_EXTERNAL_URL 設定錯誤,導致 CSS 抓不到。我們直接修改 compose.yaml 強制指定 http://192.168.1.253:8090/

  • 主題初始化:解決了 Theme setting was not found 的警告。透過手動儲存一次主題設定,成功讓資料庫與硬碟檔案同步。

💡 結語:碼農的精神

這段過程教會我一件事:部署不只是執行指令,而是理解程式、環境與資料之間的關係。 當我現在看到「哎又不落課」首頁美美的畫面,那種親手編譯出來的成就感,是直接安裝官方版本無法比擬的。