DevOps & Docker 9 мин чтения 2026-08-26

Бесплатный мониторинг сайтов и SSL-сертификатов с оповещениями в Telegram за 10 минут

Полное практическое руководство по развертыванию собственного отказоустойчивого мониторинга сайтов, проверки срока SSL Let's Encrypt и аптайма 24/7 с мгновенными уведомлениями в Telegram.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Каждая минута простоя интернет-магазина, CRM-системы или медиапортала стоит денег и репутации: клиенты уходят к конкурентам, контекстная реклама сливает бюджет в ошибку 502 Bad Gateway, а поисковые роботы снижают позиции сайта. Хуже внезапного падения сервера может быть только просроченный SSL-сертификат, когда браузер блокирует вход огромным красным экраном «Подключение не защищено».

В этой статье мы за 10 минут развернем полноценную систему мониторинга на базе популярного open-source решения Uptime Kuma в Docker, подключим мгновенные пуш-уведомления в Telegram и разберем резервный Bash-скрипт контроля SSL-сертификатов через Cron.

💡
Главное правило инженера: Мониторинг никогда не должен находиться на том же физическом сервере, который он отслеживает! Размещайте систему на отдельном независимом микро-VPS (за 150–200 ₽/мес). Если ваш основной сервер зависнет целиком, мониторинг на нем просто не сможет отправить вам тревожное сообщение.

1. Зачем сайту собственный мониторинг и почему облачные SaaS подводят

Большинство вебмастеров начинают с бесплатных облачных сервисов (UptimeRobot, Better Stack, Pingdom). Однако бесплатные тарифы имеют критические ограничения:

  • Редкий интервал опроса: Проверка раз в 5–15 минут. За 15 минут простоя интернет-магазин успевает потерять десятки заказов.
  • Лимит на количество проверок: Обычно до 5–10 мониторов, чего недостаточно даже для одного проекта с API, базой данных и поддоменами.
  • Платные Telegram и SMS алерты: За уведомления в мессенджеры SaaS-платформы требуют подписку от $15–30 в месяц.
  • Ограничения по геолокации: Невозможно проверить доступность сайта изнутри конкретной страны или локального дата-центра.

Собственный инстанс Uptime Kuma полностью бесплатен, проверяет неограниченное число сайтов с интервалом от 20 секунд, контролирует сроки SSL Let's Encrypt, замеряет TTFB, строит публичные статус-страницы и мгновенно присылает детальные отчеты с графиками прямо в Telegram.


2. Шаг 1: Создание Telegram-бота для алертов за 2 минуты

Telegram — самый оперативный канал для получения тревожных сигналов (Incident Alerts). Создадим служебного бота для отправки сообщений:

  1. Откройте официального бота @BotFather в Telegram.
  2. Отправьте команду /newbot, задайте понятное имя (например, MySite Uptime Alert) и username бота (например, mysite_uptime_bot).
  3. Скопируйте полученный HTTP API Token (вида 7123456789:AAFn_xxxxxxxxx).
  4. Запустите своего нового бота, нажав кнопку /start.
  5. Создайте закрытую группу для дежурных администраторов (или используйте личный чат) и добавьте туда созданного бота.
  6. Узнайте Chat ID: добавьте в чат бота @userinfobot (или @getmyid_bot), он сразу выдаст числовой идентификатор чата (например: -1001987654321 для группы или 123456789 для личного чата).

Проверьте отправку тестового сообщения через cURL в терминале:

curl -s -X POST "https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage" \
  -d "chat_id=<ВАШ_CHAT_ID>" \
  -d "text=🔔 Тестовое оповещение: бот мониторинга успешно подключен!"

3. Шаг 2: Развертывание Uptime Kuma в Docker Compose за 3 минуты

Uptime Kuma написан на Node.js и SQLite, потребляет всего 60–100 МБ оперативной памяти и идеально работает на самом дешевом KVM VPS с 1 vCPU и 1 GB RAM.

1. Установка Docker и Docker Compose на чистый VPS (Ubuntu 24.04 / Debian 12):

# Обновляем пакеты и ставим официальный Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

2. Создание файла docker-compose.yml:

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

Вставьте следующую конфигурацию:

version: '3.8'

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: always
    volumes:
      - uptime-kuma-data:/app/data
    ports:
      - "3001:3001"
    security_opt:
      - no-new-privileges:true

volumes:
  uptime-kuma-data:

3. Запуск контейнера:

docker compose up -d
docker compose ps

Откройте в браузере http://IP_ВАШЕГО_СЕРВЕРА:3001, задайте логин и пароль администратора. Для защиты входа паролем сгенерируйте надежную комбинацию через наш Генератор паролей.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

🔷 Selectel Cloud VPS
Выбор для мониторинга

Идеальные изолированные KVM-серверы для систем мониторинга, Uptime Kuma и ботов. Собственные дата-центры Tier III в Москве и СПб, трафик 3 ТБ на порту 1 Гбит/с.

Конфигурация
от 1 vCPU / 1 GB RAM / 10 GB NVMe (от 200 ₽)
Timeweb Cloud
Запуск Docker в 1 клик

Высокоскоростные VDS с предустановленным Docker и Ubuntu 24.04. Поминутная тарификация, моментальные снапшоты и удобное мобильное приложение.

Конфигурация
от 1 vCPU / 2 GB RAM / 30 GB NVMe
🟠 Beget VPS
Надежность и простота

Стабильный аптайм 99.98%, установка Docker и баз данных за 60 секунд, круглосуточная русскоязычная поддержка 24/7.

Конфигурация
от 1 vCPU / 2 GB RAM / 35 GB NVMe

4. Шаг 3: Настройка мониторов HTTP(s), Ping, TCP и срока SSL

После входа в панель Uptime Kuma привяжем Telegram и добавим ваши веб-ресурсы:

1. Подключение уведомлений в Telegram:

  • Перейдите в Settings (Настройки) ➔ Notifications (Уведомления) ➔ Setup Notification.
  • Выберите тип: Telegram.
  • Вставьте Bot Token и Chat ID, полученные на Шаге 1.
  • Включите чекбокс «Default enabled» (уведомлять по умолчанию для всех новых мониторов).
  • Нажмите Test — в Telegram мгновенно придет тестовый алерт! Нажмите Save.

2. Добавление монитора сайта и SSL-сертификата:

  • Нажмите + Add New Monitor в верхнем меню.
  • Monitor Type: HTTP(s).
  • Friendly Name: Название проекта (например: Интернет-магазин (Prod)).
  • URL: https://example.com.
  • Heartbeat Interval: 60 секунд (интервал проверки).
  • Retries: 2 (количество повторных попыток перед алертом для исключения ложных срабатываний).
  • Certificate Expiry Notification: активируйте галочку! Укажите порог уведомления, например 14 дней (Uptime Kuma начнет предупреждать вас за две недели до окончания срока SSL).
💡
Совет по глубокой проверке: Не ограничивайтесь кодом ответа 200 OK. В секции HTTP Options можно включить поиск ключевого слова в теле страницы (например, наличие текста в футере или копирайта). Это спасет вас от ситуации, когда Nginx отдает пустой белый экран или страницу ошибки с кодом 200. Проверить валидность SSL и заголовков можно через наш SSL Чекер и Инспектор HTTP-заголовков.

5. Альтернатива без Docker: легковесный Bash-скрипт проверки SSL по Cron

Если у вас нет отдельного сервера с Docker, можно настроить автономный скрипт на любом Linux-сервере, который раз в сутки проверяет срок годности SSL всех ваших доменов через утилиту openssl и шлет отчет в Telegram.

Создайте скрипт /usr/local/bin/check_ssl.sh:

#!/bin/bash
# -------------------------------------------------------------
# SysKit.ru - Автоматический чекер срока SSL-сертификатов
# -------------------------------------------------------------

BOT_TOKEN="ВАШ_TELEGRAM_BOT_TOKEN"
CHAT_ID="ВАШ_TELEGRAM_CHAT_ID"
DAYS_ALERT=14 # Порог предупреждения в днях

# Список проверяемых доменов через пробел
DOMAINS=("example.com" "api.example.com" "syskit.ru")

for DOMAIN in "${DOMAINS[@]}"; do
    # Получаем дату окончания срока SSL через сокет OpenSSL
    EXPIRY_DATE=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN":443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
    
    if [ -z "$EXPIRY_DATE" ]; then
        TEXT="⚠️ Внимание! Не удалось проверить SSL для домена $DOMAIN. Порт 443 недоступен или отсутствует сертификат!"
        curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "parse_mode=HTML" -d "text=$TEXT"
        continue
    fi

    # Переводим дату в Unix Timestamp
    EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
    CURRENT_TIMESTAMP=$(date +%s)
    DAYS_LEFT=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))

    if [ $DAYS_LEFT -le $DAYS_ALERT ]; then
        TEXT="🚨 Критическое предупреждение SSL!%0AДомен: $DOMAIN%0AОсталось дней: $DAYS_LEFT%0AДата истечения: $EXPIRY_DATE%0AСрочно обновите сертификат (Certbot / acme.sh)!"
        curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "parse_mode=HTML" -d "text=$TEXT"
    fi
done

Сделайте скрипт исполняемым и добавьте в системный Cron:

chmod +x /usr/local/bin/check_ssl.sh

# Открываем crontab
crontab -e

# Запуск каждое утро в 09:00 (составить расписание поможет наш Генератор Cron):
0 9 * * * /usr/local/bin/check_ssl.sh >/dev/null 2>&1

Сгенерировать правильное Cron-расписание можно онлайн в нашем Генераторе Cron задач SysKit.


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

В Uptime Kuma встроен превосходный конструктор Status Page (как у GitHub, Cloudflare или OpenAI). Он позволяет вывести публичный дашборд доступности ваших сервисов на отдельном домене или поддомене (например: status.yourdomain.com):

  • В панели Uptime Kuma перейдите в Status Pages ➔ New Status Page.
  • Укажите название компании, логотип и выберите мониторы, которые должны видеть пользователи.
  • Группируйте сервисы по категориям: «Веб-сайт», «API», «База данных», «Платежный шлюз».
  • В случае аварии вы можете прямо в панели публиковать сообщения об инциденте (Incident Management), информируя пользователей о ведущихся технических работах.

7. Инженерные правила надежного мониторинга

✅ Лучшие практики мониторинга:

  • Мониторинг развернут на отдельном независимом хостинге/VDS.
  • Настроены алерты по числу повторов (Retries: 2–3) для защиты от кратковременных сетевых микро-спайков.
  • Проверяется не только статус 200, но и наличие ключевых слов в HTML.
  • Контролируется время ответа (Response Time > 2000 мс — сигнал о деградации БД).
  • SSL-алерты настроены с запасом минимум в 14–21 день.

❌ Ошибки, создающие иллюзию контроля:

  • Мониторинг на том же VPS: при падении питания или ядра Linux вы не получите алерт.
  • Проверка только главной страницы: падение микросервиса авторизации или корзины останется незамеченным.
  • Отсутствие мониторинга DNS: если истечет регистрация домена или слетят NS, HTTP-чекер покажет таймаут слишком поздно.

8. Итоговый чек-лист настройки

📋
Чек-лист запуска за 10 минут:
  1. Создан бот через @BotFather и получен Chat ID.
  2. Развернут контейнер uptime-kuma в Docker Compose.
  3. Telegram подключен в качестве дефолтного канала оповещений.
  4. Добавлены мониторы HTTP(s) ключевых URL проекта с интервалом 60 сек.
  5. Активирована проверка срока SSL с порогом 14 дней.
  6. Опубликована статус-страница для службы поддержки и клиентов.

🚀 Нужен изолированный сервер под мониторинг от 200 ₽?

Разверните надежный KVM VPS с чистыми NVMe дисками и каналом 1 Гбит/с для круглосуточного мониторинга ваших проектов 24/7.

Выбрать микро-VPS для мониторинга на Selectel →

9. Часто задаваемые вопросы (FAQ)

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Сколько ресурсов VPS требует Uptime Kuma?
Uptime Kuma крайне нетребовательна к ресурсам. Для мониторинга 50-100 сайтов и сервисов с интервалом опроса в 60 секунд достаточно минимального сервера с 1 vCPU и 512 MB - 1 GB RAM на NVMe диске.
Как защитить панель Uptime Kuma от посторонних глаз?
Обязательно включите двухфакторную аутентификацию (2FA) в настройках безопасности Uptime Kuma, закройте прямой доступ к порту 3001 через firewall (UFW) и настройте Nginx Reverse Proxy с бесплатным SSL-сертификатом Let's Encrypt.
Почему сайт упал, но алерт в Telegram не пришел?
Частые причины: мониторинг был запущен на том же упавшем сервере; Telegram заблокировал запросы из-за неверного Chat ID; либо в настройках монитора стояло слишком большое число повторов (Retries: 5+), и проверка еще не перешла в статус Down.
Можно ли мониторить базы данных MySQL/PostgreSQL и порты?
Да, Uptime Kuma поддерживает типы мониторов TCP Port, Ping, DNS, Docker Container, Steam Game Server, RADIUS, MQTT, а также проверку HTTP ключевых слов и JSON-ответов REST API.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи