Всем привет! Сегодня я хочу поделиться полным руководством по развертыванию на своем сервере замечательного open-source инструмента для мониторинга — Uptime Kuma.

Если вы устали от ограничений и ценников облачных сервисов вроде UptimeRobot и хотите полный контроль над своими данными, а также красивые дашборды и уведомления в Telegram — это решение для вас. Мы пройдем весь путь: от пустого сервера на Ubuntu до полностью рабочего, защищенного и автоматически запускаемого сервиса мониторинга.
Наш план:
Подготовим сервер и установим Docker.
Запустим Uptime Kuma в Docker-контейнере.
Настроим Nginx как обратный прокси, чтобы получить доступ по доменному имени.
Получим и настроим бесплатный SSL-сертификат от Let's Encrypt для безопасного HTTPS-соединения.
Что нам понадобится:
Сервер с Ubuntu (подойдет любая свежая LTS-версия).
Доменное имя, которое уже указывает на IP-адрес вашего сервера. В нашем примере мы будем использовать status.your-domain.com.
Поехали!
Шаг 1: Подготовка сервера и установка Docker
Начнем с основ. Если у вас уже есть Docker и Docker Compose, этот шаг можно пропустить.
Сначала обновим списки пакетов и установим все необходимое для работы Docker.
# Обновляем пакеты
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Добавляем GPG-ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Добавляем репозиторий Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Устанавливаем Docker Engine и Docker Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Чтобы не вводить sudo каждый раз при работе с Docker, добавим нашего пользователя в группу docker.
sudo usermod -aG docker ${USER}
Важно: После выполнения этой команды нужно выйти из системы и зайти снова, чтобы изменения вступили в силу.
Шаг 2: Запускаем Uptime Kuma в Docker
Использовать docker-compose — это хорошая практика. Вся конфигурация хранится в одном файле, ее легко читать и изменять.
Создадим отдельную папку для нашего проекта и перейдем в нее.
mkdir uptime-kuma cd uptime-kuma
Создадим конфигурационный файл docker-compose.yml.
nano docker-compose.yml
Вставим в него следующее содержимое:
version: '3.3' services: uptime-kuma: image: louislam/uptime-kuma:1 container_name: uptime-kuma volumes: - ./uptime-kuma-data:/app/data ports: - "3001:3001" restart: always
volumes: Самая важная часть. Мы "пробрасываем" папку uptime-kuma-data с нашего сервера внутрь контейнера. В ней будут храниться все настройки и история мониторинга. Данные не потеряются даже при удалении контейнера.
restart: always: Эта директива заставит Docker автоматически запускать контейнер после перезагрузки сервера или в случае сбоя. То, что нам нужно!
Сохраняем файл (Ctrl+X, Y, Enter) и запускаем наш сервис в фоновом режиме:
docker-compose up -d
Вуаля! Uptime Kuma уже работает. Вы можете проверить это, перейдя в браузере по адресу http://<IP-вашего-сервера>:3001. Вы должны увидеть экран первоначальной настройки.
Шаг 3: Настраиваем Nginx как обратный прокси
Доступ по IP и порту — это некрасиво и неудобно. Давайте сделаем так, чтобы наш сервис был доступен по домену status.your-domain.com. Для этого нам понадобится Nginx.
Установим Nginx.
sudo apt install nginx -y
Разрешим трафик в брандмауэре.
sudo ufw allow 'Nginx Full'
Теперь создадим конфигурационный файл Nginx для нашего сайта.
sudo nano /etc/nginx/sites-available/status.your-domain.com
Добавим в него конфигурацию для перенаправления запросов на наш контейнер.
server { listen 80; server_name status.your-domain.com; location / { proxy_pass http://localhost: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; # Эти строки нужны для корректной работы WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
Активируем наш сайт, создав символическую ссылку.
sudo ln -s /etc/nginx/sites-available/status.your-domain.com /etc/nginx/sites-enabled/
(Рекомендуется) Чтобы избежать конфликтов, отключим стандартный сайт Nginx.
sudo rm /etc/nginx/sites-enabled/default
Проверим конфигурацию и перезапустим Nginx.
sudo nginx -t # Если видим "syntax is ok" и "test is successful", то всё отлично sudo systemctl reload nginx
На этом этапе Uptime Kuma уже должен быть доступен по адресу http://status.your-domain.com (к примеру у меня дашборд доступен по Peak Line Service Health ). Остался последний штрих — безопасность.
Шаг 4: Добавляем HTTPS с помощью Let's Encrypt
Никто не любит сайты без замочка в адресной строке. Исправим это с помощью бесплатного сертификата от Let's Encrypt и утилиты Certbot.
Установим Certbot и его плагин для Nginx.
sudo apt install certbot python3-certbot-nginx -y
Запустим Certbot. Он все сделает сам: получит сертификат, автоматически изменит конфигурацию Nginx и настроит автообновление.
sudo certbot --nginx -d status.your-domain.com
Certbot задаст пару вопросов: попросит ввести email и согласиться с условиями. В конце он спросит, нужно ли перенаправлять все HTTP-запросы на HTTPS. Смело выбирайте вариант 2 (Redirect) — это наиболее безопасный вариант.
А что, если что-то пошло не так? Гайд по решению проблем
Идеальный мир существует только в туториалах. В реальности всегда что-то может пойти не по плану. Если вы столкнулись с ошибкой, не паникуйте. Вот чек-лист для поиска и устранения самых частых проблем.
Проблема №1: Сайт не открывается вообще (Connection Timed Out)
Это значит, что ваш запрос просто не доходит до сервера.
Проверьте DNS: Убедитесь, что ваш домен status.your-domain.com действительно указывает на IP-адрес вашего сервера. Самый простой способ — команда ping:
ping status.your-domain.com
IP-адрес в ответе должен совпадать с IP вашего сервера. Если нет — идите в панель управления вашего домена и исправляйте A-запись.
Проверьте брандмауэр (Firewall): Nginx для работы требует открытые порты 80 (HTTP) и 443 (HTTPS). Проверим, открыты ли они:
sudo ufw status
Если в списке нет 80/tcp (ALLOW), 443/tcp (ALLOW) или Nginx Full (ALLOW), добавьте правило:
sudo ufw allow 'Nginx Full'
Проблема №2: Ошибка 502 Bad Gateway
Эта ошибка — классика жанра при настройке обратного прокси. Она означает, что Nginx работает, но не может связаться с приложением, которое находится "за ним" (в нашем случае — с контейнером Uptime Kuma).
Проверьте, запущен ли контейнер:
docker ps
Вы должны увидеть в списке контейнер с именем uptime-kuma и статусом Up. Если его нет, или он постоянно перезапускается (restarting), нужно смотреть его логи.
Посмотрите логи контейнера: Логи — это глаза и уши Docker. Они расскажут, почему контейнер не может запуститься.
# Если вы в папке с docker-compose.yml docker-compose logs -f # Или по имени контейнера docker logs -f uptime-kuma
Ищите в выводе слова Error, failed или permission denied. Часто проблема бывает связана с правами на папку с данными.
Проверьте связь внутри сервера: Убедимся, что с самого сервера Uptime Kuma доступен по внутреннему порту 3001.
curl -I http://localhost:3001
Вы должны получить ответ HTTP/1.1 200 OK или HTTP/1.1 302 Found. Если видите Connection refused, значит, проблема точно в контейнере. Возвращайтесь к пункту 2.
Проблема №3: Ошибка 400 Bad Request при переходе по HTTPS
Эта ошибка обычно возникает после попытки настроить SSL. Она означает, что Nginx получил HTTPS-запрос, но не был готов его обработать как положено (например, не нашел сертификаты).
Проверьте конфигурацию Nginx: Самое главное — убедиться, что Certbot правильно изменил ваш файл конфигурации. Откройте /etc/nginx/sites-available/status.your-domain.com и сравните его с эталонным конфигом. Особое внимание уделите строкам listen 443 ssl; и путям к файлам сертификатов (ssl_certificate и ssl_certificate_key).
Посмотрите логи ошибок Nginx: Nginx очень подробно пишет о своих проблемах.
tail -f /var/log/nginx/error.log
Запустите эту команду и попробуйте обновить страницу в браузере. В логе, скорее всего, появится ошибка, указывающая на конкретную проблему.
"cannot load certificate": Проверьте, что файлы сертификатов действительно существуют по путям, указанным в конфиге (/etc/letsencrypt/live/status.your-domain.com/...).
"bind() to 0.0.0.0:443 failed (98: Address already in use)": Это значит, что какой-то другой процесс уже занял порт 443. Используйте команду sudo ss -tlnp | grep ':443' чтобы найти "захватчика" и остановить его.
После внесения любых исправлений в конфигурацию Nginx не забывайте проверять синтаксис и перезагружать его:
sudo nginx -t
sudo systemctl reload nginx
Надеюсь, этот небольшой гайд по выживанию поможет вам справиться с любыми трудностями.
Заключение
Вот и все! Откройте в браузере https://status.your-domain.com. Вы увидите работающий, защищенный и красивый сервис мониторинга, который принадлежит только вам.
Что мы получили в итоге:
Uptime Kuma, работающий в изолированном Docker-контейнере.
Сервис доступен по вашему домену через защищенное HTTPS-соединение.
Контейнер автоматически запускается после перезагрузки сервера.
SSL-сертификат будет обновляться автоматически.
Теперь можно заходить в панель, создавать свой первый монитор и настраивать уведомления в любимый мессенджер. Надеюсь, это руководство было полезным! Успешных вам деплоев