Uptime Kuma: мониторинг сайтов и серверов на своём VPS
Ставим Uptime Kuma в Docker за Caddy с автоматическим HTTPS, подключаем уведомления в Telegram, добавляем мониторы HTTP, TCP, ping и push.

Uptime Kuma — бесплатный self-hosted мониторинг: проверяет сайты, порты и серверы раз в 20–60 секунд и шлёт уведомления в Telegram, Discord, Slack или на почту, когда что-то упало и когда поднялось. Ниже установка в Docker за обратным прокси Caddy, который сам выпускает сертификат.
Если сервера ещё нет, VPS на tanaka.host создаётся за минуту с Ubuntu или Debian, а списание идёт по дням — удобно, чтобы просто попробовать.
Что нужно: VPS с Docker (1 vCPU и 1 ГБ хватает с запасом), поддомен вроде status.example.com с A-записью на сервер, аккаунт Telegram.
Ставьте монитор на отдельный сервер, не на тот, который он проверяет. Иначе при падении сервера вы не получите уведомление, потому что упадёт и монитор.
1. Запуск в Docker Compose
mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
nano compose.yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "127.0.0.1:3001:3001"
Порт привязан к 127.0.0.1: Docker обходит UFW, и без этого панель была бы открыта всему интернету без HTTPS.
docker compose up -d
docker compose ps
curl -I http://127.0.0.1:3001
Данные лежат в /opt/uptime-kuma/data — включите папку в бэкап.
2. Caddy как обратный прокси
Caddy выпускает сертификат Let’s Encrypt автоматически и умеет проксировать WebSocket, который нужен панели Kuma.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
На Debian 12 и новее Caddy есть и в стандартном репозитории (apt install caddy), версия там чуть старше, но для прокси достаточно.
3. Домен
sudo nano /etc/caddy/Caddyfile
status.example.com {
reverse_proxy 127.0.0.1:3001
}
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo systemctl reload caddy
Через несколько секунд https://status.example.com откроется с валидным сертификатом. Если нет — journalctl -u caddy -n 50: чаще всего A-запись ещё не обновилась.
4. Администратор
При первом открытии Kuma 2 спросит тип базы: для одного-двух десятков мониторов хватит SQLite. Создайте администратора с длинным паролем, в Settings → Security включите двухфакторную аутентификацию. В Settings → Reverse Proxy поставьте Trust Proxy = Yes, чтобы в журналах были настоящие IP, а не 127.0.0.1.
5. Уведомления в Telegram
- Напишите @BotFather, команда
/newbot, скопируйте токен. - Отправьте своему боту любое сообщение — иначе он не сможет писать вам первым.
- В Kuma: Settings → Notifications → Setup Notification.
- Тип Telegram, вставьте токен, нажмите Auto Get — Chat ID подставится.
- Включите «Default enabled» и «Apply on all existing monitors».
- Test — в Telegram должно прийти сообщение. Save.
6. Первые мониторы
| Тип | Для чего |
|---|---|
| HTTP(s) | Сайты и API: код ответа, время, предупреждение об истечении сертификата |
| HTTP(s) – Keyword | Страница должна содержать текст (ловит «белый экран» с кодом 200) |
| TCP Port | SSH, базы, игровые серверы |
| Ping | Сервер жив вообще |
| Push | Наоборот: ваш скрипт (бэкап, cron) сам дёргает URL, а Kuma тревожится, если дёргать перестали |
Добавьте монитор: Friendly Name, адрес, интервал (60 секунд для сайтов — нормально). Push-монитор отлично сочетается с ночным бэкапом restic: одна строка curl в конце службы, и вы узнаете о сломанном бэкапе на следующее утро.
Статусная страница
Status Pages → New: публичная страница с выбранными мониторами, можно повесить на отдельный домен и показывать клиентам.
Обновление
cd /opt/uptime-kuma
docker compose pull
docker compose up -d
Перед обновлением мажорной версии скопируйте папку data.