Перейти к основному содержимому
Вернуться в категорию

Установка Uptime Kuma: Self-Hosted мониторинг доступности

Установка Uptime Kuma с Docker, мониторинг HTTP/TCP/DNS/ping, интеграции уведомлений (Telegram, Discord, email), создание страницы статуса и настройка оповещений.

Время чтения: 12 мин Самостоятельный хостинг
uptime-kumaмониторингuptimeself-hostingdockerуведомлениястраница статуса
Автор
REXE Teknoloji Network & Security Team
Редактор
REXE Teknoloji Technical Editorial
Первая публикация
Последнее обновление

Установка Uptime Kuma: Self-Hosted мониторинг доступности

Uptime Kuma — это self-hosted инструмент мониторинга доступности, отслеживающий работоспособность ваших сервисов и веб-сайтов. С красивым веб-интерфейсом, различными типами мониторов и богатыми интеграциями уведомлений он предлагает отличную альтернативу Uptime Robot.

Что такое Uptime Kuma?

Выдающиеся возможности Uptime Kuma:

  • Типы мониторов: HTTP(S), TCP, DNS, Ping, Docker Container, Steam Game Server
  • Каналы уведомлений: Telegram, Discord, Slack, Email, PagerDuty, Webhook и 90+ интеграций
  • Страница статуса: Настраиваемая страница статуса
  • Мониторинг SSL: Отслеживание срока действия сертификатов
  • Окно обслуживания: Определение плановых окон обслуживания
  • Поддержка 2FA: Двухфакторная аутентификация
  • Многоязычность: 40+ языков

Установка

Установка с Docker (Рекомендуется)

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

После установки:

http://IP_СЕРВЕРА:3001

Установка с Docker Compose

hljs yaml
# docker-compose.yml
version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma:/app/data
    security_opt:
      - no-new-privileges:true

volumes:
  uptime-kuma:
hljs bash
docker compose up -d

HTTPS с Nginx Reverse Proxy

hljs nginx
server {
    listen 80;
    server_name uptime.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name uptime.example.com;

    ssl_certificate /etc/letsencrypt/live/uptime.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/uptime.example.com/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_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }
}

Типы мониторов

HTTP(S) монитор

Monitor Type: HTTP(S)
Friendly Name: Главная страница
URL: https://example.com
Heartbeat Interval: 60 секунд
Retries: 3
Accepted Status Codes: 200-299

Расширенные настройки HTTP:

hljs bash
# Мониторинг ключевых слов (поиск текста на странице)
Monitor Type: HTTP(S) - Keyword
Keyword: "Добро пожаловать"

# Мониторинг JSON Query (проверка ответа API)
Monitor Type: HTTP(S) - JSON Query
JSON Path: $.status
Expected Value: ok

TCP Port монитор

Monitor Type: TCP Port
Friendly Name: База данных MySQL
Hostname: db.example.com
Port: 3306
Heartbeat Interval: 120 секунд

DNS монитор

Monitor Type: DNS
Friendly Name: Проверка DNS
Hostname: example.com
Resolver Server: 8.8.8.8
DNS Resolve Type: A
Expected Value: 1.2.3.4

Мониторинг SSL-сертификата

Monitor Type: HTTP(S)
URL: https://example.com
# На вкладке SSL:
Enable SSL Certificate Expiry Notification: ВКЛ
Notify Before (days): 30

Интеграции уведомлений

Уведомление Telegram

hljs bash
# 1. Создайте бота через BotFather
# Получите Bot Token: 1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ

# 2. Получите Chat ID
curl https://api.telegram.org/bot<TOKEN>/getUpdates
# Запишите значение "chat":{"id":123456789}
Notification Type: Telegram
Bot Token: 1234567890:ABCdefGHIjklMNOpqrSTUvwxYZ
Chat ID: 123456789

Уведомление Discord

hljs bash
# Создать Webhook в Discord:
# Настройки сервера → Интеграции → Вебхуки → Новый вебхук
# Скопировать URL вебхука
Notification Type: Discord
Discord Webhook URL: https://discord.com/api/webhooks/...
Username: Uptime Kuma

Уведомление по Email (SMTP)

Notification Type: Email (SMTP)
From Email: alerts@example.com
To Email: admin@example.com
SMTP Host: smtp.gmail.com
SMTP Port: 587
SMTP Username: alerts@example.com
SMTP Password: пароль-приложения
Security: STARTTLS

Создание страницы статуса

Новая страница статуса

  1. Status PagesNew Status Page
  2. Установите название и slug страницы: status.example.com
  3. Добавьте логотип и заголовок
  4. Добавьте мониторы в группы
  5. Сохраните с помощью Save
hljs bash
# Настройки страницы статуса:
Title: Статус сервисов
Description: Статус всех наших сервисов в реальном времени
Theme: Auto (Светлая/Тёмная)
Custom Domain: status.example.com

Окно обслуживания

Maintenance → Add Maintenance
Title: Еженедельное обслуживание
Strategy: Recurring
Start Time: Воскресенье 02:00
End Time: Воскресенье 04:00
Timezone: Europe/Moscow
Affected Monitors: Все мониторы

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

hljs bash
docker stop uptime-kuma
docker rm uptime-kuma
docker pull louislam/uptime-kuma:latest

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

Резервное копирование

hljs bash
# Резервное копирование данных Uptime Kuma
docker exec uptime-kuma tar -czf /tmp/backup.tar.gz /app/data
docker cp uptime-kuma:/tmp/backup.tar.gz ./uptime-kuma-backup-$(date +%Y%m%d).tar.gz

# Восстановление
docker cp ./uptime-kuma-backup.tar.gz uptime-kuma:/tmp/
docker exec uptime-kuma tar -xzf /tmp/backup.tar.gz -C /

Вы можете отслеживать все сервисы, работающие на серверах REXE, с помощью Uptime Kuma. Благодаря уведомлениям в Telegram вы будете мгновенно оповещены о любых сбоях.

Часто задаваемые вопросы

После установки Uptime Kuma не могу получить доступ к порту 3001.

Откройте порт 3001 в брандмауэре: 'ufw allow 3001/tcp'. Проверьте, что контейнер запущен: 'docker ps | grep uptime-kuma'. Если используете Nginx reverse proxy, проверьте настройки proxy_pass и SSL-сертификат.

Уведомления Telegram не приходят.

Проверьте правильность токена бота. Выполните 'curl https://api.telegram.org/bot<TOKEN>/getUpdates' для проверки Chat ID. Вы должны были отправить боту хотя бы одно сообщение. Если используете группу, добавьте бота в группу и сделайте его администратором. Используйте кнопку 'Test' в настройках уведомлений.

Мой HTTP-монитор постоянно показывает 'down', хотя сайт работает.

Проверьте настройку 'Accepted Status Codes' (по умолчанию: 200-299). Если ваш сайт возвращает редиректы 301/302, добавьте их тоже. Если есть ошибка SSL-сертификата, включите опцию 'Ignore TLS/SSL error'. Увеличьте тайм-аут. Убедитесь, что сайт доступен с сервера, где запущен Uptime Kuma.

Как привязать страницу статуса к пользовательскому домену?

Введите имя домена в поле 'Custom Domain' в настройках страницы статуса (например, status.example.com). Создайте CNAME-запись в DNS: status.example.com → uptime.example.com. Если используете Nginx reverse proxy, добавьте новый server block. Получите SSL-сертификат с Let's Encrypt.

У меня много мониторов в Uptime Kuma и возникают проблемы с производительностью.

Увеличьте интервал heartbeat (120-300 секунд вместо 60). Отключите ненужные мониторы. Выделите больше ресурсов контейнеру Uptime Kuma. База данных SQLite может замедляться по мере роста; регулярно очищайте старые записи. Используйте опцию 'Settings → Database → Shrink Database'.

Как настроить уведомления об истечении срока действия SSL-сертификата?

При создании или редактировании HTTP(S) монитора перейдите на вкладку 'SSL'. Включите опцию 'Enable SSL Certificate Expiry Notification'. Установите, за сколько дней вы хотите получать уведомление (например, 30 дней). Убедитесь, что ваш канал уведомлений (Telegram, email и т.д.) настроен.

Связанные статьи

Сетевой трафикВходящий GbpsИсходящий Gbps