← Torna al blog

Il Mio Stack Software Attuale: 20+ Container Docker su un Mini PC

Un approfondimento su ogni servizio che gira sul mio mini PC NiPoGi — da Home Assistant e Zigbee2MQTT ad Authentik e WireGuard, tutto orchestrato con Docker Compose.

homelab software docker self-hosted
In questa pagina

Nel post sull’hardware, ho trattato i dispositivi fisici. Ora è il momento di guardare l’altra metà dell’equazione: il software che tiene tutto insieme. Ogni servizio elencato qui gira come container Docker Compose sullo stesso mini PC NiPoGi — un Celeron J4125 con 8 GB di RAM e 128 GB di storage. Sì, tutto quanto. Su quella piccola scatola.

Vi guiderò attraverso ogni container, cosa fa, perché l’ho scelto, e dove le crepe iniziano a comparire.

Gestione Container

🐳 Dockge

Dockge è il modo in cui gestisco tutti i miei stack Docker Compose. Costruito dallo stesso sviluppatore di Uptime Kuma, fornisce una web UI pulita per creare, modificare, avviare e fermare file docker-compose.yml — senza toccare il terminale. Ogni stack ha la sua directory e il suo file compose, il che rende l’organizzazione semplice.

Cosa distingue Dockge da Portainer:

  • Nativo Compose — lavora direttamente con i file docker-compose.yml su disco, non con un livello di astrazione
  • Leggero — footprint minimo di risorse, importante quando fai girare 20+ container su 8 GB di RAM
  • UI semplice — niente funzionalità enterprise che non userai mai, solo gestione compose fatta bene

Ogni servizio descritto di seguito è uno stack in Dockge.

Cuore della Smart Home

🏠 Home Assistant

Home Assistant è il cervello dell’intera smart home. Si connette a ogni dispositivo — sensori Zigbee, prese WiFi, blaster IR, valvole termostatiche — e fornisce un’interfaccia unificata per monitoraggio, automazione e controllo. Lo faccio girare come container Docker (non Home Assistant OS), il che mi dà pieno controllo sul sistema host ma comporta compromessi di cui parlerò più avanti.

Integrazioni principali:

  • Zigbee2MQTT per tutti i dispositivi Zigbee (via MQTT)
  • BTicino interruttori e tapparelle via integrazione cloud Legrand/Netatmo
  • Netatmo valvole termostatiche
  • Broadlink controllo IR per condizionatori e TV
  • Shelly monitoraggio energetico via API locale
  • Matter per le prese smart Tapo via Matter Hub
  • ESPHome per i sensori Everything Presence Lite

Il motore di automazione è dove Home Assistant brilla davvero. Controllo climatico, scene di illuminazione, azioni basate sulla presenza, allarmi di sicurezza, dashboard energetiche — tutto vive qui.

📡 Zigbee2MQTT

Zigbee2MQTT funge da ponte tra la rete Zigbee e MQTT, rendendo ogni dispositivo Zigbee accessibile a Home Assistant (e qualsiasi altro consumer MQTT). Si connette al dongle USB Sonoff CC2652P e gestisce l’intera mesh Zigbee — accoppiamento dispositivi, mappatura rete, aggiornamenti firmware e routing messaggi.

Perché Zigbee2MQTT invece di ZHA (Zigbee Home Automation, l’integrazione built-in di HA):

  • Supporto dispositivi più ampio — più dispositivi supportati out-of-the-box con converter specifici
  • Disaccoppiato da Home Assistant — se HA si riavvia, la rete Zigbee resta attiva
  • Web UI per diagnostica — mappa di rete, log dispositivi, invio manuale di messaggi
  • Comunità attiva — il supporto per nuovi dispositivi arriva velocemente

Gira insieme a un broker Eclipse Mosquitto MQTT nello stesso stack compose.

🔗 Matter Hub

Il Python Matter Server agisce come controller Matter, abilitando la comunicazione di Home Assistant con dispositivi compatibili Matter — nel mio caso, le cinque prese smart Tapo Matter. Matter sta ancora maturando, ma avere il controllo locale nativo su queste prese senza alcun cloud del produttore è la promessa di questo protocollo.

Un’interfaccia web per gestire i due blaster IR Broadlink RM4 Mini. Rende l’apprendimento e il test dei codici IR molto più semplice rispetto a farlo direttamente tramite Home Assistant. Una volta acquisiti i codici, vengono utilizzati nelle automazioni HA per controllare i condizionatori e la TV della camera.

Rete e Sicurezza

🛡️ Pi-hole

Pi-hole è il DNS sinkhole a livello di rete che blocca pubblicità, domini di tracciamento e telemetria a livello DNS. Ogni dispositivo sulla rete — telefoni, laptop, smart TV, dispositivi IoT — ne beneficia senza bisogno di software lato client.

Configurazione:

  • Blocklist personalizzate ottimizzate per network pubblicitari italiani e telemetria smart TV
  • Record DNS locali per tutti i servizi interni (es. ha.local → Home Assistant)
  • Conditional forwarding per la corretta risoluzione DNS inversa dei dispositivi locali
  • Funge da server DNS primario per l’intera rete

🌐 Nginx Proxy Manager

Nginx Proxy Manager fornisce reverse proxy con gestione automatica dei certificati SSL tramite Let’s Encrypt. Ogni servizio interno ottiene un sottodominio pulito (ha.miodominio.com, dockge.miodominio.com, ecc.) con HTTPS — basta ricordare combinazioni di porte.

Funzionalità chiave:

  • SSL Let’s Encrypt automatico con DNS challenge via Cloudflare
  • Access list per limitare certi servizi solo alla rete locale
  • Proxy host per tutti i servizi Docker con supporto WebSocket
  • UI semplice — niente modifica manuale dei file di configurazione nginx

☁️ Cloudflare Tunnel (cloudflared)

Cloudflared crea un tunnel crittografato tra la mia rete domestica e la rete edge di Cloudflare. Permette un accesso remoto sicuro a servizi selezionati senza aprire porte sul router — niente port forwarding, nessuna superficie d’attacco esposta.

Solo servizi specifici vengono esposti attraverso il tunnel: Home Assistant, la dashboard di Nginx Proxy Manager e pochi altri che necessitano di accesso remoto. Tutto il resto resta solo locale.

🔐 Authentik

Authentik è un identity provider (IdP) e una soluzione di single sign-on (SSO) completa. Si posiziona davanti ai servizi che non hanno autenticazione propria o dove voglio una gestione centralizzata dell’identità.

Cosa offre:

  • SSO con OIDC/OAuth2 e SAML — un unico login per più servizi
  • Supporto 2FA/MFA — TOTP e WebAuthn per tutti gli account
  • Application proxy — può proteggere servizi senza auth posizionando Authentik davanti
  • Gestione utenti — directory utenti centralizzata, utile quando eventualmente permetterò ai familiari di accedere a servizi specifici

Configurare Authentik è stato il deploy più complesso dell’intero stack, ma il beneficio in termini di sicurezza ne vale la pena.

🔒 WireGuard

WireGuard fornisce accesso VPN alla rete domestica quando sono fuori casa. È drammaticamente più semplice e veloce di OpenVPN — l’intera configurazione sono poche righe, e l’overhead del protocollo è minimo.

Casi d’uso:

  • Accesso ai servizi interni da mobile o laptop in viaggio
  • DNS sicuro — instradamento delle query DNS attraverso Pi-hole anche su WiFi pubblico
  • Modalità full tunnel — tutto il traffico instradato attraverso casa per privacy su reti non fidate

Monitoraggio e Osservabilità

📊 Uptime Kuma

Uptime Kuma monitora ogni servizio e dispositivo sulla rete. Controlla endpoint HTTP, porte TCP, risoluzione DNS e risposte ping — e invia alert via Telegram quando qualcosa va giù.

Target di monitoraggio:

  • Tutti i container Docker (health check HTTP)
  • Router e nodi mesh (ping)
  • Servizi e domini esterni (HTTP/HTTPS)
  • Risoluzione DNS (salute Pi-hole)

📈 Beszel

Beszel è uno strumento leggero di monitoraggio server che traccia CPU, memoria, disco, rete e metriche di temperatura. Fornisce grafici storici e alert quando soglie di risorse vengono superate. Su una macchina con solo 8 GB di RAM che fa girare 20+ container, sapere dove vanno le risorse è fondamentale.

🏠 Homarr

Homarr è la dashboard — la pagina di atterraggio per tutto. Mostra tutti i servizi con icone, indicatori di stato e link diretti. Invece di salvare nei preferiti decine di combinazioni IP:porta, Homarr mi dà un’unica panoramica per l’intero stack.

Faccio girare due istanze — una per la dashboard admin completa e un’altra come vista semplificata per un accesso rapido ai servizi più usati.

Sviluppo e Gestione File

💻 Code Server

Code Server è VS Code nel browser. Mi dà un ambiente di sviluppo completo accessibile da qualsiasi dispositivo — utile per modificare configurazioni YAML di Home Assistant, ritoccare file Docker Compose o scrivere script direttamente sul server senza SSH.

Avere un IDE nel browser significa che posso fare modifiche rapide alla configurazione anche da un tablet o dal telefono.

📁 File Browser

File Browser fornisce una web UI pulita per navigare, caricare, scaricare e gestire file sul server. È l’alternativa leggera a un’interfaccia NAS completa quando devo semplicemente prendere o caricare un file velocemente.

🔧 Zone Configurator

Un editor di testo web-based originariamente progettato per i file di configurazione di Home Assistant. Fornisce syntax highlighting per YAML e una vista ad albero dei file — utile come alternativa leggera a Code Server quando devo fare solo una piccola modifica alla configurazione.

Servizi Aggiuntivi

🚀 SpeedTest

Uno strumento di speed test self-hosted sulla rete locale. Mi permette di misurare il throughput LAN tra dispositivi — utile per diagnosticare colli di bottiglia di rete e verificare che la mesh Xiaomi stia performando come previsto (spoiler: la limitazione ethernet a 1 Gbit è reale).

🤖 Open WebUI

Open WebUI è un’interfaccia self-hosted per interagire con large language model. La uso per sperimentare con modelli AI locali — far girare piccoli LLM per query rapide, assistenza al codice e sperimentazione generale. Sul Celeron J4125 è dolorosamente lento con qualsiasi cosa oltre modelli minuscoli, ma funziona per testare il concetto prima di investire in hardware migliore.

📡 Everything Presence Lite — Firmware Installer

Non propriamente un container Docker, ma uno strumento web salvato nei preferiti per flashare e aggiornare il firmware dei sensori Everything Presence Lite mmWave via ESPHome. Questi sensori ricevono aggiornamenti firmware periodici che migliorano la precisione del rilevamento presenza e aggiungono nuove funzionalità.

📻 SONOFF Zigbee Dongle Firmware

Allo stesso modo, questo è un link di riferimento per il firmware del coordinatore Zigbee Sonoff. Mantenere aggiornato il firmware del CC2652P garantisce la migliore stabilità della mesh Zigbee e il supporto per nuovi tipi di dispositivi.

Lo Stack Completo in un Colpo d’Occhio

CategoriaServizioScopo
Gestione ContainerDockgeUI Docker Compose
Smart HomeHome AssistantPiattaforma automazione
Smart HomeZigbee2MQTT + MosquittoBridge Zigbee + broker MQTT
Smart HomeMatter HubController dispositivi Matter
Smart HomeBroadlink ManagerGestione codici IR
RetePi-holeBlocco pubblicità DNS
ReteNginx Proxy ManagerReverse proxy + SSL
ReteCloudflare TunnelAccesso remoto sicuro
SicurezzaAuthentikIdentity provider / SSO
SicurezzaWireGuardAccesso VPN
MonitoraggioUptime KumaMonitoraggio uptime servizi
MonitoraggioBeszelMonitoraggio risorse server
DashboardHomarr (x2)Dashboard servizi
SviluppoCode ServerVS Code nel browser
FileFile BrowserGestore file web
SviluppoZone ConfiguratorEditor config HA
UtilitySpeedTestTest velocità LAN
AIOpen WebUIInterfaccia LLM locale

Sono 20+ container che condividono 8 GB di RAM e una CPU Celeron J4125. Il fatto che giri tutto — e giri ragionevolmente bene — è un tributo a quanto siano leggeri la maggior parte di questi servizi quando containerizzati.

L’Elefante nella Stanza: Home Assistant come Container

Questo è il singolo punto dolente più grande del mio setup attuale, e merita una discussione onesta.

Far girare Home Assistant come container Docker invece che come Home Assistant Operating System (HAOS) significa avere pieno controllo sulla macchina host — posso far girare tutti questi altri servizi accanto, gestire il SO direttamente, e avere piena flessibilità. Ma ha un costo.

Cosa mi sto perdendo

  • Add-on — HAOS ha uno store di add-on built-in con installazione one-click per servizi come Zigbee2MQTT, Node-RED, Mosquitto, e decine di altri. Come container, devo fare il deploy e gestire ciascuno separatamente via Docker Compose. Ogni aggiornamento, ogni modifica alla configurazione, ogni mappatura di porte — tutto manuale.
  • Backup — HAOS fornisce backup automatici completi tramite snapshot che includono il SO, la configurazione e tutti gli add-on. Con l’approccio container, devo scriptare la mia strategia di backup, assicurandomi di catturare tutti gli stack compose, i volumi e i file di configurazione.
  • Supervisor — il Supervisor di HAOS gestisce la salute dei servizi, le policy di riavvio e gli aggiornamenti di sistema. Senza di esso, mi affido alle restart policy di Docker e a Dockge per la gestione — funzionale, ma non altrettanto integrato.
  • Scoperta hardware — HAOS gestisce il passthrough dei dispositivi USB (come il dongle Zigbee) in modo più fluido. In Docker, devi mappare esplicitamente /dev/ttyUSB0 o /dev/serial/by-id/... e sperare che il path del dispositivo non cambi dopo un riavvio.

Cosa si sta effettivamente rompendo

Il limite di 8 GB di RAM è il vero killer. Ecco uno snapshot tipico della memoria:

ServizioRAM Appross.
Home Assistant~800 MB
Zigbee2MQTT + Mosquitto~150 MB
Authentik (server + worker + PostgreSQL + Redis)~1.2 GB
Pi-hole~100 MB
Nginx Proxy Manager~80 MB
Uptime Kuma~120 MB
Beszel~80 MB
Homarr (x2)~200 MB
Tutti gli altri combinati~800 MB
SO + overhead Docker~1.5 GB
Totale~5 GB

Sembra gestibile sulla carta, ma nel momento in cui Home Assistant esegue una sequenza di automazione complessa, o Authentik processa un flusso di autenticazione, o tutti i servizi decidono di fare garbage collection allo stesso momento — la RAM va oltre i 7 GB e le cose iniziano ad andare in swap. L’SSD da 128 GB funge anche da spazio swap, e quell’SSD è già quasi pieno con immagini container e volumi.

Il prossimo passo: HAOS su hardware dedicato

Per il nuovo build del homelab, sto seriamente considerando il passaggio a Home Assistant Operating System su hardware dedicato. Il piano:

  • HAOS sulla sua macchina — un mini PC o NUC dedicato che esegue HAOS, con il dongle Zigbee collegato direttamente. Niente più passthrough USB, niente più gestione manuale degli add-on.
  • Host Docker separato — un server più potente (più RAM, più storage) che esegue tutti i servizi non-HA: Authentik, monitoraggio, strumenti di sviluppo, esperimenti AI.
  • Separazione pulita — Home Assistant si concentra su ciò che sa fare meglio (automazione casa), mentre l’host Docker gestisce tutto il resto.

Questa separazione migliorerebbe anche l’affidabilità. Al momento, se l’host Docker necessita di un riavvio per aggiornamenti, anche la smart home va giù. Con hardware HAOS dedicato, luci, riscaldamento e sicurezza continuano a funzionare indipendentemente.

Cosa Ho Imparato

Far girare 20+ container su un singolo mini PC è stata una masterclass in ottimizzazione delle risorse e amministrazione di sistemi Linux. Ho imparato di più su Docker networking, reverse proxy, DNS, gestione dell’identità e monitoraggio in questi ultimi anni di quanto abbia fatto in qualsiasi corso o tutorial.

Ma ho anche imparato che c’è una linea tra “efficiente” e “fragile”. Un singolo punto di guasto — una macchina, un SSD, un alimentatore — che esegue l’intera smart home e infrastruttura è un rischio. Il nuovo lab affronterà questo problema.

Prossimi Passi

Nel prossimo post, discuto della scelta del nuovo hardware — la filosofia dietro la build, gli scenari che ho valutato (mini PC + NAS vs custom build), e perché l’espandibilità e il supporto GPU hanno guidato la decisione finale.

La migrazione sta arrivando. È ora di costruirlo bene.