Add-on 與 Docker 架構
你在商店裡按下「安裝」的那個 Add-on,其實是一個 Docker 容器。這章把 Supervisor、映像檔、資料卷、連接埠這些名詞用便當店講清楚,帶你裝完必備的幾個 Add-on,設好備份自動上傳雲端,並學會看記錄檔自己排錯。
為什麼要搞懂 Add-on 底下那層
你在附錄 A已經知道 Add-on 商店在哪、怎麼按安裝。那一篇是「會用」,這一章是「知道它為什麼會壞」。
差別在哪?舉幾個真實會發生的狀況:
- 你在筆電上裝了 Home Assistant,結果左邊選單根本找不到 Add-on 商店 —— 不是你手殘,是安裝方式不對。
- 你裝了 Zigbee2MQTT,它一直起不來,頁面只寫「已停止」。你不知道要去哪看它到底在抱怨什麼。
- 你同時裝了 Node-RED 和另一個網頁工具,第二個死活起不來 —— 兩個搶同一個門牌號碼。
- 你把整台機器重灌了,才發現備份全都躺在那台已經死掉的機器裡。
這四件事的解法,全部藏在同一層知識裡:Add-on 是容器、容器有映像檔、有資料卷、有連接埠、有記錄檔。看完這章,你遇到上面任何一種狀況,都知道第一步該點哪裡。
四種安裝方式,和「有沒有 Add-on 商店」的關係
這是新手最大的一個坑:不是每一種 Home Assistant 都有 Add-on 商店。有沒有商店,在你當初決定怎麼安裝的那一刻就註定了,之後不能靠設定打開。
| 安裝方式 | 白話說明 | 有 Add-on/Apps 商店嗎 | 一鍵更新 | 目前支援狀態 |
|---|---|---|---|---|
| Home Assistant OS(HAOS) | 整台機器只跑 Home Assistant,作業系統是官方做的。Home Assistant Green、Yellow、樹莓派燒錄官方映像檔都算這種。 | 有 | 有 | 官方主推、完整支援 |
| Home Assistant Container | 你自己的 Linux/NAS/群暉上,用 Docker 跑一個 Home Assistant 容器。 | 沒有 | 沒有(要自己拉新映像檔重建容器) | 官方支援 |
| Home Assistant Supervised | 自己的 Debian 上手動裝 Supervisor 那一整套,硬湊出接近 HAOS 的環境。 | 有 | 有 | 已淘汰,自 2025.12 起官方停止支援 |
| Home Assistant Core | 直接在 Python 環境裡跑,什麼外殼都沒有。 | 沒有 | 沒有 | 已淘汰,自 2025.12 起官方停止支援 |
所以結論很簡單:
- 你想要 Add-on 商店 → 裝 HAOS。Green、Yellow、樹莓派燒官方映像檔、或是一台空的迷你主機裝 HAOS,都可以。
- 你用 Container(例如群暉 NAS 上的 Docker)→ 沒有商店,永遠不會有。需要 MQTT broker、Node-RED 這些東西,就自己另外開一個 Docker 容器來跑,功能一樣,只是要自己動手。
Add-on 的本質:一個被 Supervisor 管起來的 Docker 容器
官方開發文件寫得很直白:Apps(也就是舊稱的 Add-on)底層就是發佈到容器登錄檔(container registry)的容器映像檔,來源例如 GitHub Container Registry 或 Docker Hub。
換句話說,當你在商店裡按「安裝」,發生的事情是:
-
Supervisor 去網路上抓映像檔
它看那個 Add-on 的設定檔,知道要去哪個網址、抓哪個版本、抓對應你 CPU 架構(arm64 或 amd64)的那一份。這一步最花時間,也最容易因為網路不通而失敗。
-
Supervisor 用那份映像檔開一個容器
順便照 Add-on 的設定,決定要開哪些連接埠、要把哪些資料夾掛給它、要不要給它 USB 裝置。
-
Supervisor 幫你把設定介面接進 Home Assistant
所以你才會在 Home Assistant 網頁裡看到那個 Add-on 的「設定」分頁、「記錄檔」分頁,而不用自己去打 Docker 指令。
-
Supervisor 持續盯著它
它負責啟動、停止、更新、看門狗(Watchdog)重啟、開機自動啟動。這些就是你在 Add-on 頁面上看到的那幾個開關。
所以 Supervisor 就是「管家」。Home Assistant 本體是一個容器,每個 Add-on 各自也是一個容器,Supervisor 站在旁邊管所有人的生死。這也解釋了為什麼 Container 安裝沒有商店 —— 它根本沒有管家,只有 Home Assistant 自己一個容器孤零零地跑著。
Docker 白話版:一家便當店
Docker 的名詞聽起來很硬,但其實每一個都對應得到日常生活。我們把它想成一家連鎖便當店。
| Docker 名詞 | 便當店比喻 | 在 Home Assistant 裡實際是什麼 |
|---|---|---|
| 映像檔 Image |
中央廚房的「食譜+調理包」。它本身不能吃,但照著它做,每一家分店做出來的便當一模一樣。調理包本身是唯讀的,你不會去改它。 | 從網路上抓下來的那包程式。同一版本的 Mosquitto 映像檔,裝在你家跟裝在別人家內容完全相同。 |
| 容器 Container |
照調理包現做出來的那一份便當。吃完可以丟,丟了再做一份就好,反正調理包還在。 | 正在跑的那個 Add-on。你按「重新啟動」,就是把便當丟掉重做一份。 |
| 資料卷 Volume |
你自己帶的保鮮盒。便當丟了,保鮮盒裡的東西還在。 | 你的設定、資料庫、Zigbee 配對清單。所以更新 Add-on 不會讓你的裝置全部脫網 —— 那些資料不在容器裡,在保鮮盒裡。 |
| 連接埠 Port |
店門口的取餐窗口號碼。同一個號碼窗口,同一時間只能給一家店用。 | Home Assistant 本身是 8123,Mosquitto 是 1883,Node-RED 有自己的號碼。兩個 Add-on 搶同一個號碼 → 第二個起不來。 |
| 重啟策略 Restart policy |
「不管怎麼打烊,隔天一定自動開店」的規定。 | Add-on 頁面上的「開機時啟動」與「看門狗(Watchdog)」開關。官方 Container 安裝的 Docker 指令用的是 --restart=unless-stopped,意思是「除非你自己把它關掉,否則出事就自己爬起來」。 |
如果你是 Container 安裝的使用者,官方文件給的 Docker Compose 範例長這樣,正好把上面幾個名詞全部串起來:
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- /PATH_TO_YOUR_CONFIG:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
TZ: Asia/Taipei
對照一下:image 是調理包、volumes 是保鮮盒(左邊是你電腦上的資料夾,右邊是容器裡看到的路徑)、restart 是開店規定、TZ 是時區(第 2 章那個時區設定,在這裡也要對)。network_mode: host 表示它直接用主機的網路,所以連接埠 8123 就直接開在你機器上。
動手:裝一個 Add-on 並看懂每個開關
我們用「檔案編輯器(File editor)」當練習,因為它輕、無害、而且之後很好用。
-
打開商店
左下角設定 → 找到 Apps(2026.2 之前叫 Add-ons)。進去之後按安裝 App(Install app)按鈕,就會看到整排可以裝的東西。舊版上這顆按鈕寫的是「ADD-ON STORE」。
圖 20-1Apps 首頁(Supervisor):已經裝過的 Add-on 都列在這,右下角的「Add-on store」是進商店的入口。
圖 20-2Add-on store:分成 Local apps(自建)/Official apps(官方)/社群 repository。 -
找到「File editor」並安裝
它在官方(Official)那一區。點進去按安裝,然後就是等。第一次安裝要下載映像檔,樹莓派上花個三五分鐘很正常,畫面沒動不代表當掉。
-
先別急著啟動,看一下那四個開關
安裝完會出現幾個切換開關:開機時啟動(機器重開後自動跑)、看門狗 Watchdog(它掛掉時自動把它拉起來)、自動更新(有新版就自己更新)、顯示在側邊欄(左邊選單直接出現捷徑)。檔案編輯器建議:前三個都開,第四個也開。
-
按「啟動」
狀態會從「已停止」變成「執行中」。如果變成「已停止」又跳回去,就是它啟動失敗了 —— 這時候直接跳到下一節去看記錄檔。
-
從側邊欄開它
左邊選單應該多了一個「File editor」。點進去,你會看到
/config資料夾 —— 那就是上一節講的「保鮮盒」,你的configuration.yaml就在裡面。 -
試著改一個字再改回來
不是要你改設定,是要你確認「我真的能寫入」。改完存檔,再改回原樣。這一步做過,將來真的需要編設定檔時你就不會怕。
configuration.yaml 之前,先確定你第 9 章教的備份是有在跑的。改壞了不可怕,沒得還原才可怕。Add-on 頁面的分頁各是幹嘛的
每個 Add-on 點進去,上面會有幾個分頁。名字依版本略有差異,但功能大同小異:
| 分頁 | 裡面有什麼 | 什麼時候會用到 |
|---|---|---|
| 資訊 Info | 啟動/停止/重新啟動按鈕、版本號、四個開關、「開啟網頁介面」連結。 | 日常操作。看版本號在這裡。 |
| 說明文件 Documentation | 作者寫的完整說明,每個設定選項是什麼意思。 | 設定選項看不懂的時候第一個來這裡,不要去 Google,作者寫的最準。 |
| 設定 Configuration | 這個 Add-on 自己的選項。有些是表單,有些要你直接改 YAML。 | 設帳號密碼、設資料夾、設 Zigbee 棒子的路徑。 |
| 網路 Network | 連接埠對應表。左邊是容器裡面用的號碼(固定),右邊是要開在你機器上的號碼(可以改)。 | Port 衝突時就改這裡。右邊留空=不對外開放,只有 Home Assistant 內部連得到,最安全。 |
| 記錄檔 Log | 這個 Add-on 從啟動到現在講的每一句話。 | 它起不來、它怪怪的、它連不上東西 —— 一律先看這裡。 |
1881、8099 這種),存檔重啟就好。看記錄檔排錯:三個關鍵字就夠
記錄檔(Log)看起來像亂碼,但你不需要全部看懂。你要做的只有三件事:
-
從最下面往上看
記錄檔是由上往下按時間排的,最新的在最下面。它為什麼掛掉的原因,通常就在最後那五到十行。上面幾百行開機訊息可以全部無視。
-
找這幾個字
ERROR、FATAL、Traceback、Permission denied、Address already in use、No such file or directory。看到其中一個,那一行前後就是答案。WARNING通常可以先忽略。 -
把那一行原文拿去搜尋
連同 Add-on 名字一起搜,例如「zigbee2mqtt Address already in use」。不要用自己的話描述,直接複製那行英文,找到答案的機率高十倍。
-
還是沒頭緒就重看一次
把 Add-on 停掉,重新整理記錄檔頁面,再按啟動,然後盯著它。這樣看到的就是「乾淨的一次啟動」,比在幾千行舊訊息裡撈快得多。
對照一下常見訊息的中文意思:
| 記錄檔訊息 | 白話翻譯 | 怎麼修 |
|---|---|---|
Address already in use | 這個號碼窗口已經有人在用了 | 去「網路」分頁換一個連接埠 |
Permission denied | 它沒有權限碰某個檔案或裝置 | 多半是 USB 裝置路徑設錯,或設定填的資料夾不存在 |
Connection refused | 它要連的對象沒開門 | 它依賴的另一個 Add-on(常見是 MQTT)沒啟動 |
No such file or directory | 找不到你指定的檔案/裝置 | 檢查設定裡打的路徑有沒有打錯字 |
No space left on device | 硬碟滿了 | 看本章「常見卡關」最後一條 |
必裝 Add-on 巡禮
不用全裝。看你要做什麼,對著挑。「來源」欄的意思:官方=商店裡本來就有;社群=要先加第三方存放庫(下一節教)。
| Add-on | 來源 | 它幫你做什麼 | 誰該裝 |
|---|---|---|---|
| File editor 檔案編輯器 |
官方 | 在瀏覽器裡直接開 /config 改檔案,附語法檢查。 |
幾乎所有人。輕、無腦、救急好用。 |
| Studio Code Server | 社群 (hassio-addons) |
把整套 VS Code 搬進瀏覽器,內建 Home Assistant 與 YAML 擴充套件,會自動補實體名稱。 | YAML 寫比較多的人。比檔案編輯器強很多,但也重很多。 |
| Terminal & SSH | 官方 | 瀏覽器裡的終端機,也可以用 SSH 從別台電腦連進來,內建 Home Assistant CLI。 | 需要下指令的人。要先在個人資料頁打開「進階模式」才看得到它。 |
| Mosquitto broker | 官方 | 一台 MQTT 訊息伺服器。很多裝置和工具靠它互相講話。 | 要玩 Zigbee2MQTT、Tasmota、ESPHome 進階玩法的人。 |
| Zigbee2MQTT | 社群 (官方 Z2M 團隊維護) |
接管你的 Zigbee 協調器(那根 USB 棒),把 Zigbee 燈泡開關轉成 MQTT 訊息。支援的裝置型號比內建方案廣。 | Zigbee 裝置多、或買到冷門品牌的人。要先裝 Mosquitto。 |
| Node-RED | 社群 (hassio-addons) |
用拉線的方式做自動化流程,不用寫 YAML。 | 自動化邏輯很複雜、或視覺型思考的人。簡單自動化用內建的就夠。 |
| Samba share | 官方 | 把 config、backup、media、share 等資料夾變成網路磁碟機,Windows/Mac 直接拖拉。 |
想用電腦上習慣的編輯器改設定、或想把備份拉下來的人。 |
| Advanced SSH & Web Terminal | 社群 (hassio-addons) |
官方 Terminal & SSH 的加強版,可以關掉保護模式做更多事。 | 知道自己在幹嘛的進階使用者。新手先用官方版。 |
addons 和 addon_configs 現在叫 local_apps 和 app_configs,舊名稱仍然保留相容。看到兩種寫法不用慌。加第三方存放庫:商店裡沒有的怎麼辦
商店預設只有官方那幾十個。像 Node-RED、Studio Code Server、Zigbee2MQTT 這些,要先把它們的「存放庫(Repository)」加進去,商店才會多出一整排新東西。
-
複製存放庫網址
常用的兩個:社群 Add-on 大集合是
https://github.com/hassio-addons/repository,Zigbee2MQTT 官方的是https://github.com/zigbee2mqtt/hassio-zigbee2mqtt。 -
進入 Add-on 商店
設定 → Apps,然後按安裝 App(Install app)進到商店。
-
打開右上角三點選單裡的「存放庫(Repositories)」
官方文件寫得很清楚:在商店頁面右上角的三點選單選Repositories。舊版可能顯示中文「存放庫」,是同一個東西。
-
貼上網址、按新增,然後重新整理
加完商店會多出好幾區。找不到新東西就按 Ctrl + F5 強制重新整理一次。重整還是沒出現,就去設定 → 系統 → 記錄檔,右上角切到 Supervisor,那裡會寫網址是不是打錯了。
備份自動上傳雲端:讓備份離開這台機器
備份怎麼建、排程怎麼設、保留幾份、為什麼不能只存本機,第 9 章已經講完了,這裡不重複。
這一節只補第 9 章沒細講、又剛好跟本章有關的一件事:把備份送上雲端這件事,現在完全內建,不需要裝任何 Add-on。以前這是第三方 Add-on 的地盤,現在備份頁面的「位置(Location)」可以同時勾好幾個地方,每次備份自動送到每一處。各個目的地的差別在這裡 —— 尤其是那些會咬人的限制:
| 備份位置 | 怎麼啟用 | 要花錢嗎 | 限制 |
|---|---|---|---|
| Home Assistant Cloud(Nabu Casa) | 已訂閱的話直接在備份設定裡勾起來 | 要有 Cloud 訂閱,但備份本身不另外收費 | 只保留最新一份,舊的自動刪;單檔不能超過 5GB |
| Google Drive | 設定 → 裝置與服務 → 新增整合 → Google Drive | 免費(用你自己的 Drive 空間) | 要自己去 Google 開發者後台申請一組 OAuth 憑證,步驟有點長 |
| Microsoft OneDrive | 設定 → 裝置與服務 → 新增整合 → OneDrive | 免費(用你自己的 OneDrive 空間) | 需要個人 OneDrive 帳號;用預設憑證時需啟用 my 與 cloud 整合 |
| 網路儲存(NAS) | 設定 → 系統 → 儲存空間,加一個網路儲存並標記可用於備份 | 免費(你已經有 NAS 的話) | NAS 沒開機的時候那次備份會失敗;跟主機在同一個屋簷下,火災水災一起完蛋 |
接一個雲端目的地上去,只有三步:
-
先把目的地接進來
有 Nabu Casa 訂閱的話什麼都不用做,它本來就在。沒有的話去設定 → 裝置與服務 → 新增整合,裝 Google Drive 或 OneDrive,跟著畫面走一次帳號授權。要用家裡 NAS 的話走另一條路:設定 → 系統 → 儲存空間加一個網路儲存,並標記它可以用來放備份。
-
回備份頁面把它勾起來
設定 → 系統 → 備份,在自動備份設定的「位置(Locations)」裡,把剛接好的目的地打開。排程和保留份數照第 9 章設就好。本機
/backup記得也留著:還原時本機那份快很多,雲端是機器整台死掉時的保命符。 -
手動跑一次,然後親眼去雲端看檔案在不在
這步不能跳,沒有驗證過的備份等於沒有備份。真的去 Google Drive 或 OneDrive 的資料夾裡看到那個檔案,才算設定完成。如果你選的是 Home Assistant Cloud,這時就會撞到 5GB 上限 —— 傳不上去的話,回備份設定把媒體(media)資料夾取消勾選,那通常是最肥的一塊,瘦身效果最好。
資源占用:低階硬體怎麼取捨
每個 Add-on 都是一個真的在跑的程式,會吃 CPU、吃記憶體、吃硬碟。樹莓派 4 的 2GB 版本、或是老舊的迷你主機,裝著裝著就會開始卡 —— 網頁變慢、自動化延遲、更新失敗。官方沒有公布每個 Add-on 吃多少資源,下面這張表是相對的輕重分級,不是實測數字,拿來排優先順序用。
| Add-on 類型 | 吃資源程度 | 低階硬體上的建議 |
|---|---|---|
| File editor、Samba、Terminal & SSH | 很低,幾乎感覺不到 | 放心裝 |
| Mosquitto broker | 低 | 放心裝,它很省 |
| Zigbee2MQTT | 中,會持續跑著 | 值得裝,但別跟一堆重的東西擠 |
| Node-RED | 中偏高,記憶體吃得比較兇 | 2GB 記憶體以下要斟酌。簡單自動化用內建的就好 |
| Studio Code Server | 高,開著網頁時特別明顯 | 低階機器改用 File editor |
| 資料庫(MariaDB)、Grafana、InfluxDB 這類 | 很高,還會狂寫硬碟 | 樹莓派+SD 卡不建議。SD 卡被寫爆是真實會發生的事 |
| 語音相關(Whisper、Piper 等) | 很高,尤其 CPU | 需要比較有力的硬體,樹莓派上會慢到不堪用 |
幾條實用原則:
- 用不到的就移除,不要只是停用。停用的 Add-on 還是占著硬碟空間。
- 一次只裝一個新東西。裝完觀察一兩天再裝下一個,出事你才知道是誰害的。
- 樹莓派請用 SSD 或 USB 開機,不要用 SD 卡。SD 卡最容易掛的原因就是被寫太多次,而資料庫類的 Add-on 專門幹這件事。
- 先看內建功能能不能解決。很多人裝 Node-RED 只為了做一個「日落開燈」,那件事內建自動化三行就搞定了(見第 8 章)。
常見卡關
-
找不到 Add-on 商店
先確認你是哪種安裝方式:設定 → 系統 → 修復(Repairs),點右上角的三點選單 → 系統資訊(System information),裡面會寫你這台到底是 OS 還是 Container。如果是 Container 或 Core,那就是結構上沒有商店,怎麼找都不會有,唯一解是改用 HAOS 重裝(記得先備份,再從備份還原)。如果你是 HAOS 卻找不到某個特定 Add-on,例如 Terminal & SSH,那多半是進階模式沒開 —— 點左下角你的名字進入個人資料頁,把「進階模式(Advanced Mode)」打開。
-
Add-on 裝不起來,卡在安裝中或直接失敗
九成是下載映像檔失敗。依序檢查:(1) 網路通不通,Home Assistant 出得去外網嗎;(2) 硬碟還有空間嗎,看設定 → 系統 → 儲存空間;(3) 你的 CPU 架構有沒有對應版本 —— 冷門 Add-on 常常只出 amd64,樹莓派裝不了,這種會直接說找不到映像檔。先重試一次,第一次失敗有時候只是抓到一半斷線。
-
Port 衝突:第二個 Add-on 起不來
記錄檔會出現
Address already in use或port is already allocated。去那個 Add-on 的網路分頁,把右邊那格改成一個沒人用的號碼(例如原本 1880 改成 1881),存檔重啟。改完之後你連它的網址也要跟著改成新號碼。如果你根本不需要從外面連它,右邊直接留空,衝突瞬間消失。 -
更新之後起不來了
先看記錄檔最後幾行,作者常常會直接寫「這版設定格式改了,請把某某選項改成某某」。如果看不懂,最快的路是用更新前的備份還原(第 9 章)—— 這就是為什麼「更新前先備份」那個開關要打開。另外去設定 → 系統 → 修復(Repairs)看看,重大變更常常會在那裡留一張說明卡。
圖 20-3設定 → 修復(Repairs):整合異常、統計錯誤、重大版本變更都會列在這,沒問題時會顯示 no repairs pending。 -
磁碟空間不足
症狀是各種奇怪的失敗,記錄檔裡有
No space left on device。清理順序:(1) 刪掉舊備份,這通常最肥;(2) 移除(不是停用)用不到的 Add-on;(3) 檢查media和share資料夾裡有沒有堆積的錄影檔;(4) 資料庫太大的話,調整 Recorder 保留天數。做完前三項還是滿,就該考慮換更大的儲存裝置了。 -
Add-on 一直反覆重啟
狀態在「執行中」和「已停止」之間跳,通常是看門狗(Watchdog)在把一個本來就會壞的程式反覆拉起來。先把看門狗關掉,讓它安靜地停在失敗狀態,這樣你才看得到完整的錯誤訊息。修好之後再打開。
-
Zigbee2MQTT 找不到 USB 棒
記錄檔通常是
No such file or directory。去設定 → 系統 → 硬體,點右上角三點選單 → 全部硬體(All Hardware),就會列出目前接上的裝置與它們的路徑,找出那根棒子的路徑複製回 Zigbee2MQTT 的設定裡。不要照抄網路教學上的路徑,每台機器不一樣。另外官方建議優先用/dev/serial/by-id/開頭的那個長路徑,不要用/dev/ttyUSB0這種短的 —— 短路徑會隨插拔順序和重開機而變,長路徑綁在裝置本身,插哪個孔都不會跑掉。
常見問題
Add-on 現在到底叫 Add-on 還是 App?
我用群暉 NAS 的 Docker 跑 Home Assistant,可以想辦法把 Add-on 商店裝出來嗎?
更新 Add-on 會不會把我的設定弄不見?
備份已經上傳到 Google Drive 了,本機那份還要留嗎?
Zigbee2MQTT 一定要先裝 Mosquitto 嗎?我可以只裝 Zigbee2MQTT 嗎?
Connection refused。