← Production Mastery
🏠 Главная 📚 Все курсы 🎯 RVV proof 📊 Paper proof

Урок 5 — Nginx reverse proxy + SSL

Урок 5 из 10 · Production Mastery

🟢 Не теория — наш живой бот: RVV Hunter MTF работает прямо сейчас (WR 66%, +$141 за 15 дней). Всё что в этом уроке — настроено на нашей боевой системе.

Урок 5: Открываем дашборд миру: Nginx + SSL-сертификат

~ 25 минут чтения

📖 Термины этого урока

❌ До / ✅ После

Наша цель — превратить неудобный и небезопасный адрес в профессиональный и защищённый.


История: Боль одного URL

Поздравляю! В прошлом уроке ты проделал огромную работу: твой бот и система мониторинга запущены на сервере через Docker. Ты можешь открыть дашборд Grafana и посмотреть на... пока ещё пустые графики. Но чтобы это сделать, нужно вводить в браузере что-то вроде http://1.2.3.4:3000.

Согласись, это больно. Во-первых, это небезопасно — любой в твоей Wi-Fi сети (например, в кафе) может перехватить данные. Во-вторых, это некрасиво и неудобно. Никто не запомнит этот IP-адрес и порт. Если ты захочешь показать дашборд коллеге или заказчику, придётся отправлять эту абракадабру.

Сегодня мы решим эту проблему раз и навсегда. Мы настроим красивый домен, добавим «зелёный замочек» безопасности и сделаем так, чтобы твой проект выглядел солидно. Готов к магии?

Часть 1: Что такое Reverse Proxy? Метафора отеля

Представь, что твой сервер — это большой отель. Внутри отеля много комнат (сервисов):

Когда гость (пользователь) приходит в отель, он не бегает по этажам в поисках нужной комнаты. Он подходит к швейцару на входе. Гость говорит: «Я хочу в Grafana». Швейцар знает, что Grafana живёт в комнате 3000, и провожает гостя туда.

Aha! В этой метафоре Nginx — это наш швейцар. Он встречает все запросы, которые приходят на сервер, и в зависимости от домена или адреса, направляет их в нужную «комнату» (порт). Этот процесс и называется reverse proxy. Пользователю достаточно знать только главный адрес отеля (mybot.example.com), а не внутренние номера комнат.

Часть 2: Устанавливаем швейцара — Nginx

Давай установим Nginx на наш сервер Hetzner (или любой другой с Ubuntu/Debian). Подключись к серверу по SSH и выполни следующие команды.

Сначала обновим список пакетов:

sudo apt update

Теперь установим Nginx:

sudo apt install nginx

После установки добавим Nginx в автозагрузку, чтобы он стартовал вместе с сервером, и запустим его:

sudo systemctl enable nginx
sudo systemctl start nginx

Проверка: Открой в браузере IP-адрес своего сервера (например, http://1.2.3.4). Ты должен увидеть страницу «Welcome to nginx!». Если видишь — швейцар нанят и стоит на посту.

Часть 3: Обучаем швейцара — настраиваем Reverse Proxy

Теперь научим Nginx перенаправлять запросы с нашего домена на Grafana, которая работает на порту 3000.

Важно: Перед этим шагом убедись, что твой домен (например, mybot.example.com) уже направлен на IP-адрес твоего сервера. Это делается в настройках DNS у твоего регистратора доменов. Обычно нужно создать A-запись.

Создадим конфигурационный файл для нашего сайта:

sudo nano /etc/nginx/sites-available/mybot.example.com

Вставь в этот файл следующую конфигурацию. Не забудь заменить mybot.example.com на свой домен.

server {
    listen 80;
    server_name mybot.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

Сохрани файл (Ctrl+X, затем Y, затем Enter).

Что мы здесь написали?

Теперь нужно «включить» этот конфиг, создав на него символическую ссылку, проверить конфигурацию на ошибки и перезагрузить Nginx.

sudo ln -s /etc/nginx/sites-available/mybot.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Если nginx -t показал "test is successful", то всё отлично. Теперь открой в браузере http://mybot.example.com. Ты должен увидеть свою Grafana! Но пока без замочка.

Часть 4: Добавляем магии — бесплатный SSL от Let's Encrypt

Сейчас будет самый приятный момент. Мы получим и установим SSL-сертификат одной командой.

Сначала установим Certbot и его плагин для Nginx:

sudo apt install certbot python3-certbot-nginx

А теперь — магия! Запускаем Certbot для нашего домена:

sudo certbot --nginx -d mybot.example.com

Certbot задаст тебе несколько вопросов:

  1. Попросит ввести email для уведомлений (важно, если сертификат не сможет обновиться).
  2. Попросит согласиться с условиями использования.
  3. Самый важный вопрос: Предложит настроить редирект с HTTP на HTTPS. Выбери вариант 2: Redirect. Это автоматически будет перенаправлять всех, кто заходит по http://, на безопасный https://.

Aha! После этого Certbot сам изменит твой конфигурационный файл Nginx, добавив туда всё необходимое для работы SSL. Тебе не нужно разбираться в сложных настройках шифрования. Всё уже сделано!

Обнови страницу http://mybot.example.com в браузере. Тебя должно автоматически перекинуть на https://mybot.example.com, и ты увидишь заветный замочек в адресной строке. Поздравляю, твой дашборд теперь в безопасности!

Часть 5: Настраиваем автопродление

Сертификаты Let's Encrypt действительны 90 дней. Это сделано для повышения безопасности. Но не волнуйся, тебе не придётся обновлять их вручную каждые три месяца. Certbot уже настроил автоматическое продление.

В современных системах он использует systemd timer. Давай проверим, что он активен:

sudo systemctl status certbot.timer

Ты должен увидеть, что таймер active (waiting). Это значит, что система будет регулярно запускать проверку и обновлять сертификаты, у которых скоро истечёт срок действия.

Чтобы убедиться, что сам процесс обновления работает, можно запустить «сухой прогон»:

sudo certbot renew --dry-run

Если команда завершилась без ошибок — ты можешь спать спокойно. Твои сертификаты будут обновляться автоматически.

Часть 6: Бонус — закрываем дашборд паролем

Твой дашборд теперь доступен всему миру по красивому адресу. Но что, если ты не хочешь, чтобы кто угодно мог на него зайти? Давай добавим простой, но надёжный уровень защиты — базовую аутентификацию (запрос логина и пароля).

Сначала установим утилиту для создания файла с паролями:

sudo apt install apache2-utils

Теперь создадим файл с паролем. Команда спросит у тебя пароль для пользователя admin. Флаг -c означает «создать файл» — используй его только для первого пользователя.

sudo htpasswd -c /etc/nginx/.htpasswd admin

Теперь добавим две строки в наш конфиг Nginx. Открой его снова:

sudo nano /etc/nginx/sites-available/mybot.example.com

Найди секцию location / { ... } и добавь в неё две строки:

server {
    # ... тут много строк, которые добавил certbot ...
    server_name mybot.example.com;

    location / {
        # Добавляем эти две строки
        auth_basic "Admin Area";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        # ... и остальные proxy_set_header ...
    }
    # ... тут тоже могут быть строки от certbot ...
}

Сохрани файл и перезагрузи Nginx:

sudo systemctl reload nginx

Теперь при попытке открыть https://mybot.example.com браузер покажет окно с запросом логина и пароля. Введи admin и пароль, который ты создал. Только после этого Nginx пропустит тебя к Grafana.


Подведём итог и... Cliffhanger

Отлично! Ты проделал путь от http://1.2.3.4:3000 до защищённого паролем https://mybot.example.com. Теперь у твоего проекта есть профессиональная и безопасная точка входа. Ты научился управлять трафиком с помощью Nginx и автоматически обеспечивать безопасность с помощью Let's Encrypt.

Но подожди... ты заходишь на свой красивый, безопасный, защищённый паролем дашборд и видишь... пустые графики. Данных нет. Твой бот работает, система мониторинга запущена, но они пока не «разговаривают» друг с другом.

В следующем уроке мы это исправим. Мы оживим наш дашборд: настроим сбор метрик с бота и построим первые графики, которые покажут, как он себя чувствует в реальном времени.

→ Перейти к Уроку 6: Настройка дашборда Grafana для мониторинга бота

[tokens: in=444 out=3438 thinking=2031 | cost=$0.0552]

Хочешь больше? Полный курс AI Agents включает Production-модуль + 27 других уроков

AI Agents $199 →