Indice Serie Homelab
Libertà digitale: creare un ecosistema di servizi personali senza dipendere dalle big tech.
- Homelab: Necessità o Capriccio?
- Homelab: Proxmox e Container LXC
- Homelab: Setup Immich
- Homelab: Setup Navidrome
- Homelab: Accesso Remoto Sicuro
- Homelab: Migrazione da iCloud a Immich
- Homelab: Setup AFFiNE
- Homelab: Strategia Backup KISS
- Homelab: Migrazione di Rete e Wireguard
- Homelab: UPS e Network UPS Tools
- Homelab: Da AFFiNE a Obsidian con Syncthing
Il Nemico Silenzioso dell’Homelab Link to heading
Ogni tanto nella mia zona tolgono la corrente. Niente di drammatico, semplicemente capita che mentre stai lavorando tranquillamente si spenge tutto: il LED del mini PC che si spegne, il router che va offline, e tu che realizzi che tutti i container stanno facendo un reboot improvviso.
Inconvenienti di uno Shutdown Improvviso
- Possibile corruzione filesystem nei container LXC
- Perdita dati non salvati nei database
- Occasionale necessità di controllo filesystem su Proxmox
- Riavvio manuale di tutti i servizi
Ho quindi deciso di investire in un UPS (Uninterruptible Power Supply).
Network UPS Tools: Il Ponte tra Hardware e Software Link to heading
NUT è il software standard per la gestione UPS su sistemi Linux. Permette di:
- Monitorare lo stato dell’UPS in tempo reale
- Configurare azioni automatiche in caso di eventi (blackout, batteria scarica)
- Condividere informazioni UPS sulla rete (utile per spegnere più dispositivi)
- Integrare con sistemi di monitoring come Grafana
Installazione NUT su Proxmox Link to heading
Installeremo NUT direttamente sul nodo principale di Proxmox, non in un container LXC. Questo approccio garantisce che:
- Il sistema di monitoring UPS rimanga attivo anche se i container sono spenti
- Proxmox possa gestire lo shutdown di tutti i container prima di spegnersi
- Non ci siano dipendenze circolari (container che dipende dall’host per spegnersi)
- La comunicazione USB con l’UPS sia diretta e affidabile
Prima di tutto installiamo solo il pacchetto essenziale su Proxmox:
apt update
apt install nut
Architettura NUT Semplificata
- nut-driver: Comunica direttamente con l’UPS via USB
- nut-server (upsd): Condivide i dati UPS sulla rete (opzionale per setup singolo)
- nut-monitor (upsmon): Monitora e gestisce le azioni (shutdown)
Per un setup homelab semplice, possiamo usare solo driver + monitor, saltando il server di rete.
File 1: nut.conf - “Come funziona NUT?” Link to heading
File principale che definisce la modalità operativa:
nano /etc/nut/nut.conf
MODE=standalone
Cosa significa:
MODE=standalone: “Tutto su questa macchina: driver, monitor e UPS fisico sono qui”- Alternative possibili:
netserver(condivide UPS in rete) onetclient(usa UPS remoto)
File 2: upsmon.conf - “Quando spegnere tutto?” Link to heading
Il cervello del sistema: decide quando e come spegnere Proxmox:
nano /etc/nut/upsmon.conf
MONITOR epyc-ion@localhost 1 admin password master
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG ONLINE SYSLOG+WALL
Spiegazione dettagliata:
MONITOR epyc-ion@localhost 1 admin password master
epyc-ion@localhost: “Monitora l’UPS chiamato ’epyc-ion’ su questa macchina”1: “Questo UPS alimenta 1 sistema (questo Proxmox)”admin password: Credenziali per accedere ai dati UPS (locale, sicurezza basic)master: “Questa macchina è il capo, decide quando spegnere tutto”
SHUTDOWNCMD “/sbin/shutdown -h +0”
- “Quando decidi di spegnere, esegui questo comando”
-h +0: Halt immediato (senza attesa)
shutdown -h +0 spegne il sistema immediatamente. Proxmox gestisce automaticamente lo shutdown graceful dei container LXC durante il processo di spegnimento del nodo, quindi non serve fare script complessi per spegnere ogni container singolarmente.POLLFREQ 5
- “Controlla lo stato UPS ogni 5 secondi” (frequenza normale)
DEADTIME 15
- “Se non ricevo dati UPS per 15 secondi, considera l’UPS morto”
POWERDOWNFLAG /etc/killpower
- “Crea questo file quando spegni per dire al sistema di non riaccendersi”
NOTIFYFLAG
ONBATT: “Quando vai su batteria, scrivi nei log + messaggio a schermo”LOWBATT: “Quando batteria scarica, scrivi nei log + messaggio a schermo”ONLINE: “Quando torna corrente, scrivi nei log + messaggio a schermo”
Master vs Slave
- Master: “Io comando, quando decido che è ora, spengo tutto”
- Slave: “Ascolto il master, mi spengo quando me lo dice”
Nel nostro caso siamo master perché siamo l’unica macchina collegata all’UPS.
Identificazione UPS e Risoluzione Problemi Permessi Link to heading
Prima di testare il driver, dobbiamo identificare correttamente l’UPS e risolvere i permessi USB.
Step 1: Identifica l’UPS Link to heading
lsusb
Cerca una riga simile a:
Bus 001 Device 003: ID 0764:0601 Cyber Power System, Inc. PR1500LCDRT2U UPS
I numeri 0764:0601 sono vendorid e productid del tuo UPS.
Step 2: Configura File 3: ups.conf per UPS Epyc ION Link to heading
Per gli UPS Epyc ION (che si identificano come Cyber Power System), usa il driver HID:
nano /etc/nut/ups.conf
[epyc-ion]
driver = usbhid-ups
port = auto
desc = "Epyc Ion"
usbhid-ups, non nutdrv_qx. Il driver HID riconosce automaticamente l’UPS senza bisogno di specificare vendorid/productid.Step 3: Verifica Versione NUT Link to heading
Gli UPS Epyc ION richiedono NUT 2.8.0 o superiore. Verifica la tua versione:
upsdrvctl -V
Se hai una versione precedente (2.7.x), aggiorna:
# Solo se necessario - per Proxmox/Debian
apt update
apt install nut/bullseye-backports
# Oppure aggiungi repository NUT aggiornato
Test Driver UPS Link to heading
Ora testiamo il driver:
# Avvia il driver
upsdrvctl start epyc-ion
Se tutto va bene, dovresti vedere:
Network UPS Tools - Generic HID driver 0.52 (2.8.1)
USB communication driver (libusb 1.0) 0.46
Using subdriver: CyberPower HID 0.8
Se ricevi “connection refused”, avvia tutti i servizi NUT nell’ordine corretto:
# Ferma tutto per ripartire pulito
systemctl stop nut-monitor
systemctl stop nut-server
upsdrvctl stop
# Avvia in ordine: Driver → Server → Monitor
upsdrvctl start epyc-ion
systemctl start nut-server
systemctl start nut-monitor
# Abilita all'avvio di Proxmox
systemctl enable nut-server
systemctl enable nut-monitor
Verifica la comunicazione:
# Controlla i dati UPS
upsc epyc-ion
Dovresti vedere output simile a:
battery.charge: 100
battery.voltage: 13.70
input.voltage: 230.0
ups.load: 25
ups.status: OL
upsc da “connection refused”, significa che il driver funziona ma il server non è avviato.Verifica Completa Link to heading
Verifica che tutto funzioni:
# Controlla stato UPS
upsc epyc-ion
# Verifica configurazione monitoring
upsmon -D
Se tutto funziona, dovresti vedere le informazioni dell’UPS:
battery.charge: 100
battery.voltage: 13.70
input.voltage: 230.0
ups.load: 25
ups.status: OL
Codici Status Principali
- OL: Online (alimentazione normale)
- OB: On Battery (su batteria)
- LB: Low Battery (batteria scarica)
Test di Shutdown (Opzionale) Link to heading
Per testare lo shutdown automatico senza rischi:
# Simula evento "low battery"
upsmon -c fsd
Questo forzerà uno shutdown controllato. Usalo solo se sei sicuro di voler testare lo spegnimento completo.
Con questa configurazione minimale, Proxmox si spegnerà automaticamente quando l’UPS segnalerà batteria scarica, proteggendo i dati senza configurazioni complesse.
Gestione Container durante Shutdown Link to heading
Una domanda legittima: serve spegnere manualmente ogni container prima di spegnere Proxmox?
Risposta breve: No.
Proxmox gestisce automaticamente lo shutdown graceful di tutti i container LXC quando riceve il comando di spegnimento. Il processo è:
- NUT rileva batteria scarica
- upsmon esegue
shutdown -h +0 - Proxmox riceve il segnale di shutdown
- Proxmox invia SIGTERM a tutti i container
- Container eseguono shutdown graceful interno
- Proxmox aspetta un timeout (di default 60s) per container lenti
- Proxmox forza lo stop se necessario
- Sistema si spegne completamente
Se hai container particolarmente critici con database complessi, puoi creare uno script personalizzato, ma per un homelab standard il comportamento di default di Proxmox è più che sufficiente.
Conclusioni Link to heading
L’implementazione di NUT su Proxmox trasforma un semplice UPS in un sistema di protezione intelligente per il nostro homelab. La configurazione è semplice e una volta impostata funziona automaticamente, garantendo shutdown sicuri affidandosi alla gestione nativa di Proxmox.
Prossimi Passi
- Testa periodicamente scollegando l’alimentazione per qualche secondo
- Monitora i log per verificare che tutto funzioni come previsto
- Documenta i tempi di autonomia reali del tuo setup
Un investimento modesto che può evitare molti grattacapi futuri.