Search
Write a publication
Pull to refresh

Устанавливаем свой сервис мониторинга Uptime Kuma в Docker с Nginx и бесплатным SSL-сертификатом

Level of difficultyEasy
Reading time6 min
Views5.3K

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

Пример итогового результата.
Пример итогового результата.

Если вы устали от ограничений и ценников облачных сервисов вроде UptimeRobot и хотите полный контроль над своими данными, а также красивые дашборды и уведомления в Telegram — это решение для вас. Мы пройдем весь путь: от пустого сервера на Ubuntu до полностью рабочего, защищенного и автоматически запускаемого сервиса мониторинга.

Наш план:

  1. Подготовим сервер и установим Docker.

  2. Запустим Uptime Kuma в Docker-контейнере.

  3. Настроим Nginx как обратный прокси, чтобы получить доступ по доменному имени.

  4. Получим и настроим бесплатный 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 — это хорошая практика. Вся конфигурация хранится в одном файле, ее легко читать и изменять.

  1. Создадим отдельную папку для нашего проекта и перейдем в нее.

    mkdir uptime-kuma
    cd uptime-kuma 
  2. Создадим конфигурационный файл docker-compose.yml.

    nano docker-compose.yml  
  3. Вставим в него следующее содержимое:

          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 автоматически запускать контейнер после перезагрузки сервера или в случае сбоя. То, что нам нужно!

  4. Сохраняем файл (Ctrl+X, Y, Enter) и запускаем наш сервис в фоновом режиме:

    docker-compose up -d

Вуаля! Uptime Kuma уже работает. Вы можете проверить это, перейдя в браузере по адресу http://<IP-вашего-сервера>:3001. Вы должны увидеть экран первоначальной настройки.

Шаг 3: Настраиваем Nginx как обратный прокси

Доступ по IP и порту — это некрасиво и неудобно. Давайте сделаем так, чтобы наш сервис был доступен по домену status.your-domain.com. Для этого нам понадобится Nginx.

  1. Установим Nginx.

    sudo apt install nginx -y
  2. Разрешим трафик в брандмауэре.

    sudo ufw allow 'Nginx Full'  
  3. Теперь создадим конфигурационный файл Nginx для нашего сайта.

    sudo nano /etc/nginx/sites-available/status.your-domain.com
  4. Добавим в него конфигурацию для перенаправления запросов на наш контейнер.

          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";
        }
    }
        
  5. Активируем наш сайт, создав символическую ссылку.

    sudo ln -s /etc/nginx/sites-available/status.your-domain.com /etc/nginx/sites-enabled/ 
  6. (Рекомендуется) Чтобы избежать конфликтов, отключим стандартный сайт Nginx.

    sudo rm /etc/nginx/sites-enabled/default
  7. Проверим конфигурацию и перезапустим 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.

  1. Установим Certbot и его плагин для Nginx.

    sudo apt install certbot python3-certbot-nginx -y
  2. Запустим Certbot. Он все сделает сам: получит сертификат, автоматически изменит конфигурацию Nginx и настроит автообновление.

    sudo certbot --nginx -d status.your-domain.com

    Certbot задаст пару вопросов: попросит ввести email и согласиться с условиями. В конце он спросит, нужно ли перенаправлять все HTTP-запросы на HTTPS. Смело выбирайте вариант 2 (Redirect) — это наиболее безопасный вариант.

А что, если что-то пошло не так? Гайд по решению проблем

Идеальный мир существует только в туториалах. В реальности всегда что-то может пойти не по плану. Если вы столкнулись с ошибкой, не паникуйте. Вот чек-лист для поиска и устранения самых частых проблем.

Проблема №1: Сайт не открывается вообще (Connection Timed Out)

Это значит, что ваш запрос просто не доходит до сервера.

  1. Проверьте DNS: Убедитесь, что ваш домен status.your-domain.com действительно указывает на IP-адрес вашего сервера. Самый простой способ — команда ping:

    ping status.your-domain.com

    IP-адрес в ответе должен совпадать с IP вашего сервера. Если нет — идите в панель управления вашего домена и исправляйте A-запись.

  2. Проверьте брандмауэр (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).

  1. Проверьте, запущен ли контейнер:

    docker ps
  2. Вы должны увидеть в списке контейнер с именем uptime-kuma и статусом Up. Если его нет, или он постоянно перезапускается (restarting), нужно смотреть его логи.

  3. Посмотрите логи контейнера: Логи — это глаза и уши Docker. Они расскажут, почему контейнер не может запуститься.

    # Если вы в папке с docker-compose.yml
    docker-compose logs -f
    
    # Или по имени контейнера
    docker logs -f uptime-kuma
        

    Ищите в выводе слова Error, failed или permission denied. Часто проблема бывает связана с правами на папку с данными.

  4. Проверьте связь внутри сервера: Убедимся, что с самого сервера 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-запрос, но не был готов его обработать как положено (например, не нашел сертификаты).

  1. Проверьте конфигурацию Nginx: Самое главное — убедиться, что Certbot правильно изменил ваш файл конфигурации. Откройте /etc/nginx/sites-available/status.your-domain.com и сравните его с эталонным конфигом. Особое внимание уделите строкам listen 443 ssl; и путям к файлам сертификатов (ssl_certificate и ssl_certificate_key).

  2. Посмотрите логи ошибок 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-сертификат будет обновляться автоматически.

Теперь можно заходить в панель, создавать свой первый монитор и настраивать уведомления в любимый мессенджер. Надеюсь, это руководство было полезным! Успешных вам деплоев

Tags:
Hubs:
+3
Comments18

Articles