Вебхуки и reverse-proxy
ЮKassa, CryptoBot, Platega, Heleket и Tribute сообщают об оплате вебхуком — запросом на ваш сервер. Туда же панель Remnawave шлёт свои события. Бот принимает их на порту 8080 внутри контейнера (порт меняется в Система → 🔗 Вебхуки → 🔌 Порт бота).
| Путь | Для чего |
|---|---|
/webhook/yookassa |
ЮKassa |
/webhook/cryptobot |
CryptoBot |
/webhook/platega |
Platega |
/webhook/heleket |
Heleket |
/webhook/tribute |
Tribute |
/webhook/remnawave |
события панели |
/healthz |
проверка «жив ли бот» |
Как вывести бота наружу
Заголовок раздела «Как вывести бота наружу»В боте это экран Система → 🔗 Вебхуки. Вариантов два.
A. За прокси панели — если бот стоит на одном сервере с панелью. Порты 80/443 уже заняты прокси панели (Caddy/nginx), встроенный HTTPS не нужен. Кнопка 📋 Инструкция выдаст готовый блок для Caddy или nginx: он направляет /webhook/ на remnabot:8080. Добавьте его в конфиг прокси и перезапустите прокси. Затем задайте 🔗 Базовый URL — например, https://panel.example.com.
B. Встроенный HTTPS — если бот на отдельном сервере и порты 80/443 свободны. Бот сам получит сертификат Let’s Encrypt.
- Направьте домен A-записью на сервер бота (например,
bot.example.com). - 🌐 Публичный HTTPS → 🔗 Домен → 🚀 Применить. Бот откроет порты 80/443 и перезапустится; сертификат выпустится при первом запросе.
Если порты заняты, бот не применит настройку и предложит вариант A.
Адреса для платёжек
Заголовок раздела «Адреса для платёжек»Когда домен или базовый URL задан, на экране 🔗 Вебхуки появятся готовые адреса. Их нужно вписать в кабинет провайдера:
- ЮKassa:
https://ВАШ_ДОМЕН/webhook/yookassa - CryptoBot:
https://ВАШ_ДОМЕН/webhook/cryptobot - Platega:
https://ВАШ_ДОМЕН/webhook/platega - Tribute:
https://ВАШ_ДОМЕН/webhook/tribute— подробно в Tribute - Heleket: вписывать не нужно — бот сам передаёт адрес
https://ВАШ_ДОМЕН/webhook/heleketв каждом счёте
Вебхуку на слово бот не верит. Оплату ЮKassa и Platega он перепроверяет запросом к провайдеру, у CryptoBot, Heleket и Tribute сверяет подпись. Поддельный запрос подписку не выдаст.
Если вебхук не дошёл, бот сам периодически перепроверяет неоплаченные счета ЮKassa, CryptoBot, Platega и Heleket и довыдаёт подписку. Tribute сам повторяет доставку. Но вебхук всё равно стоит настроить: с ним подписка выдаётся сразу.
Вебхук панели
Заголовок раздела «Вебхук панели»Нужен для уведомлений пользователям: «подписка скоро истечёт», «подписка истекла», «трафик исчерпан», «доступ приостановлен/восстановлен», а также для отчётов торрент-блокера.
- В
.envпанели Remnawave:WEBHOOK_ENABLED=trueWEBHOOK_URL=https://ВАШ_ДОМЕН/webhook/remnawaveWEBHOOK_SECRET_HEADER=длинная-случайная-строка - Ту же строку впишите в боте: Система → 🔗 Вебхуки → 🔑 Секрет панели. Без секрета отчёты торрент-блокера не принимаются.
- На панели 2.8.0 и новее для напоминаний об окончании включите ещё
EXPIRATION_NOTIFICATIONS_ENABLED=true.
Reverse-proxy и безопасность (рекомендации для прода)
Заголовок раздела «Reverse-proxy и безопасность (рекомендации для прода)»Для продакшена, особенно с мини-аппом и кабинетом, лучше поставить перед ботом свой reverse-proxy (Caddy / nginx) или Cloudflare, а не выставлять бота в интернет напрямую. Советы:
- Wildcard-сертификат
*.ваш-доменна прокси. Сертификат на конкретный хост попадает в публичные логи (crt.sh) — по ним кабинет легко найти. - Бот без root. За прокси боту не нужны порты 80/443 — держите его на
127.0.0.1:8080. - Фаервол. Наружу только 80/443. За Cloudflare пускайте на сервер только его адреса — так реальный IP не виден сканерам.
- fail2ban / CrowdSec на прокси против перебора паролей и сканирования. У кабинета есть и свой лимит: 15 попыток входа за 5 минут с одного адреса.
- Разные домены для кабинета, панели и страницы подписки.
- CAA-запись в DNS, чтобы сертификат на ваш домен мог выпустить только ваш центр сертификации.
Пример nginx для кабинета на отдельном поддомене (бот на 127.0.0.1:8080):
server { listen 443 ssl; server_name cab.example.com; ssl_certificate /etc/ssl/wildcard.pem; ssl_certificate_key /etc/ssl/wildcard.key;
# Чек об оплате — до 12 МБ; по умолчанию nginx пускает только 1 МБ. client_max_body_size 16m;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; # обязательно proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr;
# Медленная загрузка чека с телефона не должна обрываться. proxy_request_buffering off; proxy_read_timeout 120s; proxy_send_timeout 120s; }}Если отдать боту весь домен (location /) нельзя, проксируйте на тот же порт отдельные пути: /webhook/, /miniapp/, /api/, путь кабинета (по умолчанию /cabinet/), /flags/ и /brand/ (логотип).
Для входа в кабинет через Telegram укажите домен кабинета у @BotFather командой /setdomain.