一份 Docker Compose 可唔可以重建成部 home server?單一指令仍然欠資料備份
3C 產品

一份 Docker Compose 可唔可以重建成部 home server?單一指令仍然欠資料備份

圖片:via XDA Developers — https://www.xda-developers.com/run-my-entire-home-server-in-one-docker-compose-file/
TechLab 編輯部(譯)·

Compose 管到容器架構,異機復原仲要補齊資料、密碼同還原測試

XDA 作者 Yash Patel 將 Home Assistant、Immich 同 Nextcloud,連同 PostgreSQL、MariaDB、Redis 等配套服務,集中放入一份 Docker Compose 設定。佢測試拉取新映像再強制重建容器,原有設定同資料仍然保留,日常維護確係方便咗。不過呢次測試沿用同一部機上面嘅 volumes,所以佢證明到嘅範圍,其實係重建容器架構,未去到整部 home server 災難復原。

Services:份檔案其實係部機嘅裝配圖

services 會記低每個 app 用咩映像、開邊個 port、掛載咩路徑、點樣重啟,同邊啲資料庫有依賴。換句話講,只要新機已裝 Docker,相關映像仲拉得到,Compose 就可以按同一張裝配圖砌返批容器。呢個做法好過靠腦記低十幾條指令,亦方便將 YAML 放入版本管理。不過映像 tag 如果只寫 latestrelease 或其他會郁嘅標籤,幾個月後再拉取,攞到嘅版本未必同今日一樣;想復原結果可預計,應該記錄清楚版本,升級前亦要先睇各服務嘅遷移要求。

Docker Compose 應用模型圖,顯示前後端服務、網絡、volume、設定同 secret 之間嘅關係

圖片:Docker

Networks:全部服務放埋一齊,界線要自己畫

Compose 就算冇明寫 networks,都會建立預設網絡,入面嘅容器可以用 service 名互相搵到。細規模測試夠用,但相片、檔案、智能家居同幾個資料庫全放喺同一個網絡,任何一個容器出事,橫向接觸其他服務嘅範圍都會闊咗。較穩陣嘅寫法係拆開前端、資料庫同內部服務網絡,只畀真係要溝通嘅容器加入;對外 port 亦應該開得愈少愈好。服務多起上嚟,按功能拆成幾份 Compose 再用 include 或多檔合併,通常易睇過一份愈寫愈長嘅大檔。

Volumes:識得掛載,唔代表入面有舊資料

原文重建後資料仍然存在,關鍵係 named volumes 同 Home Assistant 嘅 bind mount 冇俾刪走。Compose 可以喺 volume 唔存在時建立一個新 volume,但嗰只係空殼;新硬碟上面執行同一指令,Immich 相片、Nextcloud 檔案、資料庫內容同 Home Assistant 設定唔會自己返嚟。搬機前要逐項列出資料實際喺邊,包括 named volumes、host 路徑、外置儲存同資料庫。備份亦要離開原本嗰隻碟,否則硬碟一死,容器同所謂持久資料會一齊消失。

環境變數同 secrets:用 .env 係方便,不過唔好連密碼一齊提交

作者用 .env 放資料庫同管理員密碼,Compose 亦會代入相關變數,做法簡單直接。不過 .env 仍然係普通文字檔,誤傳去 Git、同步空間或者除錯紀錄,就有機會洩漏憑證。Docker 官方建議敏感資料用 secrets,按服務授權,再以檔案形式掛入容器;當然,原始 secret 檔本身仍要安全保存。異機復原時,Compose、非敏感設定、secrets 同檔案權限要一套過準備,亦要確認新機嘅 UID、GID 同掛載路徑一致,否則容器起到都可能讀唔到資料。

Healthcheck:容器顯示 running,個 app 未必準備好

原文主要靠 depends_on 排先後,但短寫法只保證依賴容器先啟動,唔保證資料庫已經可以接收連線。Docker 官方文件講得好清楚:要配合 healthcheckcondition: service_healthy,Compose 先會等資料庫健康再開上層 app。對 Immich、Nextcloud 呢類一開機就要連資料庫嘅服務,呢步可以減少重建後反覆 crash 或連線失敗。健康檢查亦要揀真正反映服務狀態嘅指令,淨係睇 process 仲喺度,實際幫助有限。

單一 command 可以做幾多,個分界要講清楚

作者用嘅指令會先拉取映像,再強制重建整個 stack,同時清走已經唔喺設定內嘅孤兒容器。日常更新幾爽快,不過原文兩段命令以分號相連,前面拉取失敗,後面仍可繼續執行;正式維護最好先檢查設定、備份同映像版本,確認冇問題先重建。更重要係,Compose 檔、環境設定同資料備份要分開看待:前兩者重現服務結構,備份先帶得返相片、檔案、資料庫同自動化設定。

真正可搬機,要做一次空機還原

一套實用方案至少要備份 Compose、相關設定目錄、secrets、每個 persistent volume,資料庫亦要有狀態一致嘅 dump 或快照;備份完成後仲要有另一份離機副本。最有效嘅驗證方法係搵部空機或臨時 VM,按文件由零開始,先還原資料,再啟動 stack,逐個 app 登入檢查相片、檔案同設定。原文個做法適合整理 home server,亦值得跟,但未做過異機還原之前,「一條指令重建成部機」仍然只涵蓋容器嗰半邊。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook