Вы настроили Nginx, оптимизировали PHP-FPM, защитили сайт и настроили автоматические бэкапы. Но как вы узнаете, что сайт упал, если это произойдет в 3 часа ночи? Сервисы вроде UptimeRobot решают эту задачу, но их бесплатные тарифы сильно урезаны, а данные хранятся на чужих серверах.
В этом руководстве мы развернем Uptime Kuma — красивую, мощную и полностью бесплатную систему мониторинга с открытым исходным кодом. Мы установим её через Docker, подключим к домену через Nginx, настроим уведомления в Telegram и создадим публичную статус-страницу.
Почему Uptime Kuma, а не сторонние сервисы?
- Без лимитов: мониторьте хоть 100 сайтов и сервисов с интервалом проверки в 20 секунд
- Приватность: данные о доступности вашего сайта хранятся только у вас
- Множество протоколов: HTTP(s), TCP Port, Ping, DNS Record, Docker Containers, Push-мониторинг
- Красивый UI: интерфейс в стиле современных SaaS-платформ, есть темная тема
- Статус-страницы: можно сделать публичную страницу типа
status.custom-code.ruдля пользователей
Шаг 1: Установка Uptime Kuma через Docker Compose
Поскольку мы уже используем Docker, установка займет 2 минуты. Создадим отдельную папку для сервиса:
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
nano docker-compose.ymlВставьте следующую конфигурацию:
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
volumes:
- ./data:/app/data
ports:
- "3001:3001"Запустите контейнер:
docker compose up -dПроверьте, что контейнер работает: docker ps. Если вы видите статус Up, Uptime Kuma слушает порт 3001. Если контейнер падает с кодом 137, читайте наше руководство по устранению OOMKilled — скорее всего, не хватает RAM.
Шаг 2: Настройка Nginx Reverse Proxy для Uptime Kuma
Открывать панель мониторинга по IP и порту :3001 небезопасно. Настроим доступ по домену (например, status.custom-code.ru) с HTTPS.
Создайте конфиг Nginx:
sudo nano /etc/nginx/sites-available/uptime-kumaДобавьте блок сервера:
server {
listen 80;
server_name status.custom-code.ru;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Поддержка WebSocket (нужно для实时 обновлений в Kuma)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}Активируйте сайт и получите SSL-сертификат через Certbot (подробно этот процесс описан в статье про Nginx reverse proxy):
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d status.custom-code.ruТеперь панель Uptime Kuma доступна по адресу https://status.custom-code.ru. При первом заходе создайте аккаунт администратора.
Шаг 3: Добавление мониторов
Перейдите в Dashboard и нажмите Add New Monitor. Разберем три самых полезных типа проверок для вашего стека.
1. Мониторинг WordPress-сайта (HTTP(s))
- Friendly Name: Custom Code Main Site
- URL: https://custom-code.ru
- Interval: 60 seconds
- Expected Status Code: 200
- Advanced: Включите «Ignore TLS/SSL error» только если у вас самоподписанный сертификат. Включите «Max. Redirects», если сайт делает редиректы.
2. Мониторинг базы данных (TCP Port)
Чтобы знать, если MySQL «упал» или перегружен:
- Type: TCP Port
- Hostname: 127.0.0.1
- Port: 3306
- Interval: 30 seconds
3. Мониторинг самого сервера (Ping)
- Type: Ping
- Hostname: IP-адрес вашего VPS
- Interval: 60 seconds
Шаг 4: Настройка уведомлений в Telegram
Мониторинг бесполезен, если вы не узнаете о проблемах. Настроим уведомления в Telegram.
1. Создайте бота:
- Напишите
@BotFatherв Telegram, отправьте/newbot - Получите HTTP API Token
- Найдите своего бота в поиске Telegram и нажмите Start
- Узнайте свой Chat ID через бота
@userinfobot
2. Подключите в Uptime Kuma:
- Settings → Notifications → Add Notification → Telegram
- Вставьте Bot Token и Chat ID
- Нажмите Test — вы должны получить тестовое сообщение
- Сохраните и назначьте уведомление на нужные мониторы (вкладка Edit у каждого монитора → Notification)
Шаг 5: Публичная статус-страница
Uptime Kuma позволяет создать красивую страницу со статусом всех сервисов, которую можно показать клиентам или пользователям.
- Перейдите в Status Pages → Add New Status Page
- Укажите Title (например, «Custom Code Status») и slug (
status) - Добавьте мониторы на страницу
- Включите опцию Published
Теперь ваша статус-страница доступна по адресу https://status.custom-code.ru/status. Вы можете добавить её в футер сайта или в раздел «О нас».
Шаг 6: Push-мониторинг (для сложных скриптов)
Иногда нужно проверить не доступность сайта, а факт выполнения задачи. Например, вы настроили скрипт бэкапов и хотите знать, если он не отработал.
- Создайте монитор типа Push в Uptime Kuma
- Скопируйте сгенерированный URL (например,
https://status.custom-code.ru/api/push/xxxxx) - Добавьте в конец вашего bash-скрипта бэкапа одну строку:
# В конце wp-backup.sh
curl -s https://status.custom-code.ru/api/push/xxxxx?status=up\&msg=OK\&ping=Если скрипт не выполнится (упадет по ошибке), Uptime Kuma не получит сигнал и отправит вам уведомление в Telegram.
Чек-лист настройки мониторинга
- ✅ Uptime Kuma развернут в Docker и доступен по домену
- ✅ Настроен HTTPS через Let’s Encrypt
- ✅ Добавлены мониторы: HTTP для сайта, TCP для БД, Ping для сервера
- ✅ Подключены Telegram-уведомления
- ✅ Создана и опубликована публичная статус-страница
- ✅ Настроен Push-мониторинг для критичных cron-задач
Что делать, если проблемы не решаются?
Ложные срабатывания (False Positives)
Если Uptime Kuma шлет уведомления, что сайт упал, но на самом деле он работает, увеличьте Retries (количество попыток) в настройках монитора с 3 до 5. Также проверьте, не блокирует ли Fail2ban или Cloudflare IP-адрес вашего сервера, с которого Kuma отправляет запросы (если Kuma и сайт на одном VPS, используйте 127.0.0.1 вместо внешнего домена).
Ошибки SSL/TLS в мониторе
Если монитор HTTP(s) показывает ошибку сертификата, хотя в браузере всё работает, убедитесь, что в настройках монитора не стоит галочка «Ignore TLS/SSL error» (если сертификат валидный). Если вы используете самоподписанные сертификаты для внутренних сервисов — галочку нужно поставить.
Uptime Kuma не запускается после перезагрузки сервера
Убедитесь, что в docker-compose.yml указан параметр restart: always. Также проверьте, что Docker сам запускается при старте ОС: sudo systemctl enable docker.
База данных Uptime Kuma повреждена
Все данные Uptime Kuma хранятся в папке /opt/uptime-kuma/data в файле kuma.db (SQLite). Регулярно копируйте этот файл в ваши бэкапы. Если база повредилась, можно восстановить её из последней копии или использовать встроенный инструмент восстановления: docker exec -it uptime-kuma node extra/repair-database.js.
Итог
Uptime Kuma закрывает последнюю дыру в мониторинге вашего сервера. Вы больше не узнаете об падениях сайта от пользователей или хостера — Telegram-бот сообщит вам об этом через 30 секунд после инцидента. А публичная статус-страница повысит доверие к вашему проекту, показывая, что вы контролируете инфраструктуру.