找回密碼
 立即註冊
    查看: 171|回覆: 0

    Docker Compose 管理智能家居容器:完整的檔案、驗證與維運流程

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 02:07:03 | 顯示全部樓層 |閱讀模式
    用介面一個一個開容器,改設定要翻好幾層,換機器要全部重來。這一篇給一份可以直接用的完整 compose 環境:目錄怎麼排、密碼放哪裡、每一個服務怎麼驗證它真的起來了,以及更新與回滾的流程。

    用介面一個一個開容器,改設定要翻好幾層,換機器要全部重來。這一篇給一份可以直接用的完整 compose 環境:目錄怎麼排、密碼放哪裡、每一個

    這一篇做完你會有什麼


    • 一個資料夾,裡面是整套智能家居後端的完整定義
    • 複製那個資料夾到新機器,一行指令就重建整套環境
    • 一套更新與回滾的流程,改壞了回得去


    先講兩個會讓舊教學出錯的變化

    變化一:`version:` 這個鍵已經廢除了。

    以前的 compose 檔第一行都是 `version: '3.8'`。Compose v2 從一開始就忽略它,2.25.0 版起還會印出警告:
    1. WARN[0000] compose.yaml: the attribute `version` is obsolete,
    2. it will be ignored, please remove it to avoid potential confusion
    複製代碼

    這個警告本身無害,但它會在你每一次下指令時出現,久了就會開始忽略所有警告 —— 那才是真正的成本。直接把那一行刪掉。

    變化二:`docker-compose`(有連字號)和 `docker compose`(空白)是兩個東西。

    有連字號的是 V1,安全更新已於 2021 年 7 月結束。現在一律用空白版的 `docker compose`。

    怎麼確認你用的是哪個:
    1. docker compose version
    複製代碼

    你會看到:Docker Compose version v2.40.0 之類的字樣。

    說 command not found → 你的 Docker 太舊,或是只裝了 V1。更新 Docker,或裝 compose 外掛。

    步驟 1:先決定目錄結構

    這一步決定之後三年的維護體驗,而且很難改。 用這個結構:
    1. /volume1/docker/smarthome/          ← 整套的根目錄
    2. ├── compose.yaml                    ← 所有服務的定義
    3. ├── .env                            ← 密碼與會變的值(不要進版控)
    4. ├── .gitignore
    5. ├── mosquitto/
    6. │   ├── config/
    7. │   │   ├── mosquitto.conf
    8. │   │   └── passwd
    9. │   ├── data/                       ← 容器產生的,不要手動改
    10. │   └── log/
    11. ├── zigbee2mqtt/
    12. │   └── data/
    13. │       └── configuration.yaml
    14. ├── influxdb/
    15. │   ├── data/
    16. │   └── config/
    17. └── grafana/
    複製代碼

    三個原則:


    • 每個服務一個資料夾,跟服務名稱一樣。要看某個服務的資料時不用猜
    • 設定檔跟資料分開(`config/` 與 `data/`)。備份時可以只備設定
    • compose.yaml 和 .env 放在最上層。所有指令都在這個目錄下跑


    建立:
    1. cd /volume1/docker          # Synology 的 docker 共用資料夾
    2. mkdir -p smarthome/{mosquitto/{config,data,log},zigbee2mqtt/data,influxdb/{data,config},grafana}
    3. cd smarthome
    複製代碼

    你會看到:`ls -R` 會印出上面那棵樹(現在還沒有檔案)。

    步驟 2:把密碼抽到 .env

    不要把密碼寫在 compose.yaml 裡。 那個檔案你會想放進版控、會想貼到論壇問問題、會想複製給別人參考。

    建立 .env:
    1. # .env —— 這個檔案不要進版控
    2. TZ=Asia/Taipei
    3. PUID=1000
    4. PGID=1000
    5. MQTT_USER=ha
    6. MQTT_PASS=換成一組很長的隨機密碼
    7. INFLUX_USER=admin
    8. INFLUX_PASS=換成另一組很長的隨機密碼
    9. INFLUX_ORG=home
    10. INFLUX_BUCKET=homeassistant
    11. GRAFANA_PASS=再換一組
    複製代碼

    建立 .gitignore:
    1. .env
    2. */data/
    3. */log/
    4. mosquitto/config/passwd
    5. grafana/
    複製代碼

    PUID / PGID 怎麼查:
    1. id
    複製代碼

    你會看到:uid=1000(charles) gid=1000(users) ...。把那兩個數字填進 .env。

    設錯的症狀:容器起得來但寫不了檔,日誌裡是 Permission denied。

    以下還有約 83% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 01:02 , Processed in 0.125364 second(s), 25 queries .

    快速回覆 返回頂部 返回列表