Lo strumento che sorveglia il server dove girano i miei siti e le mie app: ogni minuto controlla siti, certificati, DNS, contenitori e servizi, copie di sicurezza, memoria e pubblicazioni, e quando qualcosa si rompe mi scrive su Telegram, una volta sola, e di nuovo quando torna a posto. Legge e basta, senza privilegi. Il cruscotto si prova su un server inventato.
Sul mio server girano una ventina di siti e di app: quelli dei clienti, i siti dimostrativi e le mie app. **Sentinella** li sorveglia, e la uso davvero: non è la demo di un'attività inventata, anche se da qui la si prova su un server inventato.
**Che cosa fa**
- **I siti**, ogni minuto: codice, tempo di risposta e contenuto della loro pagina di controllo, e dalla stessa connessione il certificato, con i promemoria a 30, 14 e 7 giorni. - **Il DNS**, chiesto ai server del provider: ogni nome deve portare al server, senza un indirizzo IPv6 di troppo, un guasto che mi era già capitato. - **I contenitori** di Docker in cui girano le app, e i **servizi e i timer** del server: chi è fermo, chi si riavvia di continuo o finisce la memoria, e le copie notturne dei database, riuscite o in ritardo, e quali app una copia non ce l'hanno. - **Memoria, swap, dischi e carico**, e la memoria di ogni contenitore, letti dal sistema senza installare niente. - **Le pubblicazioni** delle GitHub Action, che diventano segni sul grafico dei tempi di ogni sito.
Quando qualcosa si rompe mi scrive su Telegram una volta sola, e di nuovo quando torna a posto, con la durata. I guasti che cominciano insieme diventano un messaggio solo; di notte i messaggi arrivano senza suono, e durante un aggiornamento si mettono in pausa.
**La parte difficile: la sicurezza.** Uno strumento che vede tutto il server non deve diventare una mappa per chi lo attacca. Sentinella **legge e basta**: gira in un contenitore senza privilegi e in sola lettura, e non può riavviare niente; Docker lo vede attraverso un proxy che lascia passare l'elenco dei contenitori e i loro eventi, e mai l'ispezione, che darebbe le password delle altre app. Il cruscotto sta dietro password e codice dell'app di autenticazione. La **pagina di stato pubblica** ha un elenco chiuso di campi: dice solo se ogni sito funziona e la percentuale di 30 giorni, e una prova automatica fallisce se ci finisce una porta o un percorso. E siccome un monitor sullo stesso server non può dire che il server è caduto, ogni minuto manda un segnale a Healthchecks.io, che mi avvisa da fuori.
La memoria del server è condivisa con una ventina di app: Sentinella ha un tetto di 160 MB, e salva i controlli in una riga per sito e per ora.
La prova del cruscotto gira nel browser, su un server inventato con nove siti: dopo un minuto e mezzo un sito smette di rispondere, e si vedono l'incidente e il messaggio che sarebbe arrivato su Telegram.
Vue 3 e TypeScript con Nuxt UI, Fastify e PostgreSQL, in contenitori Docker su Debian. Ogni modifica passa da 402 prove automatiche; il rilascio costruisce l'immagine sul server, copia prima il database e torna da solo alla versione di prima se la nuova non risponde.
Progettazione, sviluppo full-stack e messa in produzione · 2026
Vue.js, Fastify, PostgreSQL, Docker