Всем привет! Сегодня я хочу поделиться полным руководством по развертыванию на своем сервере замечательного 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-сертификат будет обновляться автоматически.
Теперь можно заходить в панель, создавать свой первый монитор и настраивать уведомления в любимый мессенджер. Надеюсь, это руководство было полезным! Успешных вам деплоев
Комментарии (12)
m1skam
05.07.2025 20:25/саркамз-on
# Обновляем пакеты sudo apt update
Видимо не судьба :( в терминале на macos - выдало ошибку.
version: '3.3' services: uptime-kuma:
Так и запишем, docker-compose начинать с 6 пробелов.
/сарказм-off
Если серьезно, то чем это лучше prometheus + blackbox-exporter + grafana? Ну кроме того, что понятно, что меньше настраивать, хотя я думаю, что допустим в VSCode даже на бесплатном copilot, как только вы начнете вводить конфигурацию с prometheus в docker compose файле, он половину всего сам напишет и еще и кофе предложит сделать, хотя про кофе это может только в платной версии, не уверен.
aik
05.07.2025 20:25Видимо не судьба :( в терминале на macos - выдало ошибку.
А причём тут макос если речь про убунту?
чем это лучше prometheus + blackbox-exporter + grafana?
Проще ставится, проще настраивается. Заметно проще. Не надо пытаться всё копать экскаватором, когда вполне достаточно лопаты.
Frankenstine
05.07.2025 20:25А может лучше сразу zabbix?
aik
05.07.2025 20:25Я же сказал - зачем экскаватор, если можно лопатой? Кума - простенькая и красивая "пинговалка". А заббикс - это система мониторинга не для средних умов. Перестанет хватать кумы - тогда можно уже и на заббиксы смотреть, и на графаны, и на что там ещё выше порекомендовали.
Но для дома для семьи кумы за глаза и за уши. Хотя вот инструкция как раз на самом интересном месте обрывается, имело бы смысл несколько примеров мониторов привести, рассказать про то, как оповещения настраивать... Тогда бы может и минусов меньше ставили.
Frankenstine
05.07.2025 20:25Я же сказал - зачем экскаватор, если можно лопатой?
Сначала вы копаете лопатой, а потом понимаете что надо было смотреть в будущее и сразу пригонять экскаватор.
aik
05.07.2025 20:25Вот когда то будущее хотя бы на горизонте покажется - тогда и будем думать об экскаваторе. Нет смысла разбираться с заббиксами только ради того, чтобы три хоста пинговать.
Энтерпрайз-решения дома хороши только тогда, когда ты ими пользуешься на работе и тебе они привычны. Либо у тебя домашний энтерпрайз.
Alexufo
05.07.2025 20:25Если у вас докер коспоуз уже, ну так контейнеризируйте там же и nginx и certbot
mltk
05.07.2025 20:25Ставим докер и докер композ
-
Через докер композ поднимаем 2 контейнера: uptime kuma и Caddy (Caddy -- простецкий enterprise ready веб-сервер с автоматическим подкапотным выпуском и обновлением letsencrypt сертификатов)
Всё!
О чём ещё можно мечтать для ~хоумлаббинга?..
Alexufo
05.07.2025 20:25Не люблю caddy поскольку все равно если нужна тонкая настройка..а ты работаешь с вебом, у тебя задача изучать второй конфиг caddy дополнительно к nginx.. А у caddy справка тоже не мизер.
Да, он морально устарел, но увеличивать стек когда ты все равно работаешь с nginx на проде..
NZaur
Тоже недавно ставил это чудо. Алерты в Слак летят. Только Nginx тоже запихнул в композ.
Хороший гайд!
cyberscoper Автор
Спасибо. Рад стараться :)
Будут еще статьи.