All apps · 0 apps
UnraidDeck
Docker app from Zabra9Red's Repository
Overview
Readme
View on GitHubUnraidDeck
Dashboard all-in-one per Unraid + Docker. Un solo container, zero dipendenze esterne.
UnraidDeck unisce in un'unica web UI la gestione completa dei container Docker dell'host Unraid e il monitoraggio/controllo del sistema (array, parity, dischi, pool, share, VM, UPS, alimentazione host).
Caratteristiche
Docker
- Lista container con stato, uptime, CPU%, RAM, I/O rete, porte, restart policy, icone (proxate e cacheate: funzionano offline e senza mixed-content dietro HTTPS) e pulsante "Apri WebUI".
- Azioni: start / stop / restart / pause / kill / remove / update / prune immagini dangling — con lock per-container (le operazioni concorrenti ricevono 409).
- Update sicuro: pull con progresso, clone integrale di
Config+HostConfig(IP statici br0/macvlan preservati), verifica healthcheck-aware, rollback automatico, journal in SQLite con recovery al riavvio, gestione dei dipendentinet=container:(pattern VPN). - Self-update tramite helper effimero: UnraidDeck aggiorna sé stesso senza interventi manuali.
- Check aggiornamenti via Registry HTTP API v2 (HEAD: non consuma i rate limit Docker Hub), credenziali opzionali per registry privati, badge "update/pinned/locale".
- Log live (demux stdout/stderr, ricerca, download in streaming), console exec (xterm.js), stats real-time con sparkline e grafici.
- Bulk su selezione multipla (UnraidDeck stesso è sempre escluso).
Unraid
- Unraid 7.x: API GraphQL
unraid-apicon capability map via introspection → ogni sezione degrada in autonomia se lo schema non la espone. - Unraid 6.12: fallback SSH con parsing di
/var/local/emhttp/*.ini. - Array e parity (start/stop/pausa/riprendi/annulla + storico da
/boot/config/parity-checks.log), dischi con temperatura e spin state da fonte passiva (mai smartctl periodico: i dischi in spin-down non vengono svegliati; SMART completo solo on-demand con-n standby), pool ZFS/BTRFS, share, VM, UPS (apcupsd NIS o NUT via TCP, nessun mount), reboot/shutdown host. - Terminale host direttamente nella UI (xterm su SSH, con il fallback SSH configurato) e aggiornamenti automatici dei container opzionali a intervallo configurabile (default 8 ore; stessa procedura sicura dell'update manuale, UnraidDeck escluso).
- UnraidDeck Cloud: WebDAV nativo (
http://IP:8787/dav— sync da qualsiasi OS/client), tab Foto con timeline e thumbnail dalle share, link di condivisione pubblici con scadenza/password/contatore. Tutto interno, zero container aggiuntivi (richiede il mount/mnt → /unraid). - File manager delle share (tab File, via SFTP): anteprima di immagini/video/audio/PDF/testo nel browser, download, upload, rinomina, elimina; notifiche a inizio/fine di ogni update container; soglia temperatura dischi con range min–max.
- Tab Energia — consumo elettrico dall'UPS in tempo quasi reale (poll ogni 10 s,
POLL_UPSper cambiare): dashboard stile Grafana con gauge batteria/carico, potenza attuale, tiles consumo/costo per periodo e stima annua; potenza misurata viaups.realpowero stimata da potenza nominale × carico, integrata in kWh con grafico orario e storico per giorno / settimana / mese / anno, costi inclusi. Il costo in € usa il prezzo €/kWh della tua bolletta (preset indicativi dei principali fornitori italiani — Enel, Eni Plenitude, Edison, A2A, Iren, Sorgenia, Octopus — o valore manuale). I dati sono salvati su disco in/config(SQLite): riavvii di container o server non li cancellano; retention 2 anni.
Sicurezza
- Setup wizard al primo avvio (bcrypt cost 12), sessioni opache in SQLite (revoca reale, "disconnetti ovunque"), TOTP opzionale con recovery codes, audit log completo (incluse le sessioni exec), rate limiting, CSP restrittiva, verifica Origin su REST mutanti e WebSocket, segreti cifrati at-rest (AES-256-GCM).
- Conferme digitate per le azioni distruttive (remove, kill, stop array, reboot/shutdown host) e rafforzate per stop/remove di UnraidDeck stesso.
Installazione su Unraid
Da Community Applications (consigliata)
- Installa il template
my-UnraidDeck.xml(o cerca UnraidDeck in CA quando pubblicato). - Path
/config: usa un percorso diretto, es./mnt/cache/appdata/unraiddeck. ⚠️ Non usare/mnt/user/...: il database SQLite in modalità WAL su FUSE/shfs rischia corruzione. In alternativa, usa una share con Exclusive access attivo (in quel caso il path è un bind diretto). - Imposta
UNRAID_HOSTe, per Unraid 7.x,UNRAID_API_KEY(vedi sotto). - Avvia e apri
http://IP:8787: il wizard crea l'utente amministratore.
Manuale (docker run)
docker run -d \
--name unraiddeck \
--restart unless-stopped \
--security-opt no-new-privileges=true \
-p 8787:8787 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mnt/cache/appdata/unraiddeck:/config \
-e UNRAID_HOST=192.168.1.10 \
-e UNRAID_API_KEY=... \
-e TZ=Europe/Rome \
ghcr.io/zabra9red/unraiddeck:latest
Oppure con docker-compose.yml (incluso nel repo).
API key per Unraid 7.x
Sul server Unraid:
unraid-api apikey --create
oppure dalla GUI: Settings → Management Access → API Keys. Servono i permessi di lettura su array/docker/info e le mutation che vuoi usare (array, vm, reboot/shutdown).
- Se il server forza SSL (redirect https con certificato
myunraid.netsull'IP locale), impostaUNRAID_URL=https://IPeUNRAID_TLS_INSECURE=true.
Fallback SSH per Unraid 6.12
Imposta SSH_USER (tipicamente root) e SSH_PASSWORD oppure SSH_KEY (percorso di una chiave privata montata in /config, o PEM inline). UnraidDeck legge /var/local/emhttp/*.ini, usa mdcmd per array/parity, virsh per le VM, powerdown per l'host.
VM via libvirt (opzionale)
Mount opzionale della directory /var/run/libvirt (già predisposto nel template). Non montare il file libvirt-sock direttamente: se il container parte prima di libvirtd, Docker crea la source mancante come directory e il sottosistema VM non si avvia più. In assenza del mount le VM sono gestite via GraphQL (7.x) o virsh su SSH (6.12).
Variabili d'ambiente
| Var | Default | Note |
|---|---|---|
PORT |
8787 | |
PASSWORD |
— | solo bootstrap primo avvio (crea l'utente admin); rimuovere dopo il setup (warning in UI) |
UNRAID_HOST |
— | IP/host Unraid |
UNRAID_URL |
http://UNRAID_HOST |
override endpoint GraphQL (https/porta custom) |
UNRAID_TLS_INSECURE |
false |
accetta cert self-signed sul GraphQL |
UNRAID_API_KEY |
— | GraphQL 7.x |
SSH_USER / SSH_PASSWORD o SSH_KEY |
— | fallback 6.12 |
DOCKER_HOST |
unix socket | opzionale (es. socket-proxy tcp) |
DISABLE_AUTH |
false |
solo LAN fidata (banner rosso permanente) |
TRUST_PROXY |
— | true/IP dietro reverse proxy (cookie Secure, IP reali nel rate-limit) |
UPDATE_CHECK_INTERVAL |
6h |
check aggiornamenti (con jitter) |
UPDATE_VERIFY_TIMEOUT |
auto | override verifica post-update (default healthcheck-aware) |
NOTIFY_WEBHOOK_URL |
— | webhook notifiche (ntfy nativo auto-rilevato; JSON per Gotify/Discord) |
NOTIFY_WEBHOOK_TYPE |
auto | forza ntfy (self-hosted su dominio custom) o json |
POLL_UPS |
10s |
frequenza poll UPS/potenza |
ONLYOFFICE_URL |
— | URL del Document Server OnlyOffice per aprire/modificare i documenti Office (opzionale) |
ONLYOFFICE_JWT_SECRET |
— | JWT secret del Document Server (se abilitato) |
ONLYOFFICE_SELF_URL |
auto | base URL con cui il DS raggiunge UnraidDeck |
HTTPS |
false |
TLS nativo sulla porta WebUI (cert self-signed autogenerato in /config/certs, sostituibile) |
DUCKDNS_DOMAIN + DUCKDNS_TOKEN |
— | con HTTPS=true: certificato Let's Encrypt vero per <nome>.duckdns.org via DNS-01 (nessuna porta da aprire, rinnovo automatico) — niente avvisi "Non sicuro" |
TZ |
Europe/Rome |
Documenti Office (opzionale, via OnlyOffice)
Il file manager apre e modifica docx/xlsx/pptx (e visualizza doc/odt/rtf/xls/ppt…) come una vera suite Office integrando OnlyOffice Document Server:
- Installa OnlyOffice Document Server da Community Applications (container separato).
- Su UnraidDeck imposta
ONLYOFFICE_URL=http://IP:PORTAe, se il DS ha il JWT attivo (default nelle versioni recenti),ONLYOFFICE_JWT_SECRETcon lo stesso secret del DS. - Nella tab File i documenti Office si aprono nell'editor a schermo pieno; il salvataggio riscrive il file sulla share.
Senza OnlyOffice i documenti mostrano comunque il testo estratto (sola lettura).
Notifiche sul telefono (gratis, senza app di terze parti a pagamento)
Tutte le notifiche di UnraidDeck (allarmi consumo, dischi caldi, UPS su batteria, update disponibili…) possono arrivare su iPhone/Android con ntfy — app gratuita e open source sull'App Store / Play Store ufficiali:
- Installa ntfy dallo store e iscriviti a un topic con nome impronunciabile (es.
unraiddeck-x7k2m9— il topic è pubblico, il nome fa da password). - Sul container imposta
NOTIFY_WEBHOOK_URL=https://ntfy.sh/unraiddeck-x7k2m9(il formato ntfy viene rilevato da solo). - Nella tab Energia → Allarmi consumo imposta la soglia potenza (W) e/o il limite giornaliero (kWh): al superamento parte la notifica push (potenza con isteresi −10 %, limite giornaliero una volta al giorno).
Sicurezza e reverse proxy
- Il container richiede root per l'accesso a
/var/run/docker.sock: chi controlla il socket controlla l'host. Non esporre mai UnraidDeck direttamente su Internet senza reverse proxy + HTTPS. Mai--privileged; sempre--security-opt no-new-privileges=true. Rootfs read-only opzionale con tmpfs su/tmp. - Dietro SWAG / Nginx Proxy Manager: imposta
TRUST_PROXY=true. Il cookie di sessione diventa automaticamenteSecuree il rate limiting usa l'IP reale del client. - I segreti (API key, credenziali SSH e registry) sono cifrati at-rest con AES-256-GCM. La chiave è autogenerata in
/config/secret.key: protegge da letture accidentali del database, non da chi ha pieno accesso a/config. DISABLE_AUTH=truemostra un banner rosso permanente: usarlo solo su LAN fidata.
PWA
La UI è installabile come PWA (icona in home, standalone). L'installazione richiede HTTPS → serve un reverse proxy con certificato valido. Su http la UI resta pienamente usabile, semplicemente senza install.
Nota SQLite / FUSE (importante)
Il database usa journal_mode=WAL, che non è affidabile su FUSE/shfs (/mnt/user). All'avvio UnraidDeck rileva il filesystem di /config: se è FUSE mostra un warning nei log e un banner in UI. Soluzioni:
- path diretto:
/mnt/cache/appdata/unraiddeck(o il tuo pool), oppure - share appdata con Exclusive access attivo.
Backup e ripristino di /config
- Backup automatico giornaliero del database con
VACUUM INTO /config/backups/(retention 7 file) + checkpoint WAL periodico e allo shutdown. - Per il backup completo: ferma il container e copia la directory
/config(contiene database, backup automatici, chiave segreta e cache icone). Il ripristino è la copia inversa. - I backup automatici in
/config/backupssono database completi: per ripristinarne uno,cp /config/backups/unraiddeck-<data>.db /config/unraiddeck.dba container fermo.
Note operative
- Stats: campionamento batch one-shot (2s con drawer aperto, 5s con lista), nessuno stream persistente per-container, ring buffer in RAM (niente scritture SQLite per-secondo).
- Eventi: la lista è pilotata da
docker eventscon auto-reconnect, replay e riconciliazione — nessun polling a regime. - Check update: HEAD sui manifest v2 (inclusi i media type single-manifest per i repo single-arch), token anonimi per Docker Hub/ghcr/lscr/quay, backoff su 429. Container avviati per digest → badge "pinned"; immagini build/import locali → badge "locale".
docker system dfè solo on-demand (endpoint lento su host grandi).- I dipendenti
net=container:(VPN) vengono mostrati nella conferma di update e ricreati/riavviati automaticamente dopo l'update del target.
Sviluppo
# backend (Node 22)
cd backend && npm install
CONFIG_DIR=./data node src/server.js
# frontend (Vite dev server con proxy verso :8787)
cd frontend && npm install && npm run dev
Build immagine completa:
docker build -t unraiddeck:dev .
Licenza
MIT
Install UnraidDeck on Unraid in a few clicks.
Find UnraidDeck in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/zabra9red/unraiddeck:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8787]- Network
bridge- Shell
sh- Privileged
- false
- Extra Params
--security-opt no-new-privileges=true --label net.unraid.docker.icon=https://raw.githubusercontent.com/Zabra9Red/unraiddeck/main/frontend/public/icon-192.png --label net.unraid.docker.webui=http://[IP]:[PORT:8787]
Template configuration
Porta della web UI
- Target
- 8787
- Default
- 8787
- Value
- 8787
Socket Docker dell'host (rw, necessario per gestire i container)
- Target
- /var/run/docker.sock
- Default
- /var/run/docker.sock
- Value
- /var/run/docker.sock
Dati applicazione (SQLite, backup, cache icone). USARE UN PATH DIRETTO (no /mnt/user): WAL su FUSE rischia corruzione.
- Target
- /config
- Default
- /mnt/cache/appdata/unraiddeck
- Value
- /mnt/cache/appdata/unraiddeck
Share e dischi per il file manager (bind /mnt, propagation slave per gli share FUSE). Facoltativo: senza, il file manager usa SSH/SFTP
- Target
- /unraid
- Default
- /mnt
- Value
- /mnt
Opzionale: directory libvirt per la gestione VM. Montare la DIRECTORY /var/run/libvirt (non il file socket): se il container parte prima di libvirtd, Docker creerebbe il socket mancante come directory rompendo le VM.
- Target
- /var/run/libvirt
IP/hostname del server Unraid (per GraphQL, UPS e webui [IP])
API key unraid-api (Unraid 7.x): unraid-api apikey --create
Override endpoint GraphQL (default http://UNRAID_HOST), es. https://ip:porta
Accetta certificati self-signed sul GraphQL (SSL forzato con cert myunraid.net su IP locale)
- Default
- false
- Value
- false
Opzionale: URL del container OnlyOffice Document Server (es. http://IP:8082) per aprire e modificare i documenti Office dal file manager
Opzionale: JWT secret del Document Server (se abilitato, default nelle versioni recenti)
Con HTTPS=true: sottodominio DuckDNS (es. mionome) per un certificato Let'''s Encrypt VERO senza avvisi del browser (DNS-01, nessuna porta da aprire)
Token del tuo account DuckDNS (duckdns.org)
TLS nativo sulla porta della WebUI (certificato self-signed autogenerato in /config/certs; sostituibile con cert.pem/key.pem propri)
- Default
- false
- Value
- false
Opzionale: base URL con cui il Document Server raggiunge UnraidDeck (es. http://IP:8787) se l'hostname del browser non e' risolvibile dal DS
Solo per il primo avvio: crea l'utente admin. RIMUOVERE dopo il setup.
- Target
- PASSWORD
Fallback SSH (Unraid 6.12): utente (root)
Fallback SSH: password (in alternativa a SSH_KEY)
Fallback SSH: percorso chiave privata (es. /config/id_ed25519) o PEM inline
Opzionale: endpoint Docker alternativo (es. tcp://socket-proxy:2375)
Disabilita l'autenticazione (SOLO LAN fidata: banner rosso permanente in UI)
- Default
- false
- Value
- false
Intervallo check aggiornamenti immagini (es. 6h, 12h)
- Default
- 6h
- Value
- 6h
Override verifica post-update (default: healthcheck-aware automatico)
Webhook notifiche (POST JSON compatibile Gotify/ntfy/Discord)
Timezone
- Default
- Europe/Rome
- Value
- Europe/Rome