3. (Opzionale) Generare un certificato SSL autofirmato

March 30, 2026 · View on GitHub

DockProbe

DockProbe

Dashboard leggera per il monitoraggio Docker con rilevamento anomalie e avvisi Telegram
Un container. Un comando. Visibilità completa.

English | 한국어 | 日本語 | Deutsch | Français | Español | Português | Italiano

License Python Docker Deps Docker Pulls Image Size


Cos'è DockProbe?

DockProbe è una dashboard di monitoraggio Docker self-hosted che funziona come un singolo container. Raccoglie in tempo reale metriche di CPU, memoria, rete e disco da tutti i container e dalla macchina host — e visualizza tutto in un'interfaccia web pulita con tema scuro.

Il monitoraggio host con supporto GPU traccia la temperatura e l'utilizzo delle GPU NVIDIA insieme all'uso della CPU, alla memoria dell'host, alla pressione disco e alla media di carico — il tutto in grafici in tempo reale. Se esegui carichi di lavoro ML o container intensivi per GPU, DockProbe ti offre visibilità completa senza installare strumenti di monitoraggio GPU separati.

Quando qualcosa va storto, DockProbe lo rileva automaticamente. Sei regole integrate di rilevamento anomalie monitorano picchi di CPU, overflow di memoria, avvisi di temperatura, pressione disco, riavvii imprevisti e picchi di rete. Ogni avviso include azioni consigliate con comandi pronti all'uso — così sai esattamente cosa fare, non solo cosa è andato storto. Gli avvisi vengono inviati istantaneamente tramite Telegram, così puoi intervenire prima che gli utenti se ne accorgano.

Uno scanner di sicurezza integrato esegue 16 controlli automatizzati ogni 5 minuti — coprendo errori di configurazione dei container, esposizione di rete e hardening dell'host — per individuare le vulnerabilità prima che diventino incidenti.

Nessun agente da installare su ogni container, nessun database esterno, nessuna configurazione complessa. Basta montare il socket Docker, eseguire un comando, e avrai piena visibilità sul tuo ambiente Docker su https://localhost:9090. Serve accesso dall'esterno? Il supporto integrato per Cloudflare Tunnel offre HTTPS pubblico sicuro senza port-forwarding.


Avvio rapido

git clone https://github.com/deep-on/dockprobe.git && cd dockprobe && bash install.sh

Tutto qui. L'installer interattivo configura l'autenticazione, gli avvisi Telegram e HTTPS — poi apre https://localhost:9090.

Requisiti: Docker (con Compose v2), Git, OpenSSL


Eseguire da Docker Hub

Nessun git clone, nessun build — basta fare pull e avviare:

# 1. Scaricare il file Compose e il modello delle variabili d'ambiente
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/docker-compose.hub.yaml -o docker-compose.yaml
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/.env.example -o .env

# 2. Modificare .env con le proprie credenziali
vi .env

# 3. (Opzionale) Generare un certificato SSL autofirmato
mkdir -p certs && openssl req -x509 -newkey rsa:4096 -nodes \
  -keyout certs/key.pem -out certs/cert.pem \
  -days 825 -subj "/CN=dockprobe"

# 4. Avviare
docker compose up -d

Disponibile su Docker Hub: deeponinc/dockprobe — Multi-arch (amd64 + arm64)


Anteprima della dashboard

Dashboard DockProbe


Funzionalità

CategoriaCosa ottieni
Dashboard in tempo realeInterfaccia web scura, aggiornamento automatico ogni 10s, tabelle ordinabili, grafici Chart.js
Monitoraggio containerCPU %, memoria %, I/O di rete, I/O di blocco, contatore riavvii
Monitoraggio hostTemperatura e utilizzo CPU/GPU, memoria, utilizzo disco, media di carico
Rilevamento anomalie6 regole con azioni consigliate — picco CPU, overflow memoria, alta temperatura, disco pieno, riavvio, picco di rete
Avvisi TelegramNotifica istantanea con cooldown di 30 min per tipo di avviso
SicurezzaBasic Auth, limitazione di frequenza (5 tentativi falliti = 60s di blocco), HTTPS
Scanner di sicurezza16 controlli automatizzati (container/host/rete), ciclo di scansione ogni 5 min, badge di severità
Gestione sessioniTracciamento connessioni attive, max connessioni configurabile, visualizzazione IP in tempo reale
Gestione passwordModifica utente/password dall'interfaccia della dashboard
Interfaccia impostazioniRegolare max connessioni a runtime dalla dashboard
Modalità di accessoSSL autofirmato (predefinito) o Cloudflare Tunnel (senza port forwarding)
Leggera4 pacchetti Python, singolo file HTML, SQLite con conservazione di 7 giorni

Composizione della dashboard

SezioneDettagli
Barra sessioneUtente connesso, IP, connessioni attive / limite massimo
Schede hostTemp CPU, temp GPU, CPU/GPU %, memoria host, disco %, media di carico
Tabella containerOrdinabile per CPU/memoria/rete, anomalie con codice colore
Grafici (5)Tendenze CPU e memoria dei container, CPU/GPU % dell'host, temperatura e carico dell'host
Disco DockerImmagini, cache di build, volumi, layer RW dei container
Storico avvisiUltime 24h con timestamp

Regole di rilevamento anomalie

RegolaCondizioneAzione
CPU container>80% per 3 controlli consecutivi (30s)Telegram + evidenziazione rossa
Memoria container>90% del limiteAvviso immediato
Temperatura CPU host>85°CAvviso immediato
Disco host>90% di utilizzoAvviso immediato
Riavvio containerrestart_count incrementatoAvviso immediato
Picco di reteRX aumento 10x + >100MBAvviso immediato

Tutte le soglie sono configurabili tramite variabili d'ambiente.

Ogni anomalia include raccomandazioni attuabili con comandi specifici:

AnomaliaEsempio di raccomandazione
Picco CPUdocker stats <name> · docker restart <name> · docker update --cpus=2 <name>
Overflow memoriadocker stats <name> · docker update --memory=2g <name>
Loop di riavviodocker logs --tail 50 <name> · docker inspect <name>
Picco di retedocker logs --tail 50 <name> · Verificare DDoS o traffico imprevisto
Alta temperaturaControllare ventola/sistema di raffreddamento · sensors -u per dettagli
Disco pienodocker system prune -f · docker builder prune -f · docker volume prune

Scanner di sicurezza

DockProbe esegue 16 controlli di sicurezza automatizzati ogni 5 minuti e visualizza i risultati in una sezione dedicata della dashboard con badge di severità.

CategoriaControlli
Container (9)Modalità privilegiata, esecuzione come root, capability pericolose, mount del socket Docker, mount di percorsi sensibili, rootfs in sola lettura, AppArmor/Seccomp disabilitati, segreti nelle variabili d'ambiente, nessun limite di memoria/CPU
Rete (3)Modalità rete host, esposizione eccessiva di porte, esposizione della porta SSH (22)
Host (4)Opzioni di sicurezza del daemon Docker, ASLR del kernel, inoltro IP, stato del Linux Security Module

Livelli di severità:

  • 🔴 Critico — Azione immediata richiesta (es. modalità privilegiata, socket Docker scrivibile)
  • 🟡 Avvertimento — Miglioramento della sicurezza consigliato
  • 🔵 Info — Risultati informativi
  • 🟣 Non disponibile — Il controllo non può essere eseguito a causa di vincoli ambientali; mostra come abilitarlo

I controlli a livello host richiedono mount di volumi (/proc:/host_proc:ro, /sys:/host_sys:ro). Se non montati, quei controlli vengono mostrati come Non disponibile con le istruzioni di configurazione.


Architettura

┌──────────────────────────────────────────────┐
│  DockProbe Container                         │
│                                              │
│  FastAPI + uvicorn (porta 9090)              │
│  ├── collectors/                             │
│  │   ├── containers.py  (aiodocker)          │
│  │   ├── host.py        (/proc, /sys, GPU)   │
│  │   └── images.py      (system df)          │
│  ├── alerting/                               │
│  │   ├── detector.py    (6 regole + azioni)  │
│  │   └── telegram.py    (httpx)              │
│  ├── security/                               │
│  │   └── scanner.py     (16 checks)          │
│  ├── storage/                                │
│  │   └── db.py          (SQLite WAL)         │
│  └── static/                                 │
│      └── index.html     (Chart.js)           │
│                                              │
│  Volumi:                                     │
│    docker.sock (ro), /sys (ro), /proc (ro),  │
│    nvidia-smi (ro), SQLite named volume      │
└──────────────────────────────────────────────┘

Dipendenze (solo 4 pacchetti):

  • fastapi — Framework web
  • uvicorn — Server ASGI
  • aiodocker — Client Docker API asincrono
  • httpx — Client HTTP asincrono (API Telegram)

Configurazione

Tutte le impostazioni tramite file .env:

# Autenticazione (obbligatorio)
AUTH_USER=admin
AUTH_PASS=your-password

# Avvisi Telegram (opzionale)
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHAT_ID=your-chat-id

# Soglie (opzionale, valori predefiniti mostrati)
CPU_THRESHOLD=80
MEM_THRESHOLD=90

# Limite connessioni (opzionale, 0 = illimitato)
MAX_CONNECTIONS=3

# Cloudflare Tunnel (opzionale)
CF_TUNNEL_TOKEN=your-tunnel-token

Modalità di accesso

Opzione 1: Rete locale (SSL autofirmato) — predefinito

bash install.sh   # scegliere opzione 1

Accesso via https://localhost:9090 o https://<tuo-ip>:9090

Per accedere da altri dispositivi sulla stessa rete, usa l'IP LAN del server (es: https://192.168.1.100:9090). Se necessario:

  • Aprire la porta nel firewall: sudo ufw allow 9090/tcp
  • Accettare l'avviso del certificato autofirmato nel browser

Perché l'avviso del browser? DockProbe utilizza un certificato SSL autofirmato generato durante l'installazione. Poiché non è emesso da un'Autorità di Certificazione (CA) affidabile, il browser mostra un avviso "La connessione non è privata". Questo è normale — clicca su "Avanzate" → "Procedi al sito". Per eliminare questo avviso, usa Cloudflare Tunnel (Opzione 3) che fornisce automaticamente un certificato TLS affidabile.

Opzione 2: Accesso remoto tramite port forwarding

Per accesso esterno senza Cloudflare:

  1. Inoltrare la porta 9090 sul router all'IP LAN del server
  2. Accedere via https://<tuo-ip-pubblico>:9090
  3. Usare un servizio DDNS (No-IP, DuckDNS, ecc.) se l'IP pubblico cambia

Nota: La porta viene esposta direttamente. Basic Auth + HTTPS sono attivi per impostazione predefinita, ma si consiglia Cloudflare Tunnel (Opzione 3) per maggiore sicurezza.

Opzione 3: Cloudflare Tunnel (consigliato per accesso remoto)

Nessun port forwarding, nessuna modifica al firewall, certificato TLS valido — il modo più semplice e sicuro per accedere da qualsiasi luogo.

bash install.sh   # scegliere opzione 2, incollare token del tunnel

Procedura di configurazione:

  1. Creare un account gratuito su Cloudflare Zero Trust
  2. Andare su Networks > Tunnels > Create a tunnel
  3. Dare un nome al tunnel (es: dockprobe) e copiare il token
  4. Eseguire bash install.sh e scegliere l'opzione Cloudflare Tunnel
  5. Incollare il token
  6. Nel pannello Cloudflare, aggiungere un Public Hostname che punta a http://localhost:9090
  7. Accedere via https://your-domain.com con certificato TLS valido

Endpoint API

EndpointMetodoDescrizione
/GETHTML della dashboard
/api/currentGETUltimo snapshot (container + host + immagini + anomalie)
/api/history/{name}?hours=1GETSerie temporali dei container
/api/history/host?hours=1GETSerie temporali dell'host
/api/alerts?hours=24GETStorico avvisi
/api/sessionGETUtente attuale, IP, connessioni attive
/api/settingsGET/POSTImpostazioni a runtime (max_connections)
/api/change-passwordPOSTModifica utente/password
/api/healthGETControllo di salute (senza autenticazione)

Sicurezza

DockProbe è progettato per un self-hosting sicuro con più livelli di protezione:

Autenticazione e accesso

  • Basic Auth su tutti gli endpoint (eccetto /api/health)
  • PBKDF2-SHA256 hashing della password con salt casuale (600k iterazioni)
  • Limitazione di frequenza — 5 tentativi di accesso falliti → 60s di blocco per IP
  • Minimo 8 caratteri richiesti per la password
  • Limite connessioni — Massimo utenti simultanei configurabile

Rete e trasporto

  • HTTPS — RSA-4096 autofirmato (predefinito) o Cloudflare Tunnel
  • CORS — Richieste cross-origin bloccate esplicitamente
  • Protezione CSRF — Gli endpoint POST richiedono l'intestazione X-Requested-With
  • Avviso fallback HTTP — La modalità testo in chiaro avvisa all'avvio (solo tunnel)

Rafforzamento del container

  • Non root — Il container viene eseguito come appuser, non come root
  • Mount in sola lettura — Docker socket, /sys, /proc tutti montati in read-only
  • Protezione da path traversal — Il servizio di file statici valida i percorsi risolti
  • Nessun accesso in scrittura — Solo monitoraggio, nessun controllo dei container
  • Nessun OpenAPI/Swagger — Endpoint di documentazione API disabilitati in produzione

Limitazione di frequenza proxy-aware

  • X-Forwarded-For è considerato attendibile solo dagli IP elencati nella variabile d'ambiente TRUSTED_PROXIES
  • Le connessioni dirette utilizzano sempre l'IP reale del client

Configurazione manuale

Se preferisci la configurazione manuale:

git clone https://github.com/deep-on/dockprobe.git
cd dockprobe

# Creare .env
cp .env.example .env
vi .env

# Generare certificato SSL (opzionale)
mkdir -p certs
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout certs/key.pem -out certs/cert.pem \
  -days 365 -subj "/CN=dockprobe"

# Avviare
docker compose up -d --build

Licenza

Apache License 2.0 — vedi LICENSE

Attribuzione: Le versioni modificate o ridistribuite devono mantenere il logo DeepOn e l'avviso "Powered by DeepOn Inc." nell'interfaccia.


DeepOn Sviluppato da DeepOn Inc.