Як розгорнути Healthchecks на власному хостингу у 2026 році: cron-пінги, сповіщення та резервні копії бази даних
Розгорніть Healthchecks на власному хостингу з правильними портами, постійним сховищем, HTTPS, секретами, резервними копіями та перевірками оновлень. Дізнайтеся, як виправити ситуацію, коли cron-завдання надсилають ping на внутрішню URL-адресу.
Самостійний хостинг Healthchecks стає по-справжньому цікавим під час першого повторного розгортання, а не після першого docker run. Якщо cron-завдання надсилають ping на внутрішню URL-адресу або workers для email не запущені, Docker усе одно може повідомляти про цілком справний процес. Наведене нижче розгортання побудоване навколо спостережуваної поведінки: тестове завдання надсилає start-, success- і failure-пінги, після чого запланований ping пропускається, а ви отримуєте сповіщення про відсутнє завдання.
Призначення Healthchecks чітко визначене: моніторинг за принципом dead-man switch для cron-завдань і фонових задач. Цей опис показує, що має залишатися доступним ззовні, що слід тримати приватним і що саме має відновлювати резервна копія.
Резервуйте стан, який Healthchecks не може відтворити
Стандартний контейнер Healthchecks не має обов’язкового монтування application data. Проте набір даних для відновлення чітко визначений: база даних застосунку та конфігурація сповіщень. Не створюйте порожній volume лише для того, щоб розгортання виглядало stateful; натомість збережіть точне посилання на image і перевірену конфігурацію.
Відновіть Healthchecks на чистому хості та виконайте acceptance transaction. Відновлення можна вважати успішним, якщо повернулися checks, schedules, integrations і ping keys, а навмисно пропущений ping спричинив очікуване сповіщення. Будь-яка підключена база даних або сервіс для командної роботи має власний план резервного копіювання, узгоджений із застосунком, тоді як замінний web-контейнер відтворюється з коду. Межу такого відтворюваного процесу описано в посібнику з розгортання від Git до production.
Зберігайте checksum або digest для перевіреного image і повторюйте тест після оновлень. Для stateless-сервісу успішне повторне розгортання є тестом відновлення; для зовнішнього стану runbook Healthchecks має містити посилання на окремого відповідального та процедуру відновлення.
Створіть замінний контейнер Healthchecks
Використовуйте команду, у якій явно задано всі важливі параметри. Цей базовий варіант прив’язує Healthchecks до loopback-інтерфейсу хоста, додає відомі data mounts і передає перше обов’язкове налаштування. Для production-сповіщень додайте перевірені параметри підключення до Postgres і налаштовану доставку email; для приватних сервісів використовуйте приватні імена.
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
Замініть плаваючі tags на протестовану версію або digest. Після запуску перегляньте docker logs --tail 200 healthchecks і переконайтеся, що процес слухає порт 8000. Потім виконайте acceptance action Healthchecks; відповідь root page не доводить, що весь сценарій працює: тестове завдання має надіслати start-, success- і failure-пінги, після чого запланований ping потрібно пропустити й отримати сповіщення про відсутнє завдання.
Від чого залежить Healthchecks
Окресліть навколо Healthchecks три межі: вхідний трафік до порту 8000, постійний стан і допоміжні вимоги. Контейнер можна замінити, але для двох інших складових потрібні чітко визначені відповідальні. Мережевий контракт Healthchecks передбачає Postgres і налаштовану доставку email для production-сповіщень. Приватні endpoint-и залишайте у внутрішньому DNS, дозволяйте лише необхідні вихідні з’єднання та надайте Healthchecks service credential з обмеженими правами.
Схему можна вважати повною, коли чистий клієнт здатен надіслати start-, success- і failure-пінги з тестового завдання, потім пропустити запланований ping і отримати сповіщення про відсутнє завдання. Збирайте дані про час і використання ресурсів для кількості checks, grace periods, notification fan-out, доставки email і записів у базу даних. Якщо transaction завершується помилкою, перша межа, яка поводиться не так, як задокументовано, показує, чи потрібно перевіряти маршрутизацію, локальну ємність або допоміжний сервіс.
Маршрутизуйте Healthchecks, не створюючи хибного враження про HTTPS
Виберіть фінальне ім’я хоста Healthchecks до того, як користувачі збережуть callbacks або налаштування клієнта, а потім задайте SITE_ROOT і ALLOWED_HOSTS як зовнішню HTTPS-адресу. На рівні платформи TLS має завершуватися один раз, після чого трафік потрібно спрямувати на приватний порт 8000.
Виконайте acceptance transaction ззовні. Якщо клієнт узагалі не досягає Healthchecks, скористайтеся контрольним списком перевірки SSL для перевірки DNS і сертифіката. Якщо запит доходить до Healthchecks, але cron-завдання надсилають ping на внутрішню URL-адресу або workers для email не запущені, припиніть змінювати proxy redirects і перевірте відповідну межу застосунку.
Які докази зібрати до запуску Healthchecks
Створіть невеликий disposable fixture для Healthchecks і зберігайте його для кожного релізу. Fixture має перевіряти реальний workflow: тестове завдання надсилає start-, success- і failure-пінги, потім запланований ping пропускається, а ви отримуєте сповіщення про відсутнє завдання. Запишіть image digest, зовнішнє ім’я хоста, адресу залежності та очікуваний результат, щоб наступний оператор міг повторити тест без додаткової інтерпретації цього посібника.
Запустіть fixture тричі. Спочатку використайте свіже розгортання. Потім замініть контейнер, не змінюючи постійний стан. Втретє відновіть резервну копію в порожньому середовищі. Третій запуск є успішним лише тоді, коли повернулися checks, schedules, integrations і ping keys, а навмисно пропущений ping спричинив очікуване сповіщення. Під час кожного запуску збирайте дані про latency та використання ресурсів для кількості checks, grace periods, notification fan-out, доставки email і записів у базу даних; це стане базовою лінією для сповіщень замість довільного відсотка CPU.
Насамкінець навмисно перевірте негативний сценарій: тимчасово забороніть тестовій identity доступ до Postgres і налаштованої доставки email для production-сповіщень. Переконайтеся, що Healthchecks явно повідомляє про помилку, не пошкоджуючи стан, відновіть правильну умову та повторіть успішну transaction. Запис релізу, що містить ці чотири результати, є надійнішим доказом, ніж screenshots dashboard або одноразова відповідь curl.
Сценарії відмов для Healthchecks
Спостерігайте за роботою Healthchecks: кількістю checks, grace periods, notification fan-out, доставкою email і записами в базу даних. Встановлюйте ліміти з достатнім запасом для цієї роботи й уникайте liveness probe, яка конкурує з нею за ресурси. Перевірка оператора також має за розкладом надсилати start-, success- і failure-пінги з тестового завдання, потім пропускати запланований ping і отримувати сповіщення про відсутнє завдання.
Під час оновлень пам’ятайте, що application migrations і worker configuration потрібно оновлювати разом, щоб web page не приховувала проблеми з доставкою сповіщень. Розгорніть candidate version на відновленій копії та повторіть відомий тест. Якщо cron-завдання надсилають ping на внутрішню URL-адресу або workers для email не запущені, використайте runtime logs і фактичний network request, щоб визначити, яке припущення змінилося.
Визначте межу довіри Healthchecks
Закрийте bootstrap window одразу після створення першого довіреного адміністратора. Конкретна пастка Healthchecks — використання згенерованого секрету, який змінюється під час кожного перезапуску; безпечніший підхід полягає у використанні стабільного SECRET_KEY, обмеженні членства в проєктах і ставленні до ping URLs як до облікових даних.
Згенеруйте SECRET_KEY один раз, не зберігайте його в Git і збережіть разом із recovery manifest, оскільки його зміна може зробити зашифрований або підписаний стан застосунку недійсним. Для передавання credentials залежностей використовуйте приватну мережу, а ролям усередині Healthchecks надавайте мінімально необхідні права. Не записуйте чутливі request bodies і responses провайдерів у звичайні logs.
Для розгортання в Dockup також потрібен acceptance test Healthchecks
Dockup може відповідати за замінні компоненти платформи: спрямувати трафік на порт 8000, видати домен і сертифікат, передати secrets, під’єднати persistent storage і з’єднати Healthchecks із керованими або приватно підключеними сервісами. Це можна зробити на інфраструктурі Dockup або на підключеному вами сервері.
Acceptance work для Healthchecks залишається чітко визначеною. Після one-click deployment задайте SITE_ROOT і ALLOWED_HOSTS як зовнішню HTTPS-адресу, підключіть і перевірте Postgres та налаштовану доставку email для production-сповіщень, а потім виконайте цей сценарій: тестове завдання надсилає start-, success- і failure-пінги, після чого запланований ping пропускається, а ви отримуєте сповіщення про відсутнє завдання. Такий розподіл навмисний: Dockup усуває повторювані інфраструктурні налаштування, але не вдає, що ролі застосунку, credentials провайдерів або політика відновлення визначаються самі собою.
Поширені запитання
Що потрібно Healthchecks для production-розгортання?
Маршрутизуйте контейнер Healthchecks через порт 8000 з використанням одного HTTPS origin. Мережева вимога для допоміжних сервісів — Postgres і налаштована доставка email для production-сповіщень. Не вважайте Healthchecks готовим, доки не зможете надіслати start-, success- і failure-пінги з тестового завдання, потім пропустити запланований ping і отримати сповіщення про відсутнє завдання.
Які дані Healthchecks потрібно включати до резервної копії?
Стандартний image Healthchecks не має обов’язкового монтування application data. Збережіть конфігурацію розгортання, а будь-який підключений стан резервуйте окремо; відновлення можна вважати успішним, якщо повернулися checks, schedules, integrations і ping keys, а навмисно пропущений ping спричинив очікуване сповіщення.
Чи потрібен Healthchecks HTTPS за reverse proxy?
Використовуйте HTTPS для публічного origin Healthchecks, а порт 8000 залиште на внутрішньому маршруті. Правильно застосуйте налаштування Healthchecks: задайте SITE_ROOT і ALLOWED_HOSTS як зовнішню HTTPS-адресу. Для Healthchecks HTTPS захищає credentials або вміст користувачів під час передавання та забезпечує узгоджену поведінку клієнта, чутливу до origin.
Як тестувати оновлення Healthchecks?
Відновіть поточний стан Healthchecks в ізольованому розгортанні, застосуйте candidate version і повторіть acceptance transaction. Приділіть особливу увагу тому, що application migrations і worker configuration потрібно оновлювати разом, щоб web page не приховувала проблеми з доставкою сповіщень. Зберігайте попередній image Healthchecks, доки не буде зрозумілою межа міграції даних і rollback.
