Uptime Kuma
Свой мониторинг аптайма и статус-страница на собственном сервере: проверки HTTP, TCP, DNS, ключевого слова и срока SSL-сертификата, уведомления в 90+ каналов. Развернули на Fatmetal Cloud Server, засеяли мониторы и сняли замеры с живого стенда.
Вердикт
- нужен свой мониторинг сайтов и сервисов без лимитов SaaS на число проверок и интервал
- нужна публичная статус-страница вместо Statuspage.io
- хочется алерт о протухающем SSL-сертификате и падении сервиса в Telegram или ntfy
- нужны метрики нагрузки (CPU, RAM, диск) - это не про Uptime Kuma, тут Beszel или Prometheus
- нужен мониторинг из нескольких географических точек одновременно
- нужен полноценный APM и трейсинг запросов внутри приложения
Что это и какую задачу решает
Uptime Kuma - это self-hosted мониторинг доступности: он с заданным интервалом дергает ваши сайты и сервисы и показывает, живы ли они, как быстро отвечают и что происходит с SSL-сертификатом. По сути это своя замена облачным UptimeRobot, Pingdom и StatusCake, только без абонентской платы и без лимитов на число мониторов.
Проверки не ограничены пингом URL: есть HTTP(s) с проверкой кода и ключевого слова в ответе, TCP-порт, ping, запрос к DNS, срок действия SSL-сертификата, статус docker-контейнера, gRPC и другие. Когда монитор падает или сертификат подходит к концу, Uptime Kuma шлет уведомление - поддерживается больше 90 каналов, включая Telegram, ntfy, электронную почту, Slack и вебхуки. Поверх этого собирается публичная статус-страница, которую можно показывать пользователям.
Чем отличается от платных аналогов
Сравнение с облачными мониторингами по тому, что реально влияет на выбор.
| Параметр | Uptime Kuma | UptimeRobot / Pingdom |
|---|---|---|
| Модель цены | бесплатно, свой сервер | подписка, тариф растет с числом мониторов |
| Число мониторов | не ограничено | лимит на бесплатном плане |
| Минимальный интервал | от 20 секунд | 5 минут на бесплатном плане |
| Статус-страница | входит, без доплат | часто отдельный платный уровень |
| Где данные | на вашем сервере | в чужом облаке |
| Точки проверки | одна (ваш сервер) | несколько регионов |
Минус на своей стороне один: мониторинг идет из одной точки - вашего сервера. Если нужен взгляд из нескольких стран, облачные сервисы тут выигрывают. Для «жив ли мой сервис и что с сертификатом» одной точки достаточно.
Тех-стек и архитектура
Сам Uptime Kuma - это одно Node.js-приложение, которое хранит все (мониторы, историю проверок, статус-страницы, настройки уведомлений) в файле SQLite в томе. Никакой отдельной СУБД поднимать не нужно. Веб-интерфейс живет на websocket через socket.io - это важно помнить при настройке реверс-прокси.
Мы развернули его в два контейнера: сам louislam/uptime-kuma:2, который слушает только localhost, и caddy:2 перед ним - Caddy выпускает Let's Encrypt-сертификат, отдает сервис по HTTPS и сам пробрасывает websocket. Такой связки достаточно для прода: наружу торчит только 80/443, приложение недоступно напрямую.
Минимальная конфигурация
Реальные требования против официального минимума.
| Официальный минимум | 1 GB RAM, 1 CPU |
| Реально в простое (два контейнера) | ~163 MiB RAM |
| Рекомендуем тариф | CPU2-RAM4-DISK50 |
| Диск под данные | SQLite, растет от истории проверок |
Важно: по памяти Uptime Kuma нетребователен и заводится даже на 1 GB, но берем тариф CPU2-RAM4-DISK50 за 500 руб/мес с запасом - под рост истории проверок и Caddy рядом. Диск съедает не приложение, а накопленная история пингов: на десятках мониторов это все равно десятки мегабайт.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal
Базовый путь - Cloud Server + Ubuntu 24.04 + Docker, приложение за Caddy с авто-TLS.
Создать сервер
Fatmetal Cloud Server на Ubuntu 24.04, тариф CPU2-RAM4-DISK50. Дальше все по SSH под root.
Подготовить docker-compose
Uptime Kuma слушает только localhost, наружу его выводит Caddy.
mkdir -p /opt/uptime-kuma/data && cd /opt/uptime-kuma cat > docker-compose.yml <<'YML' name: uptime-kuma services: uptime-kuma: image: louislam/uptime-kuma:2 restart: unless-stopped volumes: ["./data:/app/data"] ports: ["127.0.0.1:3001:3001"] caddy: image: caddy:2 restart: unless-stopped ports: ["80:80","443:443"] command: caddy reverse-proxy --from ВАШ-ДОМЕН --to uptime-kuma:3001 YMLПоднять стек
docker compose pull docker compose up -dCaddy сам выпустит Let's Encrypt для домена и пробросит websocket. Проверка:
docker compose ps- оба контейнера up, uptime-kuma healthy.Завести администратора
Откройте домен в браузере. В версии 2 мастер идет в два шага: сначала выбор БД (для чистой установки - SQLite), затем создание логина и пароля админа. Кто первым открыл адрес, тот и заводит админа - делайте это сразу.
Что измерили после запуска
Цифры с живого стенда: docker stats, время установки, проверка TLS.
| Установка (скрипт целиком) | ~245 c |
| RAM: uptime-kuma | ~151 MiB |
| RAM: caddy | ~12 MiB |
| RAM: два контейнера суммарно | ~163 MiB |
| Контейнеров в стеке | 2 |
| TLS (Let's Encrypt) | verify=0, код 302 |
Главное: установка почти целиком - это docker pull образов и выпуск сертификата, само приложение отвечает в пределах минуты после старта. По памяти стек предельно легкий: даже через сутки аптайма с четырьмя мониторами оба контейнера вместе держатся около 163 MiB. Это один из самых недорогих по ресурсам сервисов, что мы разбирали.
Проверено на версии 2.4.0, июль 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли, на которые стоит смотреть заранее.
Мастер администратора открыт всем. Пока вы не создали первого админа, это может сделать любой, кто откроет URL. В проде откройте адрес и заведите админа сразу после установки, а не «потом».
Уведомления молчат, пока не настроен канал. Мониторинг без алертов наполовину бессмыслен: заведите Telegram-бота, ntfy или SMTP в разделе Settings - Notifications и привяжите к мониторам, иначе о падении узнаете, только зайдя в интерфейс.
Причина. Интерфейс Uptime Kuma работает через websocket (socket.io). Если прокси не пробрасывает Upgrade-заголовки, страница грузится, но не подключается к бэкенду.
Решение. Caddy пробрасывает websocket сам - с ним проблемы нет. На ручном nginx добавьте в location проброс Upgrade и Connection, иначе UI не оживет.
Безопасность и обновления
Обновление - это подтянуть свежий образ и пересоздать контейнер. Тег :2 держит вас на стабильной второй ветке, ломающих смен мажора не будет:
docker compose pull && docker compose up -d
Бэкап предельно простой - вся база это каталог с SQLite. Останавливаем стек и копируем том:
docker compose stop
tar czf uptime-kuma-backup.tgz /opt/uptime-kuma/data
docker compose start
Что закрыть перед продом: сервис только за HTTPS (в нашем стеке это Caddy), приложение не торчит наружу напрямую (порт на 127.0.0.1), первый админ заведен сразу и с сильным паролем, включена двухфакторка в профиле, регулярный бэкап тома data, настроен хотя бы один канал уведомлений.
Связь с другими стеками
Uptime Kuma отвечает на вопрос «жив ли сервис и что с сертификатом». Полную картину наблюдаемости он не закрывает - рядом обычно ставят:
- Beszel - метрики ресурсов (CPU, RAM, диск, сеть) серверов, чего Uptime Kuma не умеет.
- ntfy - свой сервер пуш-уведомлений, удобный приемник алертов Uptime Kuma на телефон.
- Wazuh - аудит безопасности и события, если нужен не только аптайм, но и мониторинг угроз.
- Caddy - реверс-прокси с авто-TLS, уже используется в этом стеке для HTTPS и websocket.
Когда это НЕ ваш выбор
Нужны метрики нагрузки
Uptime Kuma не показывает, сколько сервер ест CPU, RAM и диска. Для этого нужен Beszel, Netdata или связка Prometheus с Grafana.
Нужны проверки из разных регионов
Мониторинг идет из одной точки - вашего сервера. Если важно видеть доступность из нескольких стран, тут выигрывают облачные UptimeRobot или Pingdom с их сетью точек.
Нужен APM и трейсинг
Это мониторинг снаружи, а не профилирование внутри приложения. Разобрать медленный запрос по спанам он не поможет - это задача для OpenTelemetry, Jaeger или Sentry.
Частые вопросы
Можно поставить без Docker?
Да, есть установка через Node.js напрямую, но docker-вариант проще и воспроизводимее - его и рекомендуют в проекте.
Хватит ли 1 GB RAM?
Хватит: в простое два контейнера держатся около 163 MiB. Мы берем тариф CPU2-RAM4-DISK50 с запасом под рост истории проверок.
Можно в продакшен?
Да. Нужен реверс-прокси с TLS (в нашем стеке Caddy), сразу заведенный админ, бэкап тома и настроенные уведомления.
Как обновлять?
docker compose pull и up -d. Тег :2 держит на стабильной второй ветке без ломающих смен мажора.
Как делать бэкап?
Вся база - это каталог data с SQLite. Останавливаете стек, копируете каталог, запускаете обратно.
Какие каналы уведомлений поддерживаются?
Больше 90: Telegram, ntfy, email, Slack, Discord, вебхуки и другие. Настраиваются в Settings - Notifications.
Какая лицензия?
MIT - свободное использование, включая коммерческое.
Итог
Uptime Kuma - легкий и удобный способ поднять свой мониторинг аптайма и статус-страницу без SaaS-лимитов. Два контейнера, около 163 MiB RAM в простое, установка за несколько минут, проверки HTTP, TCP, DNS, keyword и SSL, уведомления в 90+ каналов. Первый и самый узнаваемый кирпич стека наблюдаемости - и один из самых недорогих по ресурсам сервисов, что мы разворачивали. Заводится на тарифе CPU2-RAM4-DISK50, реверс-прокси с TLS уже в стеке, так что путь до прода короткий.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите Uptime Kuma на этой конфигурации автоматически - от 450 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.