Сайт упал ночью, а узнали вы об этом от пользователей — знакомая история. Платные внешние сервисы решают задачу, но требуют подписки и передают данные третьей стороне. Uptime Kuma — открытая система мониторинга доступности, которую можно поднять на собственном сервере за десять минут. Она проверяет HTTP-адреса, порты и DNS, присылает уведомления в мессенджеры, строит публичные статус-страницы и хранит историю отклика. Разберём установку, настройку и подводные камни.
Что умеет Uptime Kuma
Основная единица — монитор. Это правило проверки: адрес, тип, интервал, таймаут и число повторов перед тревогой. Результаты складываются в локальную базу SQLite, а веб-интерфейс показывает графики доступности и времени ответа. Система ставится одним контейнером, не требует внешней базы и работает на слабом сервере или мини-ПК.
Из коробки доступны проверки HTTP и HTTPS, TCP-порта, ICMP-пинга, DNS-записей, ключевого слова на странице и push-сигналов от ваших скриптов. Есть уведомления о скором истечении TLS-сертификата, режим «перевёрнутой» проверки (когда ошибка означает норму), окна обслуживания и несколько пользователей с разными правами. Этого достаточно для домашней лаборатории, небольшого бизнеса и контроля собственных сайтов.
- HTTP(s) — код ответа и время отклика.
- TCP-порт — доступность базы или SSH.
- Ping — живость хоста в локальной сети.
Установка через Docker Compose
Понадобится хост с Docker и свободный порт. Наружу лучше не публиковать интерфейс напрямую, а поставить обратный прокси с HTTPS. Минимальный compose-файл выглядит так:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Europe/Moscow
Каталог ./data — это вся история и настройки, поэтому его нужно включить в резервное копирование. После запуска откройте http://127.0.0.1:3001 и создайте администратора. Если сервер удалённый, используйте SSH-туннель, а не открывайте порт в интернет до настройки пароля:
docker compose up -d
docker compose logs -f --tail 50
ssh -L 3001:127.0.0.1:3001 user@server
Первый монитор
Нажмите «Добавить монитор», задайте имя и адрес. Для сайта выберите тип HTTP(s) и укажите URL, для базы — TCP-порт, для маршрутизатора — пинг. Разумные значения по умолчанию: интервал 60 секунд, таймаут 10–15 секунд, два-три повтора. Слишком частые проверки нагружают и монитор, и наблюдаемый сервис, а слишком редкие превращают тревогу в запоздалое сообщение.
Проверьте, что видит сама система. Если Uptime Kuma живёт в контейнере, адрес localhost указывает на контейнер, а не на хост. Для сервисов на той же машине используйте имя контейнера, host.docker.internal с добавленной секцией extra_hosts или IP хоста в сети Docker. Это самая частая причина ложных тревог. Отдельно проверьте монитор по ключевому слову: он считает сервис живым только тогда, когда в ответе есть заданная строка, — удобно для страниц вида /health, которые возвращают «ok».
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' https://example.com
curl -sS --max-time 10 https://example.com/health
docker exec uptime-kuma getent hosts example.com
Уведомления
Раздел «Уведомления» поддерживает Telegram, электронную почту, вебхуки, ntfy, Gotify и другие каналы. Для Telegram нужен токен бота и идентификатор чата; для SMTP — хост, порт, логин и пароль приложения. После сохранения нажмите кнопку тестового сообщения: молчащая система мониторинга бесполезна.
Вебхук удобен для интеграции с собственными скриптами. Uptime Kuma отправляет POST с JSON, где есть имя монитора, статус, сообщение и время. На принимающей стороне можно создать задачу, записать событие в журнал или включить резервный канал связи. Не храните в вебхуке секреты в открытом виде — используйте отдельный эндпоинт с проверкой подписи или ограничением по IP.
Статус-страница
Публичная страница показывает выбранные мониторы без доступа к админке. Создайте её в разделе «Статус-страницы», добавьте группы и мониторы, задайте описание и тему. Ссылку можно отдать клиентам или повесить на сайт. Не включайте в публичный список внутренние сервисы: имена хостов и открытые порты — лишняя информация для посторонних.
Для HTTPS поставьте Uptime Kuma за Nginx. Важно пробросить заголовки обновления соединения, иначе живое обновление статусов может не работать:
server {
listen 443 ssl;
server_name status.example.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Обслуживание и резервные копии
Штатное резервное копирование есть в настройках: оно выгружает базу и конфигурацию в файл. Но одной копии мало — храните её вне сервера. Для согласованного снимка тома остановите контейнер на несколько секунд:
docker compose stop uptime-kuma
tar czf uptime-kuma-$(date +%F).tar.gz data/
docker compose start uptime-kuma
docker compose pull
docker compose up -d
Обновляйтесь осознанно: тег :1 фиксирует мажорную ветку, но внутри неё выходят новые версии. Перед обновлением прочитайте заметки к выпуску и сделайте копию. Если база большая, а мониторов много, стоит ограничить срок хранения heartbeat-записей в настройках — иначе файл SQLite растёт и интерфейс начинает тормозить.
Безопасность и ограничения
Сразу после установки создайте администратора, включите двухфакторную аутентификацию и ограничьте доступ к панели через обратный прокси или список разрешённых адресов. Доступ к панели даёт возможность удалить мониторы и увидеть внутренние адреса, поэтому публичный инстанс без HTTPS — плохая идея. Регулярно обновляйте образ: проект активно развивается, исправления безопасности выходят вместе с обычными релизами.
Честно об ограничениях: это одиночный сервер, без распределённых агентов и отказоустойчивости. Если упадёт сама машина с Uptime Kuma, вы не получите тревогу — для критичных систем нужен внешний наблюдатель. Нет сложных эскалаций и дежурств, а уведомления не повторяются бесконечно. Для домашних задач и малого бизнеса этого обычно достаточно, для крупной инфраструктуры смотрят в сторону более тяжёлых платформ.
Итог
Uptime Kuma — удачный компромисс между простотой и функциональностью. Один контейнер, понятный интерфейс, гибкие проверки и уведомления закрывают большинство задач личного и небольшого корпоративного мониторинга. Главное — правильно выбрать адреса проверки, настроить резервное копирование и не забыть, что система не сможет сообщить о собственной недоступности. Если это учесть, инструмент годами работает без внимания и вовремя предупреждает о проблемах.