Установка и настройка Uptime Kuma: self-hosted мониторинг сайтов за 5 минут

Uptime Kuma: установка, настройка мониторинга сайта


⚡ Быстрый ответ

Одна команда — и мониторинг работает:

docker run -d --restart=always -p 3001:3001 \
  -v uptime-kuma:/app/data --name uptime-kuma \
  louislam/uptime-kuma

Открой http://ВАШ-IP:3001, создай аккаунт, добавь первый монитор. Telegram-алерты — в Settings → Notifications. Всё.

Что нужно: VPS с Linux (Ubuntu 20.04/22.04+), Docker, 10 минут времени. RAM: хватит 512 MB.

1. Диагноз: «сайт упал — узнали от клиента»

Сервер лёг в 03:47. Поднялся в 05:20 по крону. Ты узнал в 09:15 — от клиента, который не смог оформить заказ. И написал в Google-отзывы. Знакомо?

Это не невезение. Это отсутствие мониторинга. И это лечится за один вечер.

Что получишь из этой статьи:

  • Uptime Kuma в Docker — работает через 2 минуты
  • Telegram-алерты — настроены, протестированы
  • Мониторинг сайтов, API, Docker-контейнеров, cron-задач
  • Публичная статус-страница для клиентов
  • Nginx reverse proxy + SSL — доступ по HTTPS
  • Troubleshooting — если что-то пошло не так

Сколько времени: 15–30 минут от нуля до работающего алертинга.

2. Почему Uptime Kuma, а не Zabbix / UptimeRobot

Вопрос честный. Инструментов много. Вот почему Kuma закрывает 80% задач SMB и фриланса быстрее остальных.

Критерий Uptime Kuma Zabbix Prometheus + Grafana UptimeRobot
Время установки 2–5 минут 1–3 часа 2–4 часа 0 (SaaS)
Self-hosted Да Да Да Нет
Open Source Да (MIT) Да (GPL) Да (Apache) Нет
Порог вхождения Низкий Высокий Очень высокий Очень низкий
Метрики CPU/RAM Нет Да Да Нет
Статус-страница Встроена Нет Через плагин Да (платно)
Telegram-алерты Нативно Настройка Alertmanager Да
RAM ~50–100 MB ~300–500 MB ~500 MB+ 0 (SaaS)
Конфиденциальность Полная Полная Полная Данные в облаке
Цена Бесплатно Бесплатно Бесплатно От $7/мес
По факту: Zabbix нужен от 50+ серверов с метриками. Prometheus — когда ты уже в Kubernetes и хочешь дашборды. Uptime Kuma — когда тебе нужно знать «живой / мёртвый» с алертом в Telegram. Разные задачи — разные инструменты.

Что умеет Uptime Kuma: HTTP/HTTPS, TCP Port, Ping, DNS, Docker Container, Push (для cron), Keyword в ответе, gRPC, игровые серверы. Уведомления — Telegram, Slack, Email, Discord, Webhook, PagerDuty и ещё 90+ интеграций. Данные — локально в SQLite, никаких облаков.

3. Рецепт: установка Uptime Kuma шаг за шагом

Подготовка: установка Docker

Если Docker ещё не стоит — ставим:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Проверь:

docker --version
# Docker version 24.x.x — хорошо

Шаг 1. Запуск через Docker (рекомендуется)

Одна команда — и мониторинг работает:

docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma
Разбор флагов:
--restart=always — поднимется после перезагрузки сервера автоматически.
-v uptime-kuma:/app/data — именованный том. Удалишь контейнер — данные останутся.
-p 3001:3001 — порт. После запуска открой http://ВАШ-IP:3001.

Что должно получиться:

docker ps | grep uptime-kuma
# uptime-kuma   louislam/uptime-kuma   ... Up X seconds

Через 20–30 секунд открывай браузер: http://ВАШ-IP:3001. Форма регистрации администратора — создай логин и пароль.

Шаг 2. Docker Compose (если любишь порядок)

mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
nano docker-compose.yml

Содержимое:

version: "3"
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
docker compose up -d

Плюс этого варианта: папка ./data рядом с compose-файлом. Бэкап — просто копируешь директорию /opt/uptime-kuma.

Шаг 3. Первый монитор — сайт по HTTP(S)

Нажми «Add New Monitor». Заполни:

  • Monitor Type: HTTP(S)
  • Friendly Name: например, client-site.ru
  • URL: https://client-site.ru
  • Heartbeat Interval: 60 секунд
  • Retries: 3 — три подряд ошибки перед алертом
  • Certificate Expiry Notification: включи, поставь 30 дней

Сохрани. Через минуту монитор зелёный — сайт живой.

4. Примеры мониторинга: 5 реальных кейсов

Мониторинг MikroTik (Ping + Winbox Port)

Два монитора на роутер:

Поле Монитор 1 — Ping Монитор 2 — Winbox
Monitor Type Ping TCP Port
Hostname 192.168.1.1 192.168.1.1
Port 8291
Interval 30 сек 60 сек
Uptime Kuma мониторит внутренние адреса напрямую — без внешнего доступа. Через VPN тоже работает. Именно для этого self-hosted и нужен.

Мониторинг API с проверкой ответа

Сервер отвечает 200, но приложение внутри сломалось — классика. Используй Keyword:

  • Monitor Type: HTTP(S) — Keyword
  • URL: https://api.your-service.ru/health
  • Keyword: "status":"ok"

Нет ключевого слова в ответе — монитор красный. Даже если HTTP 200.

Мониторинг Docker-контейнера

Чтобы Kuma видела контейнеры — пробрось Docker-сокет. В docker-compose.yml добавь:

volumes:
  - ./data:/app/data
  - /var/run/docker.sock:/var/run/docker.sock:ro

Потом в Settings → Docker Hosts → добавь локальный сокет. Тип монитора: Docker Container, выбери имя контейнера.

Безопасность: :ro — read-only. Kuma читает статус, но не управляет контейнерами. Всё равно — не открывай сокет наружу.

Push-мониторинг для cron-задач

Cron выполняется — но ты не знаешь, выполняется ли на самом деле. Push-монитор решает это элегантно.

Создай монитор типа Push, интервал — 86400 секунд (24 часа). Kuma выдаст URL вида:

https://kuma.your-domain.ru/api/push/abc123xyz

Добавь в bash-скрипт бэкапа последней строкой:

#!/bin/bash
# ... твой <a class="wpil_keyword_link" title="Скрипты" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="1314">скрипт</a> бэкапа ...

# Пинг после успешного выполнения:
curl -fsS "https://kuma.your-domain.ru/api/push/abc123xyz?status=up&msg=OK" > /dev/null

Скрипт упал до этой строки — Kuma не получила пинг — через 24 часа алерт. Без агентов, без сложности.

5. Настройка Telegram-алертов: пошагово

Создай бота через @BotFather

# В Telegram:
# 1. Найди @BotFather
# 2. /newbot
# 3. Введи имя: MyMonitoringBot
# 4. Введи username: my_monitoring_bot
# 5. Получи токен вида: 1234567890:ABCdefGHIjklMNO...

Получи Chat ID

# Напиши боту /start, потом открой в браузере:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates

# В ответе найди: "chat":{"id": 123456789}
# Для группового чата id будет отрицательным: -1001234567890

Подключи в Uptime Kuma

  1. Settings → Notifications → Add Notification
  2. Тип: Telegram
  3. Вставь Bot Token и Chat ID
  4. Нажми «Test» — должно прийти сообщение
  5. Сохрани и назначь на мониторы
Всегда жми Test. Неработающий алерт — хуже его отсутствия. Думаешь, что защищён. А оказывается — токен устарел три недели назад.

Email (SMTP) и Webhook

В Notifications → Email (SMTP):

  • SMTP Host: smtp.gmail.com
  • Port: 587 (TLS)
  • Username / Password: email + пароль приложения Google

Для Slack, Teams, любых систем — тип Webhook, вставь Incoming Webhook URL.

Совет из практики: настрой два канала — Telegram (быстро) + Email (резерв). Telegram упал, бота заблокировали, телефон разряжен — email придёт в любом случае. PagerDuty или Pushover добавь для критичных сервисов — будят даже при режиме «Не беспокоить».

6. Публичная статус-страница для клиентов

Статус-страница — это то, что отличает профи от «у нас всё хорошо, честно».

  1. Status Page → New Status Page
  2. Задай slug: status → страница будет по адресу /status/status
  3. Добавь нужные мониторы
  4. Сохрани, открой ссылку

Что можно кастомизировать: заголовок, описание, логотип, история инцидентов за 90 дней, кастомный CSS, собственный домен (status.client-site.ru) через reverse proxy.

Реальный кейс

Ночью лёг сервер на 41 минуту. Утром злой клиент. Вместо оправданий ты отправляешь ссылку: инцидент зафиксирован в 03:47, восстановлено в 04:28. Это называется прозрачность. Клиенты ценят её больше, чем идеальный аптайм.

7. Nginx Reverse Proxy + SSL: Kuma по HTTPS

Открывать Kuma по HTTP на порту 3001 в продакшне — плохая идея. Она знает адреса всех твоих серверов и токены уведомлений.

Установка Nginx и Certbot

sudo apt install nginx certbot python3-certbot-nginx -y

Конфиг Nginx с WebSocket-поддержкой

sudo nano /etc/nginx/sites-available/uptime-kuma

Содержимое:

server {
    listen 80;
    server_name kuma.your-domain.ru;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name kuma.your-domain.ru;

    ssl_certificate /etc/letsencrypt/live/kuma.your-domain.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kuma.your-domain.ru/privkey.pem;

    location / {
        proxy_pass         http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d kuma.your-domain.ru

Что должно получиться: Kuma открывается по https://kuma.your-domain.ru с зелёным замком. HTTP автоматически редиректит на HTTPS.

Параноидальный вариант: закрой Kuma вообще от интернета. Доступ только через WireGuard или OpenVPN. В секции location / добавь:
allow 10.0.0.0/8; — твоя VPN-подсеть
deny all;

8. Проверка: что смотреть после установки

# Контейнер запущен:
docker ps | grep uptime-kuma

# Логи — если что-то не так:
docker logs uptime-kuma --tail 50

# Потребление ресурсов:
docker stats uptime-kuma --no-stream

# Веб доступен:
curl -I http://localhost:3001
# HTTP/1.1 200 OK — хорошо

# SSL работает (после настройки Nginx):
curl -I https://kuma.your-domain.ru
# HTTP/2 200 — отлично

Проверь в интерфейсе:

  • Мониторы зелёные → сайты отвечают
  • Settings → Notifications → Test → пришло сообщение в Telegram
  • Status Page открывается без авторизации

9. Осложнения: troubleshooting Uptime Kuma

Ошибка / симптом Причина Решение Команда
Порт 3001 недоступен извне Firewall на VPS закрывает порт Открой порт или сразу настрой Nginx (рекомендуется) sudo ufw allow 3001/tcp
Telegram-алерты не приходят Неверный токен или chat_id. Бот не написал первым — нет обновлений Напиши боту /start, пересоздай уведомление, нажми Test curl https://api.telegram.org/bot<TOKEN>/getUpdates
WebSocket-ошибка в браузере после Nginx Не добавлены заголовки Upgrade/Connection Проверь конфиг Nginx — должны быть proxy_set_header Upgrade и Connection sudo nginx -t && sudo systemctl reload nginx
Контейнер перезапускается в петле Порт 3001 занят другим процессом Найди и останови процесс или смени порт sudo ss -tlnp | grep 3001
После обновления данные пропали Не использовался именованный том или volume не был примонтирован Данные в томе uptime-kuma — проверь docker volume inspect uptime-kuma
Монитор всегда красный, хотя сайт работает Сайт отдаёт редирект (301/302) или нестандартный код В настройках монитора добавь нужные коды в Accepted Status Codes Monitor → Edit → Accepted Status Codes: 200-302
Push-монитор не получает пинги URL недоступен с сервера, где выполняется cron. Или curl не установлен Проверь доступность URL с сервера скрипта curl -v "https://kuma.your-domain.ru/api/push/abc123"
Много ложных алертов ночью Retries = 1 или Retry Interval слишком мал — реагирует на сетевой шум Установи Retries: 3, Retry Interval: 20s Monitor → Edit → Retries: 3

Как смотреть логи

# Последние 100 строк:
docker logs uptime-kuma --tail 100

# В реальном времени:
docker logs uptime-kuma -f

# Ошибки Nginx (если настроен):
sudo tail -f /var/log/nginx/error.log

10. Альтернативы Uptime Kuma

Инструмент Когда использовать Плюсы Минусы
Uptime Kuma SMB, фриланс, 5–200 сервисов Быстро, просто, красиво Нет метрик CPU/RAM
Zabbix 50+ серверов, нужны агенты и метрики Мощные триггеры, SNMP, LDAP Долгая настройка, тяжёлый
Prometheus + Grafana Kubernetes, микросервисы, SRE-команды Метрики, алертинг, красивые дашборды Высокий порог, требует DevOps
Netdata Нужен real-time мониторинг ресурсов одного сервера Ставится за минуту, метрики в реальном времени Нет мониторинга внешних URL
UptimeRobot Нет своего сервера, нужно быстро Нулевая настройка Данные в облаке, ограничения бесплатного тарифа

Uptime Kuma + Netdata — хорошая связка: Kuma мониторит доступность сайтов и сервисов, Netdata — метрики самого сервера. Два инструмента, обе задачи закрыты.

Установка и настройка Zabbix: полный гайд Docker Compose: установка, команды и настройка контейнеров MikroTik для профессионалов: настройка с нуля до production Nginx Proxy Manager: конфигурация для веб-интерфейсов

11. Профилактика: как не сломать снова

Бэкап данных

# Бэкап именованного тома:
docker run --rm \
  -v uptime-kuma:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/kuma-backup-$(date +%Y%m%d).tar.gz /data

# Бэкап для docker-compose (папка ./data):
tar czf kuma-backup-$(date +%Y%m%d).tar.gz /opt/uptime-kuma/data

Поставь этот скрипт в cron. И — хорошая идея — настрой push-монитор в самой же Kuma для проверки выполнения бэкапа.

Обновление Uptime Kuma

docker pull louislam/uptime-kuma:1
docker stop uptime-kuma
docker rm uptime-kuma
docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:1

Данные в именованном томе — никуда не денутся. Весь процесс: 2–3 минуты.

Чеклист здорового мониторинга

  • Retries: 3, Retry Interval: 20s — не реагируй на сетевой шум
  • Два канала уведомлений: Telegram + Email
  • Раз в месяц нажимай Test на всех уведомлениях
  • SSL Expiry Notification: 30 дней — включён на всех HTTP-мониторах
  • Мониторишь не только главную, но и критичные эндпоинты: оплата, API, логин
  • Бэкап данных в cron — и push-монитор на него же

12. FAQ: часто задаваемые вопросы про Uptime Kuma

Бесплатен ли Uptime Kuma?

Да, полностью. Лицензия MIT. Никаких платных планов, никаких ограничений по количеству мониторов. Единственные расходы — VPS, на котором он живёт.

Сколько ресурсов потребляет Uptime Kuma?

При 50–100 мониторах — около 100–150 MB RAM, CPU близко к нулю в режиме ожидания. Работает на VPS с 512 MB без проблем.

Можно ли мониторить внутренние сервисы (не доступные из интернета)?

Да. Kuma работает из твоей сети и мониторит 192.168.x.x, внутренние базы, роутеры — всё, что доступно с сервера, где она запущена. Через VPN — тоже работает. Именно для этого self-hosted и нужен.

Почему Uptime Kuma не отправляет Telegram-уведомления?

Три причины: неверный токен, неверный chat_id, бот не получил /start от тебя (нет обновлений). Открой https://api.telegram.org/bot<TOKEN>/getUpdates — если пусто, напиши боту /start и обнови. Потом пересоздай уведомление в Kuma и нажми Test.

Как запустить несколько экземпляров Uptime Kuma для разных клиентов?

Запусти несколько контейнеров на разных портах (3001, 3002, 3003…) с разными томами данных. Nginx с разными поддоменами разграничивает доступ. Каждый экземпляр работает полностью независимо.

Что если нужны метрики CPU/RAM, а не только «живой/мёртвый»?

Uptime Kuma этого не умеет — и не должна. Рядом поставь Netdata (один контейнер, метрики в реальном времени) или Prometheus + Node Exporter. Uptime Kuma закрывает доступность. Netdata/Prometheus — ресурсы. Разные инструменты для разных задач.

Когда Uptime Kuma не подойдёт?

Когда нужны: триггеры по метрикам (CPU > 90% в течение 5 минут), RBAC с ролевым доступом, интеграция с LDAP/AD, мультитенантность на уровне платформы. В этих случаях смотри в сторону Zabbix, Grafana Enterprise или Datadog.

Итог: что сделали и что теперь работает

Ты прошёл путь от нулевого мониторинга до работающей системы за один вечер. Uptime Kuma в Docker, Telegram-алерты настроены и протестированы, статус-страница открывается по HTTPS с твоим доменом. Следующее падение ты узнаешь первым — не от клиента.

Дальше — по задаче. Нужны метрики сервера — ставь Netdata рядом. Выросли до 50+ серверов с агентами — смотри в сторону Zabbix. Kubernetes и микросервисы — Prometheus + Alertmanager. Но это уже другой гайд.

💬 Не заработало?

Пиши в комментарии. Укажи: вывод docker logs uptime-kuma --tail 50, что именно не работает (алерты, доступ, монитор). Разберёмся.

Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх