Docker na NAS: Home Assistant, Immich a lokální AI bez cloudu

Aby NAS utáhl Home Assistant, Immich i malý jazykový model v kontejnerech, potřebuje x86-64, dost paměti a systémový SSD. Konkrétní postup, co zapnout a co zálohovat.

Docker na NAS: Home Assistant, Immich a lokální AI bez cloudu

Kontejnerový stack pro smart home, fotky a lokální LLM postavíte na NAS s procesorem x86-64, alespoň 8 GB RAM (reálně 16 GB) a M.2 slotem pro NVMe. ARM modely od Synology nebo QNAP Docker provozovat umí, ale část obrazů nemá arm64 variantu a strojové učení v Immichu na ARM běží velmi pomalu. Kontejnery samotné patří na SSD – databáze Immichu a Docker root na plotnovém disku znamenají sekundové odezvy webového rozhraní.

Kterou platformu zvolit

Synology od DSM 7.2 nabízí místo balíčku Docker aplikaci Container Manager, jejíž sekce Projekty je v podstatě docker-compose soubor. Data kontejnerů ukládá do skryté složky @docker na systémovém svazku. QNAP používá Container Station 3, který umí jak jednotlivé kontejnery, tak compose aplikace a umožňuje zvolit svazek pro data kontejnerů. TrueNAS SCALE od verze 24.04 nahradil Kubernetes u aplikací Dockerem, takže compose soubory z internetu fungují bez úprav. unRAID má Docker a správu kontejnerů jako jednu ze základních funkcí. Kde je potřeba grafické rozhraní pro kontejnery mimo oficiální aplikaci, stačí do compose přidat Portainer.

Home Assistant: pozor na chybějící add-ony

Oficiální obraz ghcr.io/home-assistant/home-assistant:stable je Home Assistant Container, nikoli Home Assistant OS nebo Supervised. To znamená jednu zásadní věc: nemá add-on store ani Supervisor. Zigbee2MQTT, Mosquitto, Node-RED nebo ESPHome si musíte spustit jako samostatné kontejnery a propojit je po síti.

V compose souboru se vyplatí network_mode: host – bez hostitelské sítě nefunguje spolehlivě mDNS a SSDP vyhledávání zařízení. Web poběží na portu 8123. Konfigurace patří do volume /config. USB Zigbee nebo Z-Wave koordinátor předáte parametrem --device /dev/ttyUSB0 (u novějších čipů /dev/ttyACM0). Pro Bluetooth je potřeba privileged: true a připojený /run/dbus:/run/dbus:ro; alternativou je síťový Bluetooth proxy z ESP32, který se obejde bez přístupu k hostitelskému D-Bus.

Záloha je u kontejnerové varianty triviální: zastavíte kontejner a zkopírujete celý /config včetně home-assistant_v2.db. Aktualizace probíhá ručně – docker compose pull a up -d, žádný automatický updater.

Immich: databáze, vektorové hledání a ML kontejner

Stack Immichu tvoří čtyři služby: immich-server na portu 2283, immich-machine-learning, databáze PostgreSQL s vektorovým rozšířením pro vyhledávání v obrázcích a key-value cache pro fronty úloh. Fotky se mountují do UPLOAD_LOCATION. Dokumentace Immichu uvádí minimum 4 GB RAM a 2 jádra, doporučuje 6 GB a 4 jádra – a to se týká jen samotné aplikace, nikoli NAS systému.

Nejnáročnější je ML kontejner: stahuje modely pro rozpoznávání obličejů a CLIP model pro fulltextové hledání typu „pes na pláži“. Na Intel iGPU se dá zrychlit variantou obrazu postavenou na OpenVINO, které se předá zařízení /dev/dri. Stejné /dev/dri využijete i pro hardwarový přepis videa (Jellyfin, Plex) přes Quick Sync.

Zálohu Immichu nelze dělat kopírováním složky kontejneru. Postup je: pg_dumpall --clean --if-exists z databázového kontejneru, plus kopie knihovny UPLOAD_LOCATION. Náhledy a přepsaná videa se dají regenerovat, originály ne. Immich výslovně nedoporučuje Watchtower a podobné automatické aktualizátory – mezi verzemi se mění schéma databáze a migrace potřebuje vlastní kroky.

Lokální LLM v Ollamě

Ollama se nasazuje jako kontejner ollama/ollama s portem 11434 a volume na /root/.ollama. Sedm až osmimiliardový model v kvantizaci Q4 má soubor kolem 4–5 GB. Do RAM se musí vejít model plus KV cache pro kontext, takže na 8B model počítejte s 6–8 GB volné paměti jen pro kontejner. Na běžném NAS procesoru bez GPU běží takový model v řádu jednotek tokenů za sekundu; výkon limituje propustnost paměti, ne počet jader. Intel iGPU umí LLM jen přes speciální obrazy (IPEX-LLM), běžná Ollama grafiku nevyužije.

Jako webové rozhraní poslouží Open WebUI v dalším kontejneru, který se na Ollamu napojí přes OLLAMA_BASE_URL. Port 11434 nikdy nevystavujte do internetu – Ollama nemá autentizaci. Přístup řešte přes reverzní proxy s HTTPS nebo VPN.

Úložiště: NVMe svazek versus cache

NVMe disk v NASu lze použít dvěma způsoby. Buď jako read-only cache pro náhodné čtení, nebo jako plnohodnotný svazek, na kterém budou žít kontejnery, databáze Immichu a Docker root. Druhá varianta je pro tento scénář výrazně lepší. Read-write cache vyžaduje dva NVMe disky v zrcadle, jinak hrozí ztráta dat při výpadku cache. Pozor u Synology: některé modely povolují NVMe svazky jen s disky vlastní značky.

Knihovna fotek a videa mohou zůstat na plotnových discích v RAIDu, ideálně na btrfs nebo ZFS, kde využijete snapshoty. Snapshot ale nenahrazuje zálohu databáze – konzistentní dump Immichu získáte jen přes pg_dumpall.

Co konkrétně zálohovat

Stačí tři položky: složka /config Home Assistantu, dump databáze Immichu společně s knihovnou originálů a compose soubory se soubory .env. Modely Ollamy zálohovat nemusíte – po obnovení stačí kontejner spustit a stáhnout je znovu příkazem ollama pull.

Foto: Jakub Zerdzicki / Pexels

Přečtěte si také

Kolik VRAM potřebujete pro lokální AI: přehled od 7B do 70B modelů

Kolik VRAM potřebujete pro lokální AI: přehled od 7B do 70B modelů

Pro 7B model v Q4 kvantizaci stačí 6 GB VRAM, pro 70B model v Q4 už potřebujete 40 GB. Přinášíme přehlednou tabulku nároků na VRAM podle velikosti modelu a kvantizace, včetně rad, kdy se vyplatí použít CPU a systémovou RAM.

Číst článek