Indeks dziennikaDockup / notatka terenowa
Note / self-host-healthchecks

Jak samodzielnie hostować Healthchecks w 2026 roku: pingi z crona, alerty i kopie zapasowe bazy danych

Samodzielnie hostuj Healthchecks z poprawnie skonfigurowanymi portami, trwałym storage, HTTPS, sekretami, kopiami zapasowymi i testami aktualizacji. Dowiedz się, jak naprawić sytuację, w której zadania cron wysyłają ping do wewnętrznego adresu URL.

Samodzielne hostowanie Healthchecks staje się interesujące przy pierwszym redeploymencie, a nie przy pierwszym docker run. Jeśli zadania cron wysyłają ping do wewnętrznego adresu URL albo workery poczty nie działają, Docker nadal może zgłaszać całkowicie zdrowy proces. Poniższe wdrożenie koncentruje się na obserwowalnym działaniu: wysyłaniu pingów rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pominięciu zaplanowanego pinga i odebraniu alertu o brakującym zadaniu.

Przeznaczenie Healthchecks jest jednoznaczne: monitoring typu dead-man dla zadań cron i zadań działających w tle. Ten opis wskazuje, co musi być publiczne, co powinno pozostać prywatne i jakie elementy musi odtworzyć kopia zapasowa.

Utwórz kopię zapasową stanu, którego Healthchecks nie potrafi odtworzyć

Standardowy kontener Healthchecks nie wymaga zamontowania application data. Zakres elementów do odtworzenia jest jednak jasno określony: baza danych aplikacji i konfiguracja powiadomień. Nie twórz pustego volume tylko po to, aby wdrożenie wyglądało na stanowe; zamiast tego zachowaj dokładne odwołanie do obrazu i zweryfikowaną konfigurację.

Odtwórz Healthchecks na pustym hoście i uruchom transakcję akceptacyjną. Odtworzenie kończy się powodzeniem, gdy wracają checki, harmonogramy, integracje i klucze pingów, a celowo pominięty ping wywołuje oczekiwany alert. Każda podłączona baza danych lub usługa do współpracy podlega własnemu, spójnemu z aplikacją planowi backupu, natomiast wymienialny kontener webowy jest odtwarzany z kodu. Przewodnik po wdrażaniu z repozytorium Git na produkcję opisuje tę powtarzalną granicę.

Zachowaj checksum lub digest znanego, poprawnego obrazu i ponownie wykonuj testy po aktualizacjach. W przypadku usługi bezstanowej udany rebuild jest testem odtworzenia; w przypadku zewnętrznego stanu runbook Healthchecks musi zawierać odnośnik do osobnego właściciela i procedury odzyskiwania.

Zbuduj wymienialny kontener Healthchecks

Użyj polecenia, które pokazuje wszystkie istotne ustawienia. Ta konfiguracja bazowa wiąże Healthchecks z pętlą loopback hosta, dodaje znane mounty danych i ustawia pierwszą wymaganą opcję. W produkcji dodaj zweryfikowane ustawienia połączenia z Postgres oraz działającą wysyłkę wiadomości e-mail na potrzeby alertów; w przypadku prywatnych usług używaj prywatnych nazw.

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

Zastąp pływające tagi przetestowaną wersją lub digestem. Po uruchomieniu sprawdź docker logs --tail 200 healthchecks i potwierdź, że proces nasłuchuje na porcie 8000. Następnie wykonaj działanie akceptacyjne Healthchecks; odpowiedź strony głównej nie może potwierdzić powodzenia całego scenariusza: wyślij pingi rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pomiń zaplanowany ping i odbierz alert o brakującym zadaniu.

Od czego zależy Healthchecks

Wyznacz trzy granice wokół Healthchecks: ingress do portu 8000, trwały stan i wymagania pomocnicze. Kontener jest wymienialny, ale pozostałe dwa obszary wymagają wyraźnie określonych właścicieli. Kontrakt sieciowy Healthchecks obejmuje Postgres i działającą wysyłkę wiadomości e-mail na potrzeby alertów produkcyjnych. Prywatne endpointy trzymaj w wewnętrznym DNS, zezwalaj wyłącznie na wymagane połączenia wychodzące i nadaj Healthchecks ograniczone uprawnienia service credential.

Diagram jest kompletny, gdy czysty klient może wysłać pingi rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pominąć zaplanowany ping i odebrać alert o brakującym zadaniu. Zbieraj dane o czasie i zasobach dla liczby checków, grace periods, rozsyłania powiadomień, dostarczania wiadomości e-mail i zapisów do bazy danych. Jeśli transakcja kończy się niepowodzeniem, pierwsza granica, która nie działa zgodnie z dokumentacją, wskazuje, czy należy zbadać routing, lokalną wydajność czy usługę pomocniczą.

Skieruj ruch do Healthchecks bez fałszywych założeń dotyczących HTTPS

Wybierz docelowy hostname Healthchecks, zanim użytkownicy zapiszą callbacki lub ustawienia klienta, a następnie ustaw SITE_ROOT i ALLOWED_HOSTS na zewnętrzny adres HTTPS. Routing platformy powinien kończyć TLS raz i kierować ruch na prywatny port 8000.

Wykonaj transakcję akceptacyjną z zewnątrz. Jeśli klient nigdy nie dociera do Healthchecks, użyj listy kontrolnej walidacji SSL, aby sprawdzić DNS i certyfikat. Jeśli żądanie dociera do Healthchecks, ale zadania cron wysyłają ping do wewnętrznego adresu URL albo workery poczty nie działają, przestań zmieniać redirecty proxy i sprawdź właściwą dla aplikacji granicę.

Dowody do zebrania przed uruchomieniem Healthchecks

Utwórz mały, jednorazowy fixture Healthchecks i zachowuj go przy każdym release. Fixture powinien sprawdzać rzeczywisty workflow: wysłać pingi rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pominąć zaplanowany ping i odebrać alert o brakującym zadaniu. Zapisz digest obrazu, zewnętrzny hostname, adres zależności i oczekiwany rezultat, aby kolejny operator mógł powtórzyć test bez interpretowania tego przewodnika.

Uruchom fixture trzy razy. Najpierw użyj świeżego wdrożenia. Następnie wymień kontener bez zmieniania trwałego stanu. Na końcu odtwórz backup do pustego środowiska. Trzeci przebieg kończy się powodzeniem wyłącznie wtedy, gdy wracają checki, harmonogramy, integracje i klucze pingów, a celowo pominięty ping wywołuje oczekiwany alert. Podczas każdego przebiegu zbieraj dane o opóźnieniach i wykorzystaniu zasobów dla liczby checków, grace periods, rozsyłania powiadomień, dostarczania wiadomości e-mail i zapisów do bazy danych; stanie się to bazą dla alertów, a nie arbitralnie ustalonym procentem użycia CPU.

Na koniec celowo przetestuj ścieżkę negatywną: tymczasowo odbierz tożsamości testowej dostęp do Postgres i działającej wysyłki wiadomości e-mail na potrzeby alertów produkcyjnych. Potwierdź, że Healthchecks wyraźnie sygnalizuje błąd bez uszkodzenia stanu, przywróć poprawne warunki i powtórz udaną transakcję. Rekord release zawierający te cztery wyniki jest mocniejszym dowodem niż zrzuty ekranu dashboardu lub jednorazowa odpowiedź curl.

Ćwiczenia na wypadek awarii Healthchecks

Obserwuj pracę wykonywaną przez Healthchecks: liczbę checków, grace periods, rozsyłanie powiadomień, dostarczanie wiadomości e-mail i zapisy do bazy danych. Ustal limity z zapasem odpowiednim do tego obciążenia i unikaj liveness probe, które konkuruje z aplikacją o zasoby. Check operatora powinien nadal próbować wysyłać pingi rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pomijać zaplanowany ping i odbierać alert o brakującym zadaniu zgodnie z harmonogramem.

W przypadku aktualizacji pamiętaj, że migracje aplikacji i konfigurację workerów trzeba aktualizować razem, aby strona webowa nie ukrywała problemów z dostarczaniem alertów. Wdróż kandydata na odtworzonej kopii i powtórz znany test. Jeśli zadania cron wysyłają ping do wewnętrznego adresu URL albo workery poczty nie działają, użyj logów runtime i rzeczywistego żądania sieciowego, aby ustalić, które założenie uległo zmianie.

Wybierz granicę zaufania Healthchecks

Zamknij okno bootstrapu, gdy tylko istnieje pierwszy zaufany administrator. Konkretna pułapka w Healthchecks polega na używaniu generowanego sekretu, który zmienia się przy każdym restarcie; bezpieczniejszą granicą jest użycie stabilnego SECRET_KEY, ograniczenie członkostwa w projektach i traktowanie URL-i pingów jako danych uwierzytelniających.

Wygeneruj SECRET_KEY raz, trzymaj go poza Gitem i zachowaj razem z manifestem odtworzenia, ponieważ jego zmiana może unieważnić zaszyfrowany lub podpisany stan aplikacji. Prywatna sieć powinna przenosić dane uwierzytelniające zależności, a role wewnątrz Healthchecks powinny przyznawać najmniejsze użyteczne uprawnienia. Nie umieszczaj poufnych treści żądań ani odpowiedzi dostawców w standardowych logach.

Wdrożenie Dockup nadal wymaga testu akceptacyjnego Healthchecks

Dockup może zarządzać wymienialnymi elementami platformy: kierować ruch na port 8000, wystawić domenę i certyfikat, wstrzykiwać sekrety, podłączać persistent storage oraz łączyć Healthchecks z zarządzanymi lub prywatnie podłączonymi usługami. Może robić to na infrastrukturze Dockup albo na podłączonym przez Ciebie serwerze.

Prace akceptacyjne dla Healthchecks pozostają jasno określone. Po wdrożeniu jednym kliknięciem ustaw SITE_ROOT i ALLOWED_HOSTS na zewnętrzny adres HTTPS, skonfiguruj i przetestuj Postgres oraz działającą wysyłkę wiadomości e-mail na potrzeby alertów produkcyjnych, a następnie uruchom ten scenariusz: wyślij pingi rozpoczęcia, powodzenia i błędu z zadania testowego, a potem pomiń zaplanowany ping i odbierz alert o brakującym zadaniu. Taki podział jest celowy: Dockup usuwa powtarzalną konfigurację infrastruktury, nie udając, że role aplikacji, dane uwierzytelniające dostawców czy zasady odtwarzania wybierają się same.

Najczęściej zadawane pytania

Czego Healthchecks potrzebuje do wdrożenia produkcyjnego?

Skieruj kontener Healthchecks na porcie 8000 przez jeden origin HTTPS. Wymagania sieciowe obejmują Postgres i działającą wysyłkę wiadomości e-mail na potrzeby alertów produkcyjnych. Nie uznawaj Healthchecks za gotowy, dopóki nie możesz wysłać pingów rozpoczęcia, powodzenia i błędu z zadania testowego, a następnie pominąć zaplanowanego pinga i odebrać alertu o brakującym zadaniu.

Które dane Healthchecks powinny znaleźć się w backupie?

Standardowy obraz Healthchecks nie wymaga zamontowania application data. Zachowaj konfigurację wdrożenia i twórz kopie podłączonego stanu osobno; odtworzenie kończy się powodzeniem, gdy wracają checki, harmonogramy, integracje i klucze pingów, a celowo pominięty ping wywołuje oczekiwany alert.

Czy Healthchecks wymaga HTTPS za reverse proxy?

Użyj HTTPS dla publicznego originu Healthchecks i pozostaw port 8000 na trasie wewnętrznej. Poprawnie zastosuj ustawienia Healthchecks: ustaw SITE_ROOT i ALLOWED_HOSTS na zewnętrzny adres HTTPS. W przypadku Healthchecks HTTPS chroni dane uwierzytelniające lub treści użytkowników podczas transmisji i zapewnia spójne działanie klienta zależne od originu.

Jak testować aktualizację Healthchecks?

Odtwórz bieżący stan Healthchecks w odizolowanym wdrożeniu, zastosuj wersję kandydującą i powtórz transakcję akceptacyjną. Zwróć szczególną uwagę na to, że migracje aplikacji i konfigurację workerów trzeba aktualizować razem, aby strona webowa nie ukrywała problemów z dostarczaniem alertów. Zachowaj poprzedni obraz Healthchecks do czasu zrozumienia granic migracji danych i rollbacku.