Come fare self-hosting di Healthchecks nel 2026: ping cron, alert e backup del database
Fai self-hosting di Healthchecks con porte corrette, storage persistente, HTTPS, secret, backup e verifiche degli aggiornamenti. Scopri come risolvere il problema dei cron job che inviano ping a un URL interno.
Fare self-hosting di Healthchecks diventa interessante al primo redeploy, non al primo docker run. Se i cron job inviano ping a un URL interno o gli email worker non sono in esecuzione, Docker può comunque segnalare un processo perfettamente funzionante. Il deployment riportato di seguito è organizzato intorno a un comportamento osservabile: inviare ping di avvio, successo e errore da un job di test, quindi omettere un ping pianificato e ricevere l'alert relativo al job mancante.
Lo scopo di Healthchecks è chiaro: il monitoraggio dead-man per cron job e task in background. Questa definizione indica cosa deve restare pubblico, cosa dovrebbe rimanere privato e cosa deve essere ricostruito da un backup.
Esegui il backup dello stato che Healthchecks non può ricreare
Il container standard di Healthchecks non richiede alcun mount per i dati applicativi. Il set necessario per il ripristino è comunque chiaro: il database dell'applicazione e la configurazione delle notifiche. Non creare un volume vuoto solo per dare al deployment un aspetto stateful; conserva invece l'esatto riferimento all'immagine e la configurazione revisionata.
Ricrea Healthchecks su un host vuoto ed esegui la transazione di acceptance. Il ripristino ha esito positivo quando tornano disponibili check, pianificazioni, integrazioni e ping key e un ping volutamente omesso genera l'alert previsto. Qualsiasi database o servizio di collaborazione collegato deve seguire il proprio piano di backup coerente con l'applicazione, mentre il web container sostituibile viene ricreato dal codice. La guida al deployment da Git alla produzione descrive questo confine riproducibile.
Conserva un checksum o un digest dell'immagine verificata e ripeti il test dopo gli aggiornamenti. Per un servizio stateless, un rebuild riuscito è il test di restore; per lo stato esterno, il runbook di Healthchecks deve rimandare al proprietario e alla procedura di ripristino separati.
Crea un container Healthchecks sostituibile
Usa un comando che renda esplicita ogni scelta importante. Questa configurazione di base associa Healthchecks al loopback dell'host, aggiunge i mount dati noti e fornisce la prima impostazione necessaria. In produzione, aggiungi le impostazioni di connessione revisionate per Postgres e una configurazione funzionante per l'invio delle email di alert; usa nomi privati per i servizi privati.
docker run -d \
--name healthchecks \
--restart unless-stopped \
-p 127.0.0.1:8000:8000 \
-e SECRET_KEY=replace-with-a-long-random-value \
-e SITE_ROOT=https://app.example.com \
-e ALLOWED_HOSTS=app.example.com \
-e DB=postgres \
-e DB_HOST=postgres.internal \
-e DB_NAME=healthchecks \
-e DB_USER=healthchecks \
-e DB_PASSWORD=replace-with-a-strong-database-password \
healthchecks/healthchecks:latest
Sostituisci i tag floating con una versione testata o con un digest. Dopo l'avvio, controlla docker logs --tail 200 healthchecks e verifica che il processo sia in ascolto sulla porta 8000. Esegui quindi l'azione di acceptance di Healthchecks; una risposta alla root page non può dimostrare che lo scenario completo funzioni: invia ping di avvio, successo ed errore da un job di test, quindi ometti un ping pianificato e ricevi l'alert relativo al job mancante.
Da cosa dipende Healthchecks
Traccia tre confini intorno a Healthchecks: ingresso sulla porta 8000, stato persistente e requisiti di supporto. Il container è sostituibile, ma gli altri due elementi richiedono proprietari espliciti. Il contratto di rete di Healthchecks prevede Postgres e un servizio funzionante per l'invio delle email di alert in produzione. Mantieni gli endpoint privati sul DNS interno, consenti solo le chiamate outbound necessarie e assegna a Healthchecks una service credential con scope limitato.
Il diagramma è completo quando un client pulito riesce a inviare ping di avvio, successo ed errore da un job di test, quindi a omettere un ping pianificato e ricevere l'alert relativo al job mancante. Raccogli dati su tempi e risorse per il numero di check, i grace period, il notification fan-out, l'invio delle email e le scritture sul database. Se la transazione fallisce, il primo confine che non si comporta come documentato indica se devi verificare il routing, la capacità locale o un servizio di supporto.
Instrada Healthchecks senza fingere che HTTPS sia configurato
Scegli l'hostname finale di Healthchecks prima che gli utenti salvino callback o impostazioni client, quindi configura SITE_ROOT e ALLOWED_HOSTS con l'indirizzo HTTPS esterno. La route della piattaforma dovrebbe terminare TLS una sola volta e puntare alla porta privata 8000.
Esegui la transazione di acceptance dall'esterno. Se il client non raggiunge mai Healthchecks, usa la checklist per la validazione SSL per i controlli DNS e del certificato. Se la richiesta raggiunge Healthchecks, ma i cron job inviano ping a un URL interno o gli email worker non sono in esecuzione, smetti di modificare i redirect del proxy e verifica invece il confine specifico dell'applicazione.
Raccogli le prove prima di mettere Healthchecks in produzione
Crea un fixture Healthchecks piccolo e usa-e-getta, conservandolo per ogni release. Il fixture dovrebbe esercitare il workflow reale: inviare ping di avvio, successo ed errore da un job di test, quindi omettere un ping pianificato e ricevere l'alert relativo al job mancante. Registra il digest dell'immagine, l'hostname esterno, l'indirizzo della dipendenza e il risultato atteso, così un operatore potrà ripetere il test in seguito senza dover interpretare questa guida.
Esegui il fixture tre volte. Per prima cosa, usa il deployment appena creato. Poi sostituisci il container senza modificare lo stato persistente. Infine, ripristina il backup in un ambiente vuoto. La terza esecuzione ha esito positivo solo quando tornano disponibili check, pianificazioni, integrazioni e ping key e un ping volutamente omesso genera l'alert previsto. Durante ogni esecuzione, raccogli latenza e utilizzo delle risorse relativi al numero di check, ai grace period, al notification fan-out, all'invio delle email e alle scritture sul database; questi dati diventano la baseline per gli alert, anziché una percentuale di CPU arbitraria.
Infine, verifica deliberatamente il percorso negativo: nega temporaneamente all'identità di test l'accesso a Postgres e al servizio funzionante per l'invio delle email di alert in produzione. Conferma che Healthchecks fallisca in modo visibile senza corrompere lo stato, ripristina la condizione corretta e ripeti la transazione con esito positivo. Un release record che contenga questi quattro risultati costituisce una prova più solida degli screenshot di una dashboard o di una risposta curl eseguita una sola volta.
Failure drill per Healthchecks
Osserva il lavoro svolto da Healthchecks: numero di check, grace period, notification fan-out, invio delle email e scritture sul database. Imposta i limiti lasciando headroom per questo carico ed evita una liveness probe che entri in competizione con esso. Il controllo dell'operatore dovrebbe comunque tentare di inviare ping di avvio, successo ed errore da un job di test, quindi omettere un ping pianificato e ricevere l'alert relativo al job mancante secondo una pianificazione.
Per gli aggiornamenti, ricorda che le migration dell'applicazione e la configurazione dei worker devono essere aggiornate insieme, così la pagina web non nasconde eventuali problemi nella consegna degli alert. Esegui il deployment della candidate version su una copia ripristinata e ripeti il test noto. Se i cron job inviano ping a un URL interno o gli email worker non sono in esecuzione, usa i runtime log e la richiesta di rete effettiva per individuare quale assunzione è cambiata.
Scegli il trust boundary di Healthchecks
Chiudi la finestra di bootstrap non appena esiste il primo amministratore attendibile. Il problema concreto di Healthchecks è usare un secret generato che cambia a ogni riavvio; il confine più sicuro consiste nell'utilizzare una SECRET_KEY stabile, limitare l'appartenenza ai progetti e trattare gli URL di ping come credenziali.
Genera SECRET_KEY una sola volta, tienila fuori da Git e conservala insieme al recovery manifest, perché modificarla può invalidare lo stato applicativo cifrato o firmato. La rete privata dovrebbe trasportare le credenziali delle dipendenze e i ruoli interni a Healthchecks dovrebbero concedere solo l'azione minima necessaria. Mantieni i body delle richieste sensibili e le risposte dei provider fuori dai log ordinari.
Anche un deployment Dockup richiede un acceptance test di Healthchecks
Dockup può gestire i componenti sostituibili della piattaforma: instradare il traffico verso la porta 8000, emettere il dominio e il certificato, iniettare i secret, collegare lo storage persistente e connettere Healthchecks a servizi gestiti o collegati privatamente. Può farlo sull'infrastruttura Dockup o su un server collegato da te.
L'attività di acceptance di Healthchecks resta esplicita. Dopo il deployment one-click, configura SITE_ROOT e ALLOWED_HOSTS con l'indirizzo HTTPS esterno, collega e testa Postgres e il servizio funzionante per l'invio delle email di alert in produzione ed esegui questo scenario: invia ping di avvio, successo ed errore da un job di test, quindi ometti un ping pianificato e ricevi l'alert relativo al job mancante. Questa divisione è intenzionale: Dockup elimina la configurazione infrastrutturale ripetitiva senza fingere che ruoli applicativi, credenziali dei provider o policy di ripristino si scelgano da soli.
Domande frequenti
Di cosa ha bisogno Healthchecks per un deployment in produzione?
Instrada il container Healthchecks sulla porta 8000 attraverso un'unica origine HTTPS. Il requisito di rete di supporto è Postgres e un servizio funzionante per l'invio delle email di alert in produzione. Non considerare Healthchecks pronto finché non puoi inviare ping di avvio, successo ed errore da un job di test, quindi omettere un ping pianificato e ricevere l'alert relativo al job mancante.
Quali dati di Healthchecks devono rientrare in un backup?
L'immagine standard di Healthchecks non richiede alcun mount per i dati applicativi. Conserva la configurazione del deployment ed esegui separatamente il backup di qualsiasi stato collegato; il ripristino ha esito positivo quando tornano disponibili check, pianificazioni, integrazioni e ping key e un ping volutamente omesso genera l'alert previsto.
Healthchecks richiede HTTPS dietro un reverse proxy?
Usa HTTPS per l'origine pubblica di Healthchecks e mantieni la porta 8000 sulla route interna. Applica correttamente l'impostazione di Healthchecks: configura SITE_ROOT e ALLOWED_HOSTS con l'indirizzo HTTPS esterno. Per Healthchecks, HTTPS protegge le credenziali o i contenuti degli utenti durante il transito e mantiene coerente il comportamento del client sensibile all'origine.
Come si deve testare un aggiornamento di Healthchecks?
Ripristina lo stato attuale di Healthchecks in un deployment isolato, applica la candidate version e ripeti la relativa transazione di acceptance. Presta particolare attenzione, perché le migration dell'applicazione e la configurazione dei worker devono essere aggiornate insieme, così la pagina web non nasconde eventuali problemi nella consegna degli alert. Conserva l'immagine precedente di Healthchecks finché non avrai compreso il confine della migrazione dei dati e del rollback.
