Мониторинг сайтов с помощью Uptime Kuma ("self-hosted UpTimeRobot")
Мониторинг и алертинг серверов — важные инструменты для обеспечения бесперебойной работы веб-сайтов и сервисов. Проблемы могут возникну��ь в любой момент: перегрузка сервера, сбои хостинга или ошибки в коде. Хорошая система мониторинга не только вовремя обнаруживает сбои, но и предупреждает о потенциальных проблемах — например, если сайт начал грузиться медленнее или часть запросов завершается с ошибками. Чем раньше вы выявите проблему, тем быстрее сможете её устранить, минимизировав неудобства для пользователей. Существует множество решений для мониторинга, например UpTimeRobot.
Мы же сегодня с вами рассмотрим его open-source альтернативу - Uptime Kuma. Его автором является Louis Lam, а сам проект расположен в GitHub. Это простой в настройке, но мощный инструмент, который позволяет в реальном времени отслеживать работу сайтов, API и серверов, мгновенно оповещая о любых сбоях. В отличие от платных аналогов, это решение, которое можно развернуть на собственном сервере, сохраняя полный контроль над данными. Uptime Kuma поддерживает различные типы проверок (HTTP, TCP, DNS, ping) и интеграции с Telegram, Slack, Discord и другими мессенджерами.
Для работы Uptime Kuma подойдет любой сервер — можно использовать недорогой VPS или даже домашний компьютер в локальной сети. Однако важно учесть один нюанс: если развернуть мониторинг на той же машине, где работают основные сервисы, то при её отключении вы останетесь без уведомлений. Поэтому идеальный вариант — выделить для Kuma отдельный сервер или VPS в отдельной сети. Так вы всегда будете в курсе проблем, даже если основной хостинг перестанет работать.
В данной статье мы рассмотрим развертывание Kuma в Docker, по этому далее в статье у нас будет инструкция для Ubuntu 24.02 LTS, с предустановленным docker. У меня это виртуальная машина в Hyper-V. Приступим!
Разворачиваем Kuma
Подключаемся к своему серверу через PuTTy:
Создаем папку для нашего сервиса:
Создаем docker-compose.yml файл с одним сервисом — Uptime Kuma. Используем порт 3001 и Bind Mount для сохранения данных:
Создаем каталог для данных (который прописали на предыдущем шаге в volumes):
Переходим в каталог сервиса:
Запускаем сервис. Docker скачает необходимые образы и запустит контейнер:
Открываем веб-интерфейс в браузере (в моем случае — 192.168.0.110:3001). Uptime Kuma предложит выполнить первоначальную настройку: создать пользователя и выбрать язык:
После настройки мы попадаем на главную страницу Uptime Kuma (её функционал мы рассмотрим позже):
Настраиваем доменное имя и HTTPS
Работать с IP-адресом не всегда удобно, поэтому лучше настроить доступ через доменное имя. Вариантов реализации много — можно использовать локальную DNS, hosts-файл или зарегистрировать настоящий домен. В моём случае я просто добавлю запись kuma.demo в hosts-файл на своём компьютере, но вы можете выбрать любой другой подходящий способ:
Для защиты данных нам нужно организовать безопасное HTTPS-соединение. Для этого мы поставим перед Uptime Kuma веб-сервер Caddy — он автоматически получает SSL-сертификаты и шифрует трафик. Я выбрал Caddy вместо nginx за его простоту и удобство конфигурации. В обновлённом docker-compose.yml обратите внимание на важные изменения:
- Убрана публикация портов Uptime Kuma (cервисы внутри одного compose-файла могут общаться между собой по именам контейнеров без проброса портов)
- Весь внешний трафик теперь идёт через Caddy
Создаем каталоги для Caddy:
- sudo mkdir -p /opt/docker/uptime-kuma/caddy/etc/caddy
- sudo mkdir -p /opt/docker/uptime-kuma/caddy/data
- sudo mkdir -p /opt/docker/uptime-kuma/caddy/config
Создаем файл Caddyfile с конфигурацией:
Перезапускаем сервисы. При редактировании docker-compose.yml, он сам поймет что обновилось и изменилось и перезапустит/запустит только новые контейнеры:
Теперь у нас есть полностью настроенный экземпляр Uptime Kuma, доступный по доменному имени с поддержкой HTTPS. В следующей статье разберем, как добавить сайты для мониторинга и настроить уведомления
Итог
Мы развернули и настроили собственный экземпляр Uptime Kuma. Это потребовало некоторых усилий, но в результате мы получили мощный инструмент мониторинга, к тому же бесплатный (если не считать стоимость VPS и домена).
Если вам не хочется заниматься самостоятельной настройкой, можно воспользоваться Telegram-ботом @KumaCloudBot, который развернет экземпляр за 20 секунд без необходимости настройки домена и VPS.