~ 25 минут чтения
https:// и замочком в адресной строке.Наша цель — превратить неудобный и небезопасный адрес в профессиональный и защищённый.
http://1.2.3.4:3000 — Небезопасно, IP-адрес виден, нужно помнить номер порта, выглядит непрофессионально.https://mybot.example.com — Безопасно (шифрование), легко запомнить, стандартный порт, выглядит как настоящий продакшн-продукт.Поздравляю! В прошлом уроке ты проделал огромную работу: твой бот и система мониторинга запущены на сервере через Docker. Ты можешь открыть дашборд Grafana и посмотреть на... пока ещё пустые графики. Но чтобы это сделать, нужно вводить в браузере что-то вроде http://1.2.3.4:3000.
Согласись, это больно. Во-первых, это небезопасно — любой в твоей Wi-Fi сети (например, в кафе) может перехватить данные. Во-вторых, это некрасиво и неудобно. Никто не запомнит этот IP-адрес и порт. Если ты захочешь показать дашборд коллеге или заказчику, придётся отправлять эту абракадабру.
Сегодня мы решим эту проблему раз и навсегда. Мы настроим красивый домен, добавим «зелёный замочек» безопасности и сделаем так, чтобы твой проект выглядел солидно. Готов к магии?
Представь, что твой сервер — это большой отель. Внутри отеля много комнат (сервисов):
3000 живёт Grafana.9090 живёт Prometheus.8080 может жить твой будущий сайт.Когда гость (пользователь) приходит в отель, он не бегает по этажам в поисках нужной комнаты. Он подходит к швейцару на входе. Гость говорит: «Я хочу в Grafana». Швейцар знает, что Grafana живёт в комнате 3000, и провожает гостя туда.
Aha! В этой метафоре Nginx — это наш швейцар. Он встречает все запросы, которые приходят на сервер, и в зависимости от домена или адреса, направляет их в нужную «комнату» (порт). Этот процесс и называется reverse proxy. Пользователю достаточно знать только главный адрес отеля (mybot.example.com), а не внутренние номера комнат.
Давай установим 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!». Если видишь — швейцар нанят и стоит на посту.
Теперь научим 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).
Что мы здесь написали?
listen 80; — Слушать все входящие запросы на стандартном HTTP-порту 80.server_name mybot.example.com; — Реагировать только на запросы, приходящие на этот домен.location / { ... } — Для всех запросов к этому домену...proxy_pass http://127.0.0.1:3000; — ...перенаправлять их на адрес http://127.0.0.1:3000, где работает наша Grafana.proxy_set_header — это «служебные записки» для Grafana, чтобы она знала, от какого реального пользователя пришёл запрос.Теперь нужно «включить» этот конфиг, создав на него символическую ссылку, проверить конфигурацию на ошибки и перезагрузить 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! Но пока без замочка.
Сейчас будет самый приятный момент. Мы получим и установим SSL-сертификат одной командой.
Сначала установим Certbot и его плагин для Nginx:
sudo apt install certbot python3-certbot-nginx
А теперь — магия! Запускаем Certbot для нашего домена:
sudo certbot --nginx -d mybot.example.com
Certbot задаст тебе несколько вопросов:
2: Redirect. Это автоматически будет перенаправлять всех, кто заходит по http://, на безопасный https://.Aha! После этого Certbot сам изменит твой конфигурационный файл Nginx, добавив туда всё необходимое для работы SSL. Тебе не нужно разбираться в сложных настройках шифрования. Всё уже сделано!
Обнови страницу http://mybot.example.com в браузере. Тебя должно автоматически перекинуть на https://mybot.example.com, и ты увидишь заветный замочек в адресной строке. Поздравляю, твой дашборд теперь в безопасности!
Сертификаты Let's Encrypt действительны 90 дней. Это сделано для повышения безопасности. Но не волнуйся, тебе не придётся обновлять их вручную каждые три месяца. Certbot уже настроил автоматическое продление.
В современных системах он использует systemd timer. Давай проверим, что он активен:
sudo systemctl status certbot.timer
Ты должен увидеть, что таймер active (waiting). Это значит, что система будет регулярно запускать проверку и обновлять сертификаты, у которых скоро истечёт срок действия.
Чтобы убедиться, что сам процесс обновления работает, можно запустить «сухой прогон»:
sudo certbot renew --dry-run
Если команда завершилась без ошибок — ты можешь спать спокойно. Твои сертификаты будут обновляться автоматически.
Твой дашборд теперь доступен всему миру по красивому адресу. Но что, если ты не хочешь, чтобы кто угодно мог на него зайти? Давай добавим простой, но надёжный уровень защиты — базовую аутентификацию (запрос логина и пароля).
Сначала установим утилиту для создания файла с паролями:
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.
Отлично! Ты проделал путь от 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 →