Как установить Uptime Kuma в Ubuntu 26.04 LTS

Некоторые системы мониторинга заставляют выбирать между многофункциональностью и ресурсоемкостью. Комбинация Prometheus, Alertmanager и Grafana — это замечательно, но это излишне, если вам нужно всего лишь быстро проверить, «работает ли сайт», для нескольких сервисов. Uptime Kuma заполняет эту нишу. Самостоятельное развертывание, один контейнер, лаконичный интерфейс и уведомления практически в любую среду, которой вы уже пользуетесь (Telegram, Slack, Discord, электронная почта, Gotify, Matrix — что угодно).

Оригинальный контент с computingforgeeks.com — пост № 166172

В этом руководстве подробно описано развертывание Uptime Kuma в производственной среде на Ubuntu 26.04 LTS. Мы запускаем приложение в Docker, используем в качестве фронт-энда обратный прокси Nginx и защищаем его сертификатом Let’s Encrypt, выданным через проверку Cloudflare DNS-01. В результате у вас будут мониторы HTTPS, проверка ping, монитор ключевых слов и общедоступная страница статуса, которую заинтересованные лица смогут добавить в закладки.

Протестировано Апрель 2026 г. на Ubuntu 26.04 LTS с Uptime Kuma 1.23.17, Docker 29.4.0 и Nginx 1.28.3

Необходимые условия

  • Сервер Ubuntu 26.04 LTS с правами root или sudo (подойдет свежая установка)
  • Минимум 1 ГБ ОЗУ, 5 ГБ свободного места на диске, любой процессор, выпущенный в последнее десятилетие
  • Доменное имя, которым вы управляете, с DNS, находящимся в управлении Cloudflare (мы используем kuma.example.com в качестве заполнителя)
  • Доступные на сервере TCP-порты 80 и 443 для Nginx
  • Токен API Cloudflare с Zone.DNS:Edit областью действия для проверки DNS-01

Если вы начинаете с пустой виртуальной машины, сначала выполните начальную настройку сервера Ubuntu 26.04, чтобы создать пользователя, не являющегося root, включить брандмауэр и установить часовой пояс. В остальной части этого руководства предполагается, что эти базовые действия уже выполнены.

Шаг 1: Установка Docker Engine

Uptime Kuma поставляется в виде контейнера, поэтому Docker является единственной зависимостью среды выполнения. Официальный скрипт автоматизирует настройку репозитория, установку ключей GPG и запуск службы за один раз.

curl -fsSL https://get.docker.com | sudo sh

После завершения работы скрипта убедитесь, что демон запущен и плагин Compose доступен:

docker --version
docker compose version

Вы должны увидеть вывод, похожий на следующий:

Docker version 29.4.0, build 9d7ad9f
Docker Compose version v5.1.2

Более подробное руководство, включая настройку для пользователей без прав root, режим без root и усиление безопасности после установки, см. в нашем сопутствующем руководстве по установке Docker CE на Ubuntu 26.04.

Шаг 2: Развертывание контейнера Uptime Kuma

Мы фиксируем версию на 1 главной версии, чтобы минорные обновления устанавливались автоматически, но изменения, нарушающие совместимость с версиями 2.x, не появлялись без предварительного уведомления. Контейнер привязывается только к 127.0.0.1 , поскольку Nginx будет слушателем, обращённым к внешней сети. Открытие порта 3001 на интерфейсе хоста позволило бы любому пользователю в сети полностью обойти TLS.

sudo mkdir -p /opt/uptime-kuma
sudo vi /opt/uptime-kuma/docker-compose.yml

Вставьте следующее определение compose:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - kuma-data:/app/data
volumes:
  kuma-data:

Запустите стек в фоновом режиме:

cd /opt/uptime-kuma
sudo docker compose up -d

Дайте контейнеру 20 секунд на загрузку и инициализацию, затем убедитесь, что он сообщает о нормальном состоянии:

sudo docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

В столбце «Статус» должно быть указано Up N seconds (healthy) , а в списке привязок портов должно быть указано 127.0.0.1:3001->3001/tcp:

Если контейнер продолжает перезапускаться, проверьте sudo docker logs uptime-kuma , чтобы узнать истинную причину ошибки. Большинство сбоев связано с монтированием тома только для чтения или отсутствием прав на запись SQLite в сопоставленном каталоге.

Шаг 3: Настройте обратный прокси Nginx с Let’s Encrypt

Uptime Kuma использует простой HTTP на порту 3001 и WebSockets для обновлений в реальном времени. Nginx завершает TLS, перенаправляет запросы в контейнер и обновляет соединения для /socket.io/ без дополнительной настройки.

Установите Nginx, Certbot и плагин Cloudflare для DNS:

sudo apt update
sudo apt install -y nginx certbot python3-certbot-dns-cloudflare

Сохраните токен API Cloudflare в файле учетных данных с ограниченными правами доступа. Файл находится вне любого общедоступного пути и используется только Certbot:

echo "dns_cloudflare_api_token = your-cloudflare-api-token" | sudo tee /etc/letsencrypt/cloudflare.ini
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

Запросите сертификат. Проверка по стандарту DNS-01 означает, что во время выдачи сертификата не требуется открывать порт 80 для доступа из Интернета, что удобно для серверов, находящихся за брандмауэром или в частной сети:

sudo certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d kuma.example.com \
  --non-interactive --agree-tos -m [email protected]

В случае успеха Certbot выводит пути к сертификату и ключу:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/kuma.example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/kuma.example.com/privkey.pem
This certificate expires on 2026-07-13.

Откройте конфигурацию сайта:

sudo vi /etc/nginx/sites-available/uptime-kuma

Вставьте следующий текст, заменив `server_name` на свой домен:

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

server {
    listen 443 ssl;
    http2 on;
    server_name kuma.example.com;

    ssl_certificate /etc/letsencrypt/live/kuma.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kuma.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1: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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
    }
}

Заголовки Upgrade и Connection "upgrade" обеспечивают работу графиков пинга в реальном времени. Без них панель управления переходит на опрос каждые 30 секунд, и интерфейс начинает работать с задержками.

Включите сайт, удалите настройки по умолчанию, протестируйте конфигурацию и перезагрузите страницу:

sudo ln -sf /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/uptime-kuma
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Откройте порты 80 и 443 в UFW, если брандмауэр активен:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Проверьте работу обратного прокси со своей рабочей станции. Первый запрос на / перенаправляется на /dashboard с кодом 302, что именно и требуется:

curl -sI https://kuma.example.com/ | head -3

Ожидаемый ответ:

HTTP/2 302
server: nginx/1.28.3 (Ubuntu)
content-type: text/plain; charset=utf-8

В нашем руководстве по Nginx с Let’s Encrypt описаны проверка HTTP-01, OCSP-стаплинг и настройка A+ по SSL Labs, если вы хотите ещё больше усилить безопасность.

Шаг 4: Учетная запись администратора при первом запуске

Перейдите по адресу https://kuma.example.com. При первом посещении вы попадаете в мастер настройки. Выберите имя пользователя, пароль, который вы не забудете, и подтвердите его. Встроенной процедуры восстановления пароля нет, поэтому то, что вы установите здесь, останется в силе до следующей пересборки контейнера.

После отправки Uptime Kuma перенаправит вас на панель управления. На этом настройка при первом запуске завершена. Никаких миграций баз данных, никакой проверки электронной почты, никаких мастеров настройки арендаторов.

Шаг 5: Добавьте свои первые мониторы

Нажмите «Добавить новый монитор» в левом верхнем углу. Uptime Kuma поддерживает более 20 типов мониторов. Те, о которых стоит знать с самого начала:

  • HTTP(s) – отслеживает перенаправления, проверяет коды статуса и измеряет время отклика. Хороший вариант по умолчанию для любого общедоступного URL-адреса.
  • HTTP(s) – Ключевое слово – то же, что и HTTP(s), но дополнительно проверяет наличие определённой строки в теле ответа. Позволяет выявить ситуации, когда при отправке запроса «200 OK» приложение работает некорректно.
  • Ping – ICMP-эхо. Полезно для серверов и сетевых устройств, на которых HTTP не доступен.
  • TCP-порт – проверяет, принимает ли порт соединения. Удобно для баз данных, почтовых серверов и пользовательских демонов.
  • DNS – разрешает имя хоста через выбранный резолвер и проверяет правильность ответа. Отлично подходит для обнаружения взломанных записей.

В рамках этого руководства мы добавили четыре монитора: проверку HTTPS для google.com, проверку для api.github.com, ping на 1.1.1.1 и монитор по ключевому слову, который подтверждает наличие строки «Ubuntu» на сайте ubuntu.com. Форма добавления монитора выглядит следующим образом:

По умолчанию интервалы составляют 60 секунд, что вполне подходит для лабораторных условий. При развёртывании в производственной среде для критически важных сервисов интервал обычно увеличивают до 20–30 секунд, а для всего остального — до 5 минут, чтобы база данных SQLite оставалась компактной.

Через минуту-другую все мониторы на панели инструментов показывают зелёный статус:

Цветные полосы под каждым монитором в подробном виде отображают последние 30 проверок. Красные промежутки означают сбои, желтые — ожидание, зелёные — работоспособность. При наведении курсора отображаются время отклика и код статуса для данной конкретной проверки.

Шаг 6: Опубликуйте общедоступную страницу статуса

Страницы статуса — это то, что вы предоставляете заинтересованным лицам, не обладающим техническими знаниями, чтобы они перестали писать вам по электронной почте в 3 часа ночи с вопросом «сайт не работает?». Откройте Страницы состояния в верхней панели и нажмите Новая страница состояния.

Укажите понятное название (например, Public Services) и URL-слаг (например, public). Нажмите Далее , чтобы перейти в режим редактирования. Воспользуйтесь Добавить монитор , чтобы добавить каждый сервис, который вы хотите отобразить, затем нажмите «Сохранить».

Отображаемая страница находится по адресу https://kuma.example.com/status/public. Любой, у кого есть ссылка, может её просмотреть, вход в систему не требуется:

Uptime Kuma предоставляет страницу статуса в виде статического HTML-файла с интервалом опроса, поэтому она выдерживает пики трафика, не перегружая бэкенд. В том же окне редактирования вы можете включить баннеры об инцидентах, когда что-то выходит из строя, и снять их, когда проблема устранена. Читатели получают журнал событий, и вам не нужно писать отчет о происшествии.

Шаг 7: Настройка каналов уведомлений

Панель мониторинга, на которую никто не смотрит, бесполезна. Именно благодаря уведомлениям Uptime Kuma оправдывает своё существование. Щелкните по своему имени пользователя в правом верхнем углу, выберите «Настройки», затем «Уведомления», и, наконец, Настроить уведомления.

Основные каналы, которые стоит настроить в первый же день:

  • Telegram: создайте бота с помощью @BotFather, получите токен, отправьте боту одно личное сообщение, затем вставьте токен и свой ID чата. Самый простой способ получения уведомлений на мобильном устройстве.
  • Slack: создайте входящий веб-хук (Incoming Webhook) в своём рабочем пространстве Slack, вставьте URL-адрес, выберите канал. Работает также с инструментами, совместимыми со Slack, такими как Mattermost.
  • Электронная почта (SMTP): укажите локальный Postfix или внешний ретранслятор, например Amazon SES. Полезно в качестве резервного канала на случай, если Slack и Telegram одновременно перестанут работать.
  • Gotify: самостоятельно развернутые push-уведомления. Используйте в паре с приложением Gotify для Android в качестве бесплатной альтернативы Telegram.

После создания записи уведомления установите флажок «Включено по умолчанию» , чтобы каждый новый монитор автоматически его подхватывал. Затем нажмите «Тест» , чтобы сразу отправить тестовое уведомление. Если тест завершится неудачно, ошибка сразу отобразится вместе с возвращённым ответом SMTP или API.

Для каждого существующего монитора откройте окно редактирования и включите уведомления в разделе Уведомления. Uptime Kuma отправляет оповещения при изменении состояния, а не при каждой проверке, поэтому ваш телефон не будет вибрировать каждую минуту.

Усиление безопасности в производственной среде

Приведённой выше настройки достаточно для домашней лаборатории или небольшой команды. Прежде чем предлагать эту систему платным клиентам, необходимо усилить безопасность в нескольких аспектах.

Сделайте резервную копию тома с данными. Вся информация, которой располагает Uptime Kuma, хранится /app/data/kuma.db внутри указанного тома. Ежедневный снэпшот защищает от катастрофических сбоев:

sudo docker run --rm \
  -v uptime-kuma_kuma-data:/data \
  -v /var/backups/kuma:/backup \
  alpine \
  tar czf /backup/kuma-$(date +%F).tar.gz -C /data .

Запланируйте его с помощью таймера systemd или cron, а затем отправляйте архивы за пределы сервера (в S3, с помощью Restic в Backblaze B2, с помощью rsync на другой сервер — решать вам).

Ежеквартально меняйте пароль администратора. Нажмите на своё имя пользователя, «Настройки», «Безопасность», «Изменить пароль». Пока вы находитесь в этом разделе, включите двухфакторную аутентификацию. Uptime Kuma поддерживает TOTP с любым приложением-аутентификатором.

Ограничьте доступ Nginx к /dashboard только для доверенных источников. Если интерфейсом управления пользуется только ваша команда, добавьте allow/deny блок на уровне Nginx. Оставьте /status/* доступным для общего доступа, а остальное ограничьте:

location /dashboard {
    allow 203.0.113.0/24;
    deny all;
    proxy_pass http://127.0.0.1:3001;
    # (include the same proxy_set_header lines as before)
}

Следите за размером файла SQLite. Каждая проверка записывает строку пульса. При интервале в 20 секунд и 50 мониторах объём базы данных превысит 1 ГБ примерно через три месяца. В Uptime Kuma под каждой панелью мониторинга есть кнопка «Очистить данные» под каждым монитором, позволяющую удалить историю, старше выбранного срока. Настройте один раз и больше не беспокойтесь.

Направляйте данные проверок в какое-либо постоянное хранилище. Uptime Kuma предоставляет конечную точку метрик Prometheus по адресу /metrics (защищённый базовой аутентификацией с использованием ваших учетных данных администратора). Сбор данных с вашего существующего сервера Prometheus и создание долгосрочных дашбордов в Grafana, если вы уже используете этот стек. Если же вы предпочитаете единый интерфейс, такие инструменты, как Zabbix или Netdata, обеспечивают мониторинг хостов и сервисов в одном пакете.

На этом развёртывание завершено. Один контейнер, обратный прокси, настоящий сертификат и несколько мониторов. Если вам когда-нибудь этого станет недостаточно, экспортированная резервная копия в формате JSON из «Настройки», «Резервное копирование» перенесёт все мониторы и каналы уведомлений на более мощную машину менее чем за минуту.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *