bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Healthchecks.

calendar_month Jul 04, 2026 schedule 21 хв. читання visibility 17 переглядів
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Healthchecks.io на VPS: Моніторинг Cron-завдань та фонових процесів

TL;DR

У цьому детальному посібнику ми крок за кроком налаштуємо Healthchecks.io — потужну систему моніторингу Cron-завдань, фонових процесів та інших періодичних завдань — на вашому власному VPS. Ви дізнаєтеся, як розгорнути його з використанням Docker Compose, забезпечити безпечний доступ через Caddy з автоматичним HTTPS, а також налаштувати резервне копіювання та обслуговування для надійної роботи.

  • Розгортання Healthchecks.io на Ubuntu 24.04 LTS з Docker Compose.
  • Налаштування безпечного доступу через доменне ім'я з HTTPS, використовуючи веб-сервер Caddy.
  • Конфігурація бази даних PostgreSQL та основних параметрів Healthchecks.io.
  • Впровадження механізмів резервного копіювання для збереження ваших даних.
  • Покрокові інструкції для підготовки сервера, встановлення ПЗ, налаштування та усунення несправностей.
  • Актуальні команди та версії ПЗ, релевантні для 2026 року.

Що ми налаштовуємо і навіщо

У сучасному світі, де автоматизація та фонові процеси відіграють ключову роль у роботі веб-додатків, баз даних та інфраструктури, критично важливо мати надійний спосіб переконатися, що всі ці завдання виконуються вчасно та без помилок. Саме для цього і призначений Healthchecks.io.

Healthchecks.io — це потужний інструмент для моніторингу періодичних завдань. Він працює за принципом "зворотного моніторингу": замість того, щоб перевіряти, чи запущено сервіс, Healthchecks.io очікує "пінги" (HTTP-запити) від ваших завдань у задані інтервали часу. Якщо завдання не надсилає пінг в очікуване вікно, Healthchecks.io негайно надсилає сповіщення про збій.

Це ідеальне рішення для:

  • Cron-завдань: Переконайтеся, що ваші щоденні резервні копії, обробка даних або розсилка звітів виконуються точно за розкладом.
  • Фонових процесів: Моніторинг демонів, воркерів черг або інших довготривалих процесів, які повинні регулярно повідомляти про свою працездатність.
  • IoT-пристроїв: Перевірка активності віддалених пристроїв, які повинні регулярно надсилати дані.
  • Скриптів автоматизації: Підтвердження успішного завершення автоматичних розгортань або синхронізацій.

У підсумку, читач отримає повністю функціонуючу, самодостатню систему моніторингу, розгорнуту на власному сервері. Це дасть повний контроль над даними, конфігурацією та безпекою, а також дозволить уникнути витрат на сторонні хмарні сервіси моніторингу.

Альтернативи: Cloud-managed vs Self-hosted

На ринку існує безліч альтернатив Healthchecks.io, як хмарних (cloud-managed), так і саморозміщуваних (self-hosted).

  • Cloud-managed сервіси: До них належать такі рішення, як UptimeRobot, Better Uptime, Cronitor, Pingdom, і сам Healthchecks.io пропонує SaaS-версію.
    • Плюси: Простота налаштування, не потрібно керувати сервером, масштабованість, часто багатий функціонал.
    • Мінуси: Щомісячна плата (яка може зростати зі збільшенням кількості перевірок), залежність від стороннього провайдера, потенційні питання конфіденційності даних.
  • Self-hosted рішення: Крім Healthchecks.io, можна розглянути такі інструменти, як Prometheus/Grafana (хоча вони більше для метрик, ніж для пінгів), Netdata (для моніторингу системних ресурсів) або навіть самописні скрипти.
    • Плюси self-hosted на VPS: Повний контроль над даними та інфраструктурою, відсутність щомісячних платежів (крім вартості VPS), можливість глибокої кастомізації, підвищена конфіденційність.
    • Мінуси: Вимагає певних технічних знань для встановлення та обслуговування, відповідальність за безпеку та резервні копії лежить на вас.

Вибір self-hosted Healthchecks.io на VPS виправданий, якщо ви цінуєте контроль, конфіденційність і хочете уникнути recurring costs, маючи при цьому достатні навички для керування власним сервером. Це економічно ефективне та гнучке рішення для моніторингу ваших критично важливих завдань.

Який VPS-конфіг потрібен для цього завдання

Healthchecks.io — це відносно легковажний додаток, особливо якщо ви використовуєте Docker Compose, який оптимізує споживання ресурсів. Однак для стабільної роботи, особливо з урахуванням бази даних PostgreSQL та веб-сервера, потрібні певні мінімальні характеристики.

Мінімальні вимоги

  • CPU: 1 ядро. Сучасні процесори достатньо потужні для обробки десятків тисяч перевірок.
  • RAM: 1-2 ГБ. Цього буде достатньо для операційної системи, Docker-контейнерів Healthchecks.io та PostgreSQL. Якщо планується дуже велика кількість перевірок (сотні тисяч), розгляньте 4 ГБ.
  • Диск: 20-40 ГБ SSD. Healthchecks.io не зберігає багато даних за замовчуванням, але PostgreSQL зростатиме з часом. SSD критично важливий для продуктивності бази даних.
  • Мережа: 100 Мбіт/с або 1 Гбіт/с. Для вхідних пінгів та вихідних сповіщень достатня базова пропускна здатність.

Конкретний VPS-план для завдання

Для більшості сценаріїв моніторингу до кількох тисяч перевірок підійде VPS з такими характеристиками:

  • 2 x vCPU
  • 4 ГБ RAM
  • 60-80 ГБ SSD
  • 1 Гбіт/с мережевий інтерфейс

Такої конфігурації буде більш ніж достатньо для стабільної роботи Healthchecks.io, обробки сповіщень та зберігання історії перевірок протягом тривалого часу. Ви можете розглянути VPS із зазначеними характеристиками для розміщення вашого екземпляра Healthchecks.io.

Коли потрібен dedicated, а не VPS

У більшості випадків для Healthchecks.io буде достатньо VPS. Однак, dedicated-сервер може бути виправданий у таких ситуаціях:

  • Дуже велика кількість перевірок: Якщо ви плануєте моніторити сотні тисяч або мільйони завдань з дуже короткими інтервалами, що створює високе навантаження на базу даних та веб-сервер.
  • Вимоги до продуктивності: Якщо критична кожна мілісекунда затримки при обробці пінгів або надсиланні сповіщень, і ви хочете повністю виключити "сусідський шум" (noisy neighbor) на віртуалізованому середовищі.
  • Суворі вимоги безпеки/відповідності: Деякі регуляторні вимоги можуть передбачати використання фізично ізольованого обладнання.
  • Інтеграція з іншими сервісами: Якщо на цьому ж сервері планується розміщувати інші критично важливі сервіси, що вимагають значних ресурсів.

Для більшості користувачів, навіть з кількома тисячами перевірок, добре налаштований VPS буде оптимальним і більш економічним вибором.

Локація: на що впливає

Вибір географічної локації VPS має кілька важливих аспектів:

  • Затримка (Latency): Чим ближче сервер до джерел ваших пінгів (ваших інших серверів, додатків), тим меншою буде затримка. Для Healthchecks.io це не критично, оскільки пінги — це невеликі HTTP-запити, але для загальної чутливості системи це може бути важливо.
  • Доступність сповіщень: Якщо ваші сповіщення (наприклад, електронною поштою) повинні швидко доходити до вас, розташування сервера ближче до вашої основної робочої локації може бути кращим.
  • Законодавство та відповідність: Залежно від того, які дані ви плануєте моніторити та хто є користувачем Healthchecks.io, місце розташування сервера може впливати на застосовне законодавство про захист даних (наприклад, GDPR у Європі).
  • Ціна: Ціни на VPS можуть відрізнятися залежно від регіону.

Зазвичай рекомендується вибирати локацію, яка географічно ближче до ваших основних сервісів, що надсилатимуть пінги, або до вашої команди, яка отримуватиме сповіщення.

Підготовка сервера

Перш ніж приступити до встановлення Healthchecks.io, необхідно виконати базове налаштування вашого свіжого VPS, щоб забезпечити безпеку та підготувати середовище для подальшого розгортання. Ми будемо використовувати Ubuntu 24.04 LTS (Noble Numbat) як основу для нашого посібника, оскільки це актуальна та підтримувана операційна система на 2026 рік.

1. Підключення до сервера по SSH

Використовуйте SSH-клієнт для підключення до вашого VPS. Замініть your_username та your_vps_ip на актуальні дані.


ssh your_username@your_vps_ip

Якщо ви використовуєте root-користувача, рекомендується відразу створити нового користувача з обмеженими правами.

2. Створення нового користувача та налаштування sudo

Робота під root-користувачем небезпечна. Створіть нового користувача та надайте йому права sudo.


# Додавання нового користувача
sudo adduser newuser

# Додавання користувача до групи sudo
sudo usermod -aG sudo newuser

# Перемикання на нового користувача
su - newuser

Далі всі команди виконуватимуться від імені newuser з використанням sudo.

3. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Якщо ви ще не налаштували їх, скопіюйте ваш публічний ключ на сервер.


# На вашій локальній машині
ssh-copy-id newuser@your_vps_ip

# На сервері, після того як переконалися, що вхід за ключем працює, вимкніть вхід за паролем для root
# Відредагуйте файл /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

Знайдіть та змініть наступні рядки:


PermitRootLogin no
PasswordAuthentication no

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X). Потім перезапустіть службу SSH:


sudo systemctl restart sshd

4. Оновлення системи

Завжди починайте з оновлення списку пакетів та встановлення останніх версій вже встановленого ПЗ.


# Оновлення списку пакетів
sudo apt update

# Оновлення встановлених пакетів до останніх версій
sudo apt upgrade -y

# Видалення непотрібних пакетів та очищення кешу
sudo apt autoremove -y && sudo apt clean

5. Налаштування брандмауера (UFW)

UFW (Uncomplicated Firewall) — це простий у використанні інтерфейс для iptables. Налаштуємо його для дозволу SSH та майбутніх портів Healthchecks.io (HTTP/HTTPS).


# Дозволити SSH (порт 22)
sudo ufw allow OpenSSH

# Дозволити HTTP (порт 80) - для Caddy та Let's Encrypt
sudo ufw allow http

# Дозволити HTTPS (порт 443) - для Caddy та Let's Encrypt
sudo ufw allow https

# Увімкнути брандмауер
sudo ufw enable

Підтвердіть увімкнення, ввівши y. Перевірте статус брандмауера:


sudo ufw status verbose

6. Встановлення Fail2ban

Fail2ban допомагає захистити ваш сервер від атак методом перебору, блокуючи IP-адреси, з яких надходить занадто багато невдалих спроб входу.


# Встановлення Fail2ban
sudo apt install fail2ban -y

# Увімкнення та запуск служби
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# Перевірка статусу (опціонально)
sudo systemctl status fail2ban

Fail2ban за замовчуванням вже налаштований для захисту SSH. Для більш тонкого налаштування можна скопіювати та відредагувати файл /etc/fail2ban/jail.conf у /etc/fail2ban/jail.local.

7. Встановлення базових утиліт

Встановимо кілька корисних утиліт, які можуть знадобитися надалі.


# Встановлення curl, wget, git, htop
sudo apt install curl wget git htop -y

Тепер ваш сервер готовий до встановлення Healthchecks.io та його залежностей.

Встановлення ПЗ — покроково

Для встановлення Healthchecks.io ми будемо використовувати Docker Compose. Це найбільш рекомендований спосіб розгортання, оскільки він спрощує керування залежностями (PostgreSQL, Redis) та оновленнями. Ми будемо використовувати актуальні версії Docker та Healthchecks.io, доступні у 2026 році.

1. Встановлення Docker та Docker Compose

Спочатку встановимо Docker Engine та Docker Compose. Ми будемо використовувати офіційні репозиторії Docker для отримання останніх версій.


# Видалення старих версій Docker (якщо є)
sudo apt remove docker docker-engine docker.io containerd runc

# Встановлення залежностей для додавання репозиторію Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# Додавання GPG-ключа Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Додавання репозиторію Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Оновлення списку пакетів після додавання репозиторію
sudo apt update

# Встановлення Docker Engine, Docker CLI та containerd (актуальні версії на 2026 рік)
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Додавання поточного користувача до групи docker для виконання команд без sudo
sudo usermod -aG docker ${USER}

# Застосування змін групи (потрібне перепідключення до SSH або перезавантаження)
# newgrp docker
# Виконайте exit та перепідключіться до сервера по SSH, щоб зміни набули чинності.

Після перепідключення до SSH перевірте встановлення Docker:


# Перевірка версії Docker
docker --version

# Перевірка версії Docker Compose (буде встановлений як плагін)
docker compose version

Очікувані версії: Docker Engine 25.x.x+, Docker Compose v2.x.x+.

2. Завантаження конфігурації Healthchecks.io

Ми будемо використовувати офіційний репозиторій Healthchecks.io для отримання файлу docker-compose.yml та супутніх файлів.


# Створення директорії для Healthchecks.io
mkdir ~/healthchecks
cd ~/healthchecks

# Завантаження файлу docker-compose.yml та .env.example
# Використовуємо wget для завантаження безпосередньо з GitHub для стабільності
wget https://raw.githubusercontent.com/healthchecks/healthchecks/master/docker-compose.yml
wget https://raw.githubusercontent.com/healthchecks/healthchecks/master/.env.example

# Перейменування файлу прикладу змінних оточення
mv .env.example .env

3. Налаштування файлу .env

Файл .env містить критично важливі змінні оточення для Healthchecks.io, включаючи секретний ключ, дані для підключення до бази даних та налаштування електронної пошти. Відкрийте його для редагування:


# Відкриття файлу .env для редагування
nano .env

Обов'язково змініть наступні параметри:

  • SECRET_KEY: Згенеруйте дуже довгий випадковий рядок (наприклад, 50+ символів), використовуючи генератор паролів або команду openssl rand -hex 32. Цей ключ використовується для криптографічних операцій.
  • SITE_ROOT: Вкажіть повний URL вашого Healthchecks.io-інстансу, наприклад, https://monitor.yourdomain.com. Це важливо для коректної роботи посилань у сповіщеннях та у веб-інтерфейсі.
  • DB_HOST, DB_NAME, DB_USER, DB_PASS: Використовуйте значення за замовчуванням з docker-compose.yml (зазвичай db, hc, hc, hc), але ОБОВ'ЯЗКОВО змініть DB_PASS на надійний випадковий пароль.
  • EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, DEFAULT_FROM_EMAIL: Налаштуйте ці параметри для надсилання сповіщень електронною поштою. Використовуйте дані вашого SMTP-провайдера. Якщо ви не налаштуєте це, Healthchecks.io не зможе надсилати сповіщення.
  • PING_KEY: Згенеруйте унікальний ключ (наприклад, UUID), який буде використовуватися для авторизації при надсиланні пінгів, якщо ви хочете посилити безпеку. Якщо не вказати, використовується внутрішній механізм.

Приклад відредагованих рядків у .env:


SECRET_KEY='your_very_long_and_random_secret_key_here_e.g._openssl_rand_hex_32_output'
SITE_ROOT='https://monitor.yourdomain.com'

DB_HOST=db
DB_NAME=hc
DB_USER=hc
DB_PASSWORD='your_strong_db_password_here'

EMAIL_HOST=smtp.mailtrap.io
EMAIL_PORT=2525
EMAIL_HOST_USER=your_smtp_username
EMAIL_HOST_PASSWORD=your_smtp_password
EMAIL_USE_TLS=True
[email protected]

PING_KEY='your_optional_ping_key_uuid'

Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X).

4. Ініціалізація бази даних

Перед першим запуском Healthchecks.io необхідно ініціалізувати базу даних та застосувати міграції.


# Запуск контейнера бази даних та виконання міграцій
docker compose run --rm web python manage.py migrate

Ця команда запускає контейнер web, виконує команду python manage.py migrate для створення необхідних таблиць у базі даних, а потім видаляє контейнер (--rm).

5. Створення суперкористувача

Для доступу до адміністративної панелі Healthchecks.io необхідно створити обліковий запис суперкористувача.


# Запуск контейнера web та створення суперкористувача
docker compose run --rm web python manage.py createsuperuser

Вам буде запропоновано ввести ім'я користувача, адресу електронної пошти та пароль. Використовуйте надійний пароль.

6. Запуск Healthchecks.io

Тепер можна запустити всі сервіси Healthchecks.io у фоновому режимі.


# Запуск усіх сервісів у фоновому режимі
docker compose up -d

Перевірте, що контейнери запущені:


# Перевірка статусу запущених контейнерів
docker compose ps

Ви повинні побачити статуси Up для контейнерів db, redis та web.

На цьому етапі Healthchecks.io запущений і доступний на порту 8000 всередині Docker-мережі. Наступний крок — налаштувати веб-сервер Caddy для доступу ззовні та HTTPS.

Конфігурація

Після встановлення базових компонентів Healthchecks.io необхідно налаштувати зовнішній доступ до застосунку через доменне ім'я та забезпечити безпеку з'єднання за допомогою HTTPS. Ми будемо використовувати Caddy — сучасний веб-сервер, який автоматично керує сертифікатами Let's Encrypt.

Важливе примітка: Перш ніж продовжити, переконайтеся, що ваш домен (наприклад, monitor.yourdomain.com) вказує на IP-адресу вашого VPS. Додайте відповідний A-запис у налаштуваннях DNS вашого доменного реєстратора.

1. Встановлення Caddy

Caddy можна встановити з офіційного репозиторію. Це забезпечить актуальні версії та простоту оновлень.


# Встановлення залежностей для додавання репозиторію Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Додавання GPG-ключа Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Додавання репозиторію Caddy
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Оновлення списку пакетів
sudo apt update

# Встановлення Caddy (актуальна версія на 2026 рік)
sudo apt install caddy -y

# Перевірка версії Caddy
caddy version

Очікувана версія: Caddy 2.x.x+.

2. Налаштування Caddyfile

Caddyfile — це основний файл конфігурації Caddy. Створимо його для проксіювання запитів до нашого контейнера Healthchecks.io.


# Відкриття файлу Caddyfile для редагування
sudo nano /etc/caddy/Caddyfile

Видаліть весь існуючий вміст і додайте наступну конфігурацію, замінивши monitor.yourdomain.com на ваш реальний домен:


monitor.yourdomain.com {
    # Проксіювання всіх запитів до контейнера Healthchecks.io
    reverse_proxy 127.0.0.1:8000 {
        # Заголовки для коректної роботи проксіювання
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Увімкнення стиснення (опціонально, але рекомендується)
    encode gzip zstd

    # Логування доступу (опціонально)
    log {
        output file /var/log/caddy/access.log
        format json
    }

    # Обробка помилок (опціонально)
    handle_errors {
        respond "{err.status_code} {err.status_text}" {err.status_code}
    }
}

Пояснення:

  • monitor.yourdomain.com: Вказує домен, для якого застосовується ця конфігурація. Caddy автоматично отримає для нього HTTPS-сертифікат.
  • reverse_proxy 127.0.0.1:8000: Перенаправляє всі вхідні запити на локальний порт 8000, де запущено Healthchecks.io (всередині Docker-мережі він доступний через 127.0.0.1, якщо в docker-compose.yml вказано ports: - "127.0.0.1:8000:8000").
  • header_up ...: Передає оригінальні заголовки хоста, IP-адреси та схеми протоколу в Healthchecks.io, що важливо для коректної роботи застосунку, особливо при генерації посилань.

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).

3. Створення директорії для логів Caddy

Якщо ви увімкнули логування в Caddyfile, переконайтеся, що директорія для логів існує і Caddy має до неї доступ.


# Створення директорії для логів Caddy
sudo mkdir -p /var/log/caddy

# Встановлення правильних прав доступу
sudo chown caddy:caddy /var/log/caddy

4. Перезапуск Caddy

Застосуйте нову конфігурацію, перезапустивши службу Caddy.


# Перевірка конфігурації Caddyfile на помилки
sudo caddy validate --config /etc/caddy/Caddyfile

# Перезапуск служби Caddy
sudo systemctl restart caddy

# Переконайтеся, що Caddy запущений і працює
sudo systemctl status caddy

У виводі systemctl status caddy ви повинні побачити active (running).

5. Налаштування брандмауера для Caddy

Ми вже відкрили порти 80 і 443 на етапі підготовки сервера, але якщо ви цього не зробили, переконайтеся, що вони відкриті.


# Дозволити HTTP (порт 80)
sudo ufw allow 80/tcp

# Дозволити HTTPS (порт 443)
sudo ufw allow 443/tcp

# Перезавантажити UFW, якщо вносили зміни
sudo ufw reload

6. Перевірка працездатності

Тепер ви можете перевірити доступність Healthchecks.io через ваш домен.

  • Через браузер: Відкрийте https://monitor.yourdomain.com у вашому веб-браузері. Ви повинні побачити сторінку входу Healthchecks.io.
  • Через curl на сервері:

# Перевірка доступності через HTTPS
curl -I https://monitor.yourdomain.com

Ви повинні побачити HTTP-заголовки відповіді, включаючи HTTP/2 200 та заголовки, що вказують на Healthchecks.io.

  • Перевірка логів Caddy:

# Перегляд логів Caddy
sudo journalctl -u caddy -f
# Або якщо налаштували у файл:
sudo tail -f /var/log/caddy/access.log

Ви повинні побачити записи про вхідні запити та успішні відповіді.

Якщо все налаштовано правильно, Healthchecks.io має бути повністю доступний через ваш домен із захищеним HTTPS-з'єднанням. Тепер ви можете увійти, використовуючи створеного раніше суперкористувача, і почати додавати свої перші перевірки.

Конфігурація

Резервне копіювання та обслуговування

Регулярне резервне копіювання та своєчасне обслуговування є запорукою надійності будь-якої системи. Healthchecks.io не виняток. У цьому розділі ми розглянемо, що саме потрібно бекапити, як автоматизувати процес та як підтримувати систему в актуальному стані.

1. Що бекапити

Для повного відновлення Healthchecks.io вам потрібно буде зберегти три основні типи даних:

  • База даних PostgreSQL: Містить усі ваші перевірки, пінги, налаштування користувачів, історію подій та сповіщень. Це найкритичніший компонент.
  • Файл конфігурації .env: Містить секретний ключ, налаштування SMTP, ключі API та інші важливі параметри.
  • Конфігурація Caddyfile: Хоча його легко відтворити, збереження поточної версії може заощадити час при відновленні.

2. Простий скрипт автобекапу

Створимо простий скрипт, який буде виконувати дамп бази даних та копіювати файли конфігурації.


# Створення директорії для скриптів бекапу
mkdir -p ~/backups
nano ~/backups/backup_healthchecks.sh

Додайте наступний вміст у файл backup_healthchecks.sh. Замініть /path/to/healthchecks на фактичний шлях до вашої директорії Healthchecks.io (наприклад, /home/newuser/healthchecks).


#!/bin/bash

# Каталог, де знаходяться файли Healthchecks.io
HEALTHCHECKS_DIR="/home/newuser/healthchecks"
# Каталог для зберігання бекапів
BACKUP_DIR="/home/newuser/backups/healthchecks_data"
# Ім'я файлу дампу бази даних
DB_DUMP_FILE="healthchecks_db_$(date +%Y%m%d_%H%M%S).sql.gz"
# Кількість днів для зберігання локальних бекапів
RETENTION_DAYS=7

# Створення директорії для бекапів, якщо її немає
mkdir -p "${BACKUP_DIR}"

echo "--- Починаємо процес резервного копіювання Healthchecks.io ---"

# 1. Бекап бази даних PostgreSQL
echo "Дампінг бази даних PostgreSQL..."
docker compose -f "${HEALTHCHECKS_DIR}/docker-compose.yml" exec -T db pg_dumpall -U hc | gzip > "${BACKUP_DIR}/${DB_DUMP_FILE}"

if [ $? -eq 0 ]; then
    echo "База даних успішно збережена в ${BACKUP_DIR}/${DB_DUMP_FILE}"
else
    echo "ПОМИЛКА: Не вдалося зберегти базу даних."
    exit 1
fi

# 2. Копіювання файлу .env
echo "Копіювання файлу .env..."
cp "${HEALTHCHECKS_DIR}/.env" "${BACKUP_DIR}/.env_$(date +%Y%m%d_%H%M%S)"

if [ $? -eq 0 ]; then
    echo "Файл .env успішно скопійовано."
else
    echo "ПОМИЛКА: Не вдалося скопіювати файл .env."
fi

# 3. Копіювання Caddyfile
echo "Копіювання Caddyfile..."
sudo cp /etc/caddy/Caddyfile "${BACKUP_DIR}/Caddyfile_$(date +%Y%m%d_%H%M%S)"

if [ $? -eq 0 ]; then
    echo "Caddyfile успішно скопійовано."
else
    echo "ПОМИЛКА: Не вдалося скопіювати Caddyfile."
fi

# 4. Видалення старих бекапів (старше RETENTION_DAYS)
echo "Видалення старих бекапів (старше ${RETENTION_DAYS} днів)..."
find "${BACKUP_DIR}" -type f -name "healthchecks_db_*.sql.gz" -mtime +"${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name ".env_*" -mtime +"${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name "Caddyfile_*" -mtime +"${RETENTION_DAYS}" -delete
echo "Старі бекапи видалено."

echo "--- Процес резервного копіювання завершено ---"

Зробіть скрипт виконуваним:


chmod +x ~/backups/backup_healthchecks.sh

3. Куди складати бекапи (зовнішнє сховище)

Зберігання бекапів на тому ж сервері, що й оригінальні дані, вкрай ризиковано. У разі виходу з ладу сервера або втрати даних, ви втратите й бекапи. Обов'язково налаштуйте копіювання бекапів у зовнішнє, географічно віддалене сховище:

  • S3-сумісне сховище (AWS S3, DigitalOcean Spaces, Backblaze B2): Найнадійніший та масштабований варіант. Використовуйте awscli або rclone для автоматичної синхронізації.
  • Окремий VPS: Ви можете налаштувати другий, дешевший VPS та використовувати rsync або scp для копіювання бекапів по SSH.
  • NFS/SMB Share: Якщо у вас є мережеве сховище, можна монтувати його та копіювати туди файли.

Приклад додавання синхронізації з S3 за допомогою awscli (передбачається, що awscli встановлено та налаштовано):


# Додайте у ваш скрипт backup_healthchecks.sh після секції "Видалення старих бекапів":
echo "Синхронізація бекапів з S3..."
/usr/local/bin/aws s3 sync "${BACKUP_DIR}" s3://your-s3-bucket-name/healthchecks/
if [ $? -eq 0 ]; then
    echo "Бекапи успішно синхронізовані з S3."
else
    echo "ПОМИЛКА: Не вдалося синхронізувати бекапи з S3."
fi

Не забудьте налаштувати awscli на сервері з відповідними обліковими даними та правами доступу до вашого S3-бакету.

4. Автоматизація з Cron

Додайте скрипт бекапу в Cron для автоматичного виконання. Наприклад, для щоденного бекапу о 03:00 ночі:


# Відкриття crontab для поточного користувача
crontab -e

Додайте наступний рядок у кінець файлу:


0 3 * * * /home/newuser/backups/backup_healthchecks.sh >> /home/newuser/backups/backup.log 2>&1

Цей рядок запускає скрипт щодня о 03:00 та перенаправляє весь вивід (включаючи помилки) у файл backup.log для подальшої перевірки.

5. Оновлення: Rolling vs Maintenance Window

Регулярні оновлення критично важливі для безпеки та отримання нових функцій.

  • Оновлення ОС: Рекомендується виконувати раз на місяць.
    
    sudo apt update && sudo apt upgrade -y
    sudo apt autoremove -y && sudo apt clean
    
  • Оновлення Docker-контейнерів (Healthchecks.io, PostgreSQL, Redis):

    Healthchecks.io оновлюється шляхом отримання нових образів Docker. Це можна робити без значного простою (rolling update), якщо ви використовуєте кілька екземплярів, але для одного VPS знадобиться коротке вікно обслуговування.

    
    cd ~/healthchecks
    # Зупинка сервісів
    docker compose down
    
    # Отримання останніх образів
    docker compose pull
    
    # Запуск сервісів з новими образами
    docker compose up -d
    
    # Видалення старих, невикористовуваних образів та томів
    docker system prune -f
    docker volume prune -f
    

    Рекомендується виконувати ці кроки у заздалегідь визначене вікно обслуговування, щоб мінімізувати вплив на користувачів. Перед оновленням завжди перевіряйте офіційну документацію Healthchecks.io на предмет змін у конфігурації або міграцій бази даних, які можуть вимагати додаткових кроків.

Пам'ятайте, що регулярне тестування процесу відновлення з бекапів так само важливе, як і саме створення бекапів. Це гарантує, що у випадку збою ви зможете швидко відновити свою систему.

Вирішення проблем + FAQ

Навіть при найретельнішому налаштуванні можуть виникнути проблеми. Цей розділ допоможе вам діагностувати та вирішити найпоширеніші неполадки, а також відповість на часто задавані питання.

Не можу отримати доступ до Healthchecks.io через браузер. Що перевіряти?

Якщо ви не можете відкрити веб-інтерфейс Healthchecks.io за вашим доменним ім'ям (наприклад, https://monitor.yourdomain.com), перевірте наступне:

  1. DNS-запис: Переконайтеся, що A-запис вашого домену коректно вказує на IP-адресу вашого VPS. Використовуйте dig monitor.yourdomain.com або онлайн-інструменти.
  2. Брандмауер (UFW): Перевірте, чи відкриті порти 80 (HTTP) та 443 (HTTPS) на вашому VPS. Використовуйте sudo ufw status verbose.
  3. Caddy: Переконайтеся, що служба Caddy запущена (sudo systemctl status caddy) і що його конфігураційний файл (/etc/caddy/Caddyfile) коректно налаштований та вказує на правильний порт (127.0.0.1:8000). Перевірте логи Caddy: sudo journalctl -u caddy -f.
  4. Docker-контейнери: Переконайтеся, що всі контейнери Healthchecks.io запущені: cd ~/healthchecks && docker compose ps. Усі контейнери (db, redis, web) повинні бути в статусі Up.
  5. SITE_ROOT в .env: Переконайтеся, що змінна SITE_ROOT у файлі .env встановлена на повний HTTPS-URL вашого домену (наприклад, https://monitor.yourdomain.com).

Контейнер Healthchecks.io (web) не запускається або постійно перезапускається.

Це зазвичай вказує на проблему з конфігурацією або залежностями. Перевірте логи контейнера:


cd ~/healthchecks
docker compose logs web

Шукайте повідомлення про помилки у виводі. Типові причини:

  • Проблеми з базою даних: Невірні облікові дані в .env (DB_USER, DB_PASSWORD), або контейнер db не запущений.
  • Некоректний SECRET_KEY: SECRET_KEY повинен бути довгим, випадковим рядком.
  • Проблеми з міграціями: Переконайтеся, що python manage.py migrate було виконано успішно.
  • Проблеми з Redis: Контейнер redis не запущений або недоступний.

Не надходять сповіщення електронною поштою.

Перевірте наступні пункти:

  1. Налаштування SMTP в .env: Переконайтеся, що всі змінні EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS та DEFAULT_FROM_EMAIL у файлі .env налаштовані коректно для вашого SMTP-провайдера.
  2. Тестовий лист: Спробуйте відправити тестовий лист з консолі Healthchecks.io:
    
    cd ~/healthchecks
    docker compose run --rm web python manage.py sendtestemail [email protected]
                

    Це повинно показати помилки відправки, якщо вони є.

  3. Брандмауер VPS: Переконайтеся, що ваш VPS може встановлювати вихідні з'єднання на порт SMTP вашого провайдера (зазвичай 587 або 465).
  4. Спам-фільтри: Перевірте папку "Спам" у вашій поштовій скриньці.

Пінги не реєструються в Healthchecks.io.

Якщо ваші завдання відправляють пінги, але Healthchecks.io їх не бачить:

  1. URL пінгу: Переконайтеся, що URL, який використовує ваше завдання для відправки пінгу, абсолютно точний (включаючи UUID перевірки). Він повинен бути у форматі https://monitor.yourdomain.com/ping/YOUR_CHECK_UUID/.
  2. Мережева доступність: Переконайтеся, що сервер, який відправляє пінг, може досягти вашого інстансу Healthchecks.io. Перевірте за допомогою curl -I https://monitor.yourdomain.com з сервера, що відправляє пінг.
  3. PING_KEY: Якщо ви встановили змінну PING_KEY у .env, переконайтеся, що ваші завдання відправляють цей ключ у заголовку X-Ping-Key.
  4. Часовий пояс: Переконайтеся, що часові пояси на VPS та в Healthchecks.io налаштовані коректно, щоб уникнути проблем з розкладом.

Який VPS-конфіг мінімально підійде?

Для базового використання Healthchecks.io, моніторингу десятків або навіть пари сотень завдань, мінімально підійде VPS з 1 vCPU, 1-2 ГБ RAM та 20-40 ГБ SSD. Цього буде достатньо для роботи операційної системи, Docker, Healthchecks.io та його бази даних. Однак, для більшої стабільності та можливості зростання рекомендується 2 vCPU, 4 ГБ RAM та 60-80 ГБ SSD.

Що вибрати — VPS чи dedicated для цього завдання?

Для більшості користувачів та сценаріїв моніторингу Healthchecks.io на VPS є оптимальним рішенням. Він економічно ефективний, достатньо продуктивний та забезпечує необхідний рівень ізоляції. Dedicated-сервери виправдані лише в дуже специфічних випадках: при моніторингу сотень тисяч або мільйонів завдань, коли потрібна максимальна продуктивність та повна відсутність "сусідського шуму", або за наявності суворих вимог до фізичної ізоляції обладнання.

Висновки та наступні кроки

Вітаємо! Ви успішно встановили та налаштували Healthchecks.io на вашому VPS, забезпечивши надійний моніторинг для ваших Cron-завдань та фонових процесів. Тепер у вас є повний контроль над вашою системою моніторингу, що забезпечує своєчасні сповіщення про будь-які збої або затримки в роботі ваших критично важливих завдань. Це значно підвищить надійність вашої інфраструктури та дозволить оперативно реагувати на проблеми.

Наступні кроки

  1. Інтеграція зі сповіщеннями: Налаштуйте додаткові канали сповіщень Healthchecks.io, такі як Slack, Telegram, PagerDuty або користувацькі вебхуки, щоб отримувати сповіщення найбільш зручним для вас способом.
  2. Додаткові перевірки: Почніть додавати всі ваші періодичні завдання в Healthchecks.io. Розгляньте моніторинг не тільки скриптів, а й регулярних операцій, таких як оновлення кешів, перевірка дискового простору або виконання очищення логів.
  3. Моніторинг ресурсів сервера: Для повного огляду стану вашої системи розгляньте встановлення додаткового інструменту моніторингу ресурсів сервера, такого як Netdata або Prometheus/Grafana, щоб відстежувати CPU, RAM, диск та мережу вашого VPS.

Поділитися цим записом:

встановлення healthchecks.io на VPS: моніторинг cron-завдань та фонових процесів
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.