Update README.md
This commit is contained in:
@@ -2,8 +2,7 @@
|
||||
|
||||
<div align="center">
|
||||
|
||||
<img width="1024" height="1024" alt="ChatGPT Image 23 окт 2025 г , 13_18_33" src="https://github.com/user-attachments/assets/17ad0128-231d-4553-9f4b-ce0644da796c" />
|
||||
|
||||
<img width="1024" height="1024" alt="ChatGPT Image 23 окт 2025 г , 13_18_33" src="https://github.com/user-attachments/assets/17ad0128-231d-4553-9f4b-ce0644da796c" />
|
||||
|
||||
**🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API**
|
||||
|
||||
@@ -14,7 +13,7 @@
|
||||
[](LICENSE)
|
||||
[](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/stargazers)
|
||||
|
||||
[🚀 Быстрый старт](#-быстрый-старт) • [📖 Функционал](#-функционал) • [🐳 Docker](#-docker-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество)
|
||||
[🚀 Быстрый старт](#-быстрый-старт) • [📖 Функционал](#-функционал) • [Docker](#-docker-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество)
|
||||
|
||||
</div>
|
||||
|
||||
@@ -38,12 +37,12 @@
|
||||
- 🎯 **Готовое решение** - разверни за 5 минут, начни продавать сегодня
|
||||
- 💰 **Многоканальные платежи** - Telegram Stars + Tribute + CryptoBot + Heleket + YooKassa (СБП + карты) + MulenPay + PayPalych (СБП + карты) + Platega (карты + СБП) + WATA
|
||||
- 🔄 **Автоматизация 99%** - от регистрации до продления подписок
|
||||
- - 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки
|
||||
- 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки
|
||||
- 📊 **Детальная аналитика** - полная картина вашего бизнеса
|
||||
- 💬 **Уведомления в топики** об: Активация триала 💎 Покупка подписки 🔄 Конверсия из триала в платную ⏰ Продление подписки 💰 Пополнение баланса 🚧 Включении тех работ ♻️ Появлении новой версии бота
|
||||
|
||||
### 🎛️ **Гибкость конфигурации**
|
||||
- 🌍 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор
|
||||
- 🌐 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор
|
||||
- 📱 **Управление устройствами** - от 1 до неограниченного количества
|
||||
- 📊 **Режимы продажи трафика** - фиксированный лимит или выбор пакетов
|
||||
- 🎁 **Промо-система** - коды на деньги, дни подписки, триал-периоды
|
||||
@@ -51,13 +50,13 @@
|
||||
- 🛒 **Умная корзина** - сохранение параметров подписки при недостатке баланса
|
||||
|
||||
### 💪 **Enterprise готовность**
|
||||
- 🏗️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура
|
||||
- 🗃️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура
|
||||
- 🔒 **Безопасность** - интеграция с системой защиты панели через куки-аутентификацию
|
||||
- 📈 **Масштабируемость** - от стартапа до крупного бизнеса
|
||||
- 🔧 **Мониторинг** - автоматическое управление режимом тех. работ
|
||||
- 🛡️ **Защита панели** - поддержка [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy)
|
||||
- 🗄️ **Бекапы/Восстановление** - автобекапы и восстановление бд прямо в боте с уведомлениями в топики
|
||||
- ✍️ **Проверка на подписку** - проверяет подписку на канал
|
||||
- ✔️ **Проверка на подписку** - проверяет подписку на канал
|
||||
- 🔄 **Автосинхронизация** - фоновая синхронизация подписок и серверов(сквадов) с Remnawave по расписанию
|
||||
|
||||
### 📚 Поддерживаемые методы авторизации
|
||||
@@ -83,7 +82,6 @@ mkdir -p ./logs ./data ./data/backups ./data/referral_qr
|
||||
chmod -R 755 ./logs ./data
|
||||
sudo chown -R 1000:1000 ./logs ./data
|
||||
|
||||
|
||||
# 3. make up # Поднять контейнеры
|
||||
|
||||
make help # Показать все команды
|
||||
@@ -91,11 +89,9 @@ make down # Остановить контейнеры
|
||||
make reload # Перезапустить
|
||||
make reload-follow # Перезапустить с логами
|
||||
make test # Запустить тесты
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 🐳 Ручной Docker запуск
|
||||
### Ручной Docker запуск
|
||||
|
||||
Если не хочется пользоваться мастером, можно настроить всё вручную:
|
||||
|
||||
@@ -122,21 +118,9 @@ docker compose logs
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Настройка webhook-режима и обратного прокси
|
||||
## 🌐 Настройка веб-сервера и обратного проксирования
|
||||
|
||||
> Встроенный FastAPI-сервер теперь обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт.
|
||||
|
||||
### ♻️ Миграция со старой схемы (несколько портов)
|
||||
|
||||
Если бот уже развернут в режиме polling или с отдельными контейнерами для `payments-webhook`, выполните переход на единую схему:
|
||||
|
||||
1. **Обновите `.env`:** установите `BOT_RUN_MODE=webhook` (или `both` для гибридного режима), задайте `WEBHOOK_URL`, `WEBHOOK_PATH` и обязательно сгенерируйте собственный `WEBHOOK_SECRET_TOKEN` командой `openssl rand -hex 32`.
|
||||
2. **Проверьте `docker-compose.*`:** оставьте публикацию только порта `8080` у сервиса `remnawave_bot`. Все значения `*_WEBHOOK_PORT` теперь используются лишь для обратной совместимости и могут быть удалены.
|
||||
3. **Обновите прокси:** перенаправляйте *все* пути (`/webhook`, `/yookassa-webhook`, `/cryptobot-webhook`, `/miniapp/static`, `/app-config.json` и т.д.) на один upstream `remnawave_bot:8080`. Примеры Caddy/nginx ниже можно адаптировать к текущей инфраструктуре.
|
||||
4. **Перезапустите сервисы:** `docker compose up -d --force-recreate bot` и затем перезагрузите прокси. После запуска бот автоматически зарегистрирует новый webhook.
|
||||
5. **Проверьте здоровье:** `curl http://localhost:8080/health/unified` (или `/health`, если административное API отключено) и `curl http://localhost:8080/health/telegram-webhook`. Убедитесь, что в логах нет ошибок регистрации webhook.
|
||||
|
||||
После миграции старые контейнеры/сервисы для отдельных вебхуков можно удалить.
|
||||
> Встроенный FastAPI-сервер обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт.
|
||||
|
||||
### 1. Выбор режима запуска
|
||||
|
||||
@@ -144,9 +128,41 @@ docker compose logs
|
||||
|----------------|------------|---------------------|
|
||||
| `polling` | Бот опрашивает Telegram через long polling. HTTP-сервер можно не поднимать. | Локальная отладка или отсутствие внешнего HTTPS. |
|
||||
| `webhook` | Aiogram получает апдейты только через вебхук. | Продакшн и серверы за HTTPS-прокси. |
|
||||
| `both` | Одновременно работают polling и webhook. | Миграция с polling на webhook или повышенная отказоустойчивость. |
|
||||
| `both` | Одновременно работают polling и webhook. | Тестирование или повышенная отказоустойчивость. |
|
||||
|
||||
### 2. Переменные окружения для webhook
|
||||
### 2. Минимальные настройки для webhook
|
||||
|
||||
Для запуска бота в режиме webhook минимально необходимы следующие параметры в `.env`:
|
||||
|
||||
```env
|
||||
# Обязательные базовые настройки
|
||||
BOT_TOKEN=1234567890:AABBCCdd...
|
||||
ADMIN_IDS=123456789,987654321
|
||||
|
||||
# Настройки webhook
|
||||
BOT_RUN_MODE=webhook
|
||||
WEBHOOK_URL=https://hooks.domain.com
|
||||
WEBHOOK_PATH=/webhook
|
||||
WEBHOOK_SECRET_TOKEN=super-secret-token
|
||||
|
||||
# Настройки Web API
|
||||
WEB_API_ENABLED=true
|
||||
WEB_API_PORT=8080
|
||||
WEB_API_ALLOWED_ORIGINS=https://miniapp.example.com
|
||||
WEB_API_DEFAULT_TOKEN=super-secret-token
|
||||
|
||||
# Настройки Remnawave
|
||||
REMNAWAVE_API_URL=https://your-panel.com
|
||||
REMNAWAVE_API_KEY=your_api_key
|
||||
```
|
||||
|
||||
**Важно:**
|
||||
- `WEBHOOK_SECRET_TOKEN` - сгенерируйте командой `openssl rand -hex 32`
|
||||
- `WEB_API_DEFAULT_TOKEN` - сгенерируйте командой `openssl rand -hex 32`
|
||||
- `WEBHOOK_URL` должен быть доступен извне по HTTPS
|
||||
- `WEB_API_ALLOWED_ORIGINS` - укажите домен, где будет размещена миниапка
|
||||
|
||||
### 3. Полные настройки webhook (опционально)
|
||||
|
||||
```env
|
||||
BOT_RUN_MODE=webhook
|
||||
@@ -173,47 +189,107 @@ MINIAPP_CUSTOM_URL=https://bot.example.com/miniapp
|
||||
|
||||
После изменения `.env` перезапустите сервис: `docker compose up -d remnawave_bot`.
|
||||
|
||||
### 3. Подготовка Docker-сети
|
||||
### 4. Настройка Docker-сетей
|
||||
|
||||
`docker-compose.yml` создаёт сеть `bot_network`. Прокси должен находиться в той же сети, чтобы обращаться к контейнеру по имени `remnawave_bot`.
|
||||
#### Вариант 1: Бот на отдельном сервере
|
||||
|
||||
```bash
|
||||
docker network ls | grep bot_network || docker network create bot_network
|
||||
docker network connect bot_network <proxy_container_name>
|
||||
```
|
||||
|
||||
Если прокси стартует отдельным compose-файлом, объявите сеть внешней:
|
||||
Если бот запускается на отдельном сервере (не там, где панель Remnawave), используйте стандартную конфигурацию:
|
||||
|
||||
**docker-compose.yml бота:**
|
||||
```yaml
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
container_name: remnawave_bot_db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-remnawave_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123}
|
||||
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- bot_network
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: remnawave_bot_redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
networks:
|
||||
- bot_network
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
bot:
|
||||
build: .
|
||||
container_name: remnawave_bot
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
DOCKER_ENV: "true"
|
||||
DATABASE_MODE: "auto"
|
||||
POSTGRES_HOST: "postgres"
|
||||
POSTGRES_PORT: "5432"
|
||||
POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}"
|
||||
POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}"
|
||||
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}"
|
||||
REDIS_URL: "redis://redis:6379/0"
|
||||
TZ: "Europe/Moscow"
|
||||
LOCALES_PATH: "${LOCALES_PATH:-/app/locales}"
|
||||
volumes:
|
||||
- ./logs:/app/logs:rw
|
||||
- ./data:/app/data:rw
|
||||
- ./locales:/app/locales:rw
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- ./vpn_logo.png:/app/vpn_logo.png:ro
|
||||
ports:
|
||||
- "${WEB_API_PORT:-8080}:8080"
|
||||
networks:
|
||||
- bot_network
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8080/health\", timeout=5)' || exit 1"]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
driver: local
|
||||
redis_data:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
bot_network:
|
||||
external: true
|
||||
name: remnawave_bot_network
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
gateway: 172.20.0.1
|
||||
```
|
||||
|
||||
### 4. Проверка здоровья
|
||||
|
||||
Статические файлы миниапки автоматически монтируются из каталога `MINIAPP_STATIC_PATH` (по умолчанию `miniapp/`) и доступны по пути `/miniapp/static`.
|
||||
|
||||
Проверьте, что единый сервер отвечает:
|
||||
|
||||
```bash
|
||||
curl -s https://bot.example.com/health/unified | jq
|
||||
```
|
||||
|
||||
Полезные диагностические endpoints:
|
||||
|
||||
- `/health/unified` — агрегированный статус (режим бота, очередь Telegram, наличие миниапки и платежей). Когда административное API отключено, тот же статус доступен по `/health`.
|
||||
- `/health/telegram-webhook` — состояние очереди Telegram webhook.
|
||||
- `/health/payment-webhooks` — какие платёжные интеграции активированы.
|
||||
|
||||
### 5. Swagger и документация
|
||||
|
||||
- Включите `WEB_API_DOCS_ENABLED=true`, если нужно открыть Swagger UI и OpenAPI. После перезапуска сервиса станут доступны эндпоинты `/docs`, `/doc` (редирект для обратной совместимости), `/redoc` и `/openapi.json`.
|
||||
- Не забудьте проксировать эти пути через внешний HTTPS-прокси вместе с остальными эндпоинтами бота.
|
||||
- В продакшене держите `WEB_API_DOCS_ENABLED=false`, чтобы документация не была публичной. При необходимости включайте временно или защищайте прокси базовой авторизацией/IP-фильтрацией.
|
||||
|
||||
### 6. Пример Caddy-конфига
|
||||
|
||||
**docker-compose.yml для Caddy (отдельный файл):**
|
||||
```yaml
|
||||
services:
|
||||
caddy:
|
||||
@@ -236,9 +312,143 @@ volumes:
|
||||
|
||||
networks:
|
||||
bot_network:
|
||||
name: remnawave_bot_network
|
||||
external: true
|
||||
```
|
||||
|
||||
#### Вариант 2: Бот на одном сервере с панелью Remnawave
|
||||
|
||||
Если бот и панель Remnawave запускаются на одном сервере, подключите бота к сети панели:
|
||||
|
||||
**docker-compose.yml бота:**
|
||||
```yaml
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
container_name: remnawave_bot_db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-remnawave_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123}
|
||||
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- bot_network
|
||||
- remnawave-network # Подключаем к сети панели
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: remnawave_bot_redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
networks:
|
||||
- bot_network
|
||||
- remnawave-network # Подключаем к сети панели
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
bot:
|
||||
build: .
|
||||
container_name: remnawave_bot
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
DOCKER_ENV: "true"
|
||||
DATABASE_MODE: "auto"
|
||||
POSTGRES_HOST: "postgres"
|
||||
POSTGRES_PORT: "5432"
|
||||
POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}"
|
||||
POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}"
|
||||
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}"
|
||||
REDIS_URL: "redis://redis:6379/0"
|
||||
TZ: "Europe/Moscow"
|
||||
LOCALES_PATH: "${LOCALES_PATH:-/app/locales}"
|
||||
volumes:
|
||||
- ./logs:/app/logs:rw
|
||||
- ./data:/app/data:rw
|
||||
- ./locales:/app/locales:rw
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- ./vpn_logo.png:/app/vpn_logo.png:ro
|
||||
ports:
|
||||
- "${WEB_API_PORT:-8080}:8080"
|
||||
networks:
|
||||
- bot_network
|
||||
- remnawave-network # Подключаем к сети панели
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8080/health\", timeout=5)' || exit 1"]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
driver: local
|
||||
redis_data:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
bot_network:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
gateway: 172.20.0.1
|
||||
|
||||
remnawave-network:
|
||||
name: remnawave-network
|
||||
external: true # Используем существующую сеть панели
|
||||
```
|
||||
|
||||
**Важно:**
|
||||
- Сеть `remnawave-network` должна быть создана панелью Remnawave
|
||||
- В `.env` укажите `REMNAWAVE_API_URL=http://remnawave:3000` (обращение внутри Docker-сети)
|
||||
- Бот сможет напрямую общаться с панелью без внешних запросов
|
||||
|
||||
### 5. Проверка здоровья
|
||||
|
||||
Статические файлы миниапки автоматически монтируются из каталога `MINIAPP_STATIC_PATH` (по умолчанию `miniapp/`) и доступны по пути `/miniapp/static`.
|
||||
|
||||
Проверьте, что единый сервер отвечает:
|
||||
|
||||
```bash
|
||||
curl -s https://bot.example.com/health/unified | jq
|
||||
```
|
||||
|
||||
Полезные диагностические endpoints:
|
||||
|
||||
- `/health/unified` — агрегированный статус (режим бота, очередь Telegram, наличие миниапки и платежей). Когда административное API отключено, тот же статус доступен по `/health`.
|
||||
- `/health/telegram-webhook` — состояние очереди Telegram webhook.
|
||||
- `/health/payment-webhooks` — какие платёжные интеграции активированы.
|
||||
|
||||
### 6. Swagger и документация
|
||||
|
||||
- Включите `WEB_API_DOCS_ENABLED=true`, если нужно открыть Swagger UI и OpenAPI. После перезапуска сервиса станут доступны эндпоинты `/docs`, `/doc` (редирект для обратной совместимости), `/redoc` и `/openapi.json`.
|
||||
- Не забудьте проксировать эти пути через внешний HTTPS-прокси вместе с остальными эндпоинтами бота.
|
||||
- В продакшене держите `WEB_API_DOCS_ENABLED=false`, чтобы документация не была публичной. При необходимости включайте временно или защищайте прокси базовой авторизацией/IP-фильтрацией.
|
||||
|
||||
### 7. Пример Caddy-конфига
|
||||
|
||||
`Caddyfile`:
|
||||
|
||||
```caddy
|
||||
@@ -249,7 +459,7 @@ api.domain.com {
|
||||
@config path /app-config.json
|
||||
header @config Access-Control-Allow-Origin "*"
|
||||
|
||||
reverse_proxy localhost:8080 {
|
||||
reverse_proxy remnawave_bot:8080 {
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
transport http {
|
||||
@@ -264,7 +474,7 @@ podpiska.domain.com {
|
||||
|
||||
# API эндпоинты /miniapp/* в приложение
|
||||
handle /miniapp/* {
|
||||
reverse_proxy localhost:8080 {
|
||||
reverse_proxy remnawave_bot:8080 {
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
transport http {
|
||||
@@ -276,7 +486,7 @@ podpiska.domain.com {
|
||||
# app-config.json с CORS
|
||||
handle /app-config.json {
|
||||
header Access-Control-Allow-Origin "*"
|
||||
reverse_proxy localhost:8080 {
|
||||
reverse_proxy remnawave_bot:8080 {
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
transport http {
|
||||
@@ -294,31 +504,9 @@ podpiska.domain.com {
|
||||
}
|
||||
```
|
||||
|
||||
####
|
||||
**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080`
|
||||
|
||||
Либо вместо `remnawave_bot:8080` используйте `localhost:8080`
|
||||
|
||||
|
||||
### 6. Пример nginx-конфига
|
||||
|
||||
```yaml
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:1.25-alpine
|
||||
container_name: remnawave_nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
networks:
|
||||
- bot_network
|
||||
|
||||
networks:
|
||||
bot_network:
|
||||
external: true
|
||||
```
|
||||
### 8. Пример nginx-конфига
|
||||
|
||||
`nginx.conf`:
|
||||
|
||||
@@ -354,7 +542,7 @@ http {
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# Все остальное
|
||||
# Всё остальное
|
||||
location / {
|
||||
proxy_pass http://remnawave_bot_unified;
|
||||
proxy_set_header Host $host;
|
||||
@@ -415,13 +603,11 @@ http {
|
||||
}
|
||||
```
|
||||
|
||||
####
|
||||
|
||||
Либо вместо `remnawave_bot:8080` используйте `localhost:8080`
|
||||
**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080`
|
||||
|
||||
Рекомендации:
|
||||
|
||||
- Откройте входящие 80/443 в фаерволе.
|
||||
- Откройте входящие 80/443 в файерволе.
|
||||
- Если используете Cloudflare/анти-DDoS, разрешите методы `POST` и заголовок `X-Telegram-Bot-Api-Secret-Token`.
|
||||
- После развёртывания перезапустите бот (`make reload`), чтобы он заново зарегистрировал webhook.
|
||||
|
||||
@@ -448,7 +634,7 @@ http {
|
||||
- `BOT_RUN_MODE` — определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима.
|
||||
- `WEBHOOK_SECRET_TOKEN` — секрет для проверки заголовка `X-Telegram-Bot-Api-Secret-Token` при работе через вебхуки.
|
||||
- `WEBHOOK_DROP_PENDING_UPDATES` — управляет очисткой очереди сообщений при установке вебхука.
|
||||
- `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защищаться от перегрузок.
|
||||
- `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защащаться от перегрузок.
|
||||
- `WEBHOOK_WORKERS` — количество фоновых воркеров, параллельно обрабатывающих обновления Telegram.
|
||||
- `WEBHOOK_ENQUEUE_TIMEOUT` — сколько секунд ждать свободного места в очереди перед отказом (0 — немедленный отказ).
|
||||
- `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT` — таймаут корректного завершения воркеров при остановке приложения.
|
||||
@@ -464,7 +650,7 @@ http {
|
||||
| Переменная | Описание | Пример |
|
||||
|------------|----------|--------|
|
||||
| `SERVER_STATUS_MODE` | Режим работы кнопки: `disabled`, `external_link`, `external_link_miniapp` или `xray` | `xray` |
|
||||
| `SERVER_STATUS_EXTERNAL_URL` | Прямая ссылка на внешний мониторинг | `https://status.example.com` |
|
||||
| `SERVER_STATUS_EXTERNAL_URL` | Прямаяссылка на внешний мониторинг | `https://status.example.com` |
|
||||
| `SERVER_STATUS_METRICS_URL` | URL страницы метрик XrayChecker | `https://sub.example.com/metrics` |
|
||||
|
||||
### 🛡️ Защита панели Remnawave
|
||||
@@ -551,7 +737,7 @@ DEFAULT_DEVICE_LIMIT=3
|
||||
MAX_DEVICES_LIMIT=15
|
||||
```
|
||||
|
||||
### 👥 Реферальная система
|
||||
### 💥 Реферальная система
|
||||
|
||||
```env
|
||||
# Включение/выключение реферальной программы
|
||||
@@ -609,7 +795,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
|
||||
### 👤 **Для пользователей**
|
||||
### 💤 **Для пользователей**
|
||||
|
||||
🧭 **Онбординг и доступ**
|
||||
- 🌐 Выбор языка интерфейса (RU/EN), динамическая локализация
|
||||
@@ -618,9 +804,9 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🔗 Deeplink-инвайты, UTM-кампании и реферальные коды
|
||||
|
||||
🛒 **Умная покупка подписок**
|
||||
- 📅 Гибкие периоды (14–360 дней) со скидками
|
||||
- 📅 Гибкие периоды (14—360 дней) со скидками
|
||||
- 📊 Выбор трафика: фиксированный лимит, пакеты или безлимит
|
||||
- 🌍 Автоматический выбор сервера или мультивыбор
|
||||
- 🌐 Автоматический выбор сервера или мультивыбор
|
||||
- 📱 Настройка количества устройств и серверов
|
||||
- 🧾 Динамический калькулятор стоимости
|
||||
- 💾 **Сквозная корзина** - сохранение параметров при недостатке баланса
|
||||
@@ -640,10 +826,10 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 💰 CryptoBot (USDT, TON, BTC, ETH и др.)
|
||||
- 🪙 Heleket (криптовалюта с наценкой)
|
||||
- 💳 MulenPay (СБП)
|
||||
- 🏦 PayPalych/Pal24 (СБП + карты)
|
||||
- 🦐 PayPalych/Pal24 (СБП + карты)
|
||||
- 💳 Platega (СБП + банковские карты)
|
||||
- 💳 **WATA**
|
||||
- 📥 Автогенерация счетов и webhook-уведомления
|
||||
- 🔥 Автогенерация счетов и webhook-уведомления
|
||||
- 💼 История операций
|
||||
- 🔄 Автоплатёж с настройкой дня списания
|
||||
- 🎁 Реферальные и промо-бонусы
|
||||
@@ -651,7 +837,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
|
||||
📱 **Управление подписками**
|
||||
- 📈 Реальный трафик, устройства и серверы
|
||||
- 🌍 Переключение серверов и стран
|
||||
- 🌐 Переключение серверов и стран
|
||||
- 📱 Сброс HWID
|
||||
- 🧩 Смена языка, промогруппы и параметров
|
||||
- 🧾 Просмотр активных услуг и статуса
|
||||
@@ -667,7 +853,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🎁 **Персональные промо-предложения** от админов
|
||||
- 💰 **Тестовый доступ к серверам** через промо-акции
|
||||
- 💸 **Автоматические скидки** при оплате и автопродлении
|
||||
- 👥 Реферальная программа с комиссиями и бонусами
|
||||
- 💥 Реферальная программа с комиссиями и бонусами
|
||||
- 📊 Аналитика доходов и конверсии рефералов
|
||||
- 🔗 Генерация реферальных ссылок и QR кодов
|
||||
|
||||
@@ -682,9 +868,9 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🖥️ **Полноценный личный кабинет** в Telegram WebApp
|
||||
- 📊 Управление подпиской и параметрами
|
||||
- 💳 Интегрированные платежи
|
||||
- 🎁 Активация промо-оферов и промокодов
|
||||
- 🎁 Активация промо-офферов и промокодов
|
||||
- 📱 Управление устройствами
|
||||
- 👥 Реферальная статистика
|
||||
- 💥 Реферальная статистика
|
||||
- 📋 FAQ и юридические документы
|
||||
- 📥 Библиотека загрузочных ссылок для клиентов
|
||||
- 🛰️ Web API для внешних интеграций
|
||||
@@ -702,7 +888,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🎯 **Статистика по промо-группам** и скидочным уровням
|
||||
- 📊 **Расширенная фильтрация** пользователей (баланс, траты, активность)
|
||||
|
||||
👥 **Управление пользователями**
|
||||
💥 **Управление пользователями**
|
||||
- 🔍 Поиск по ID, имени, юзернейму, Telegram ID и фильтры
|
||||
- 💰 Ручное изменение баланса
|
||||
- 📱 Изменение лимитов устройств, трафика, серверов
|
||||
@@ -722,7 +908,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 📣 **Рекламные кампании** с deeplink и бонусами (Автовыдача подписки / баланса при переходе)
|
||||
- 📨 Рассылки по сегментам с медиа и кнопка
|
||||
- 🎨 **Кастомные кнопки** для рассылок (подключение, подписка, поддержка, партнертка и тд)
|
||||
- 🔘 Настройка главного меню и приветственных экранов
|
||||
- 📘 Настройка главного меню и приветственных экранов
|
||||
|
||||
🛟 **Поддержка и модерация**
|
||||
- 🎫 **Центр тикетов** с приоритетами и статусами
|
||||
@@ -749,18 +935,18 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🗓️ **Умные автобекапы** с гибким расписанием
|
||||
- 📦 Ручные бекапы с выбором содержимого
|
||||
- 📤 Отправка архивов в выделенный чат/топик
|
||||
- 🔁 Восстановление без остановки бота
|
||||
- 🔓 Восстановление без остановки бота
|
||||
- ✅ Автоматическая синхронизация sequences после восстановления
|
||||
|
||||
💳 **Биллинг и настройки**
|
||||
- ⚙️ **Управление ценами** без перезапуска бота
|
||||
- 🔘 **Управление пакетами трафика** (включение/отключение)
|
||||
- 📘 **Управление пакетами трафика** (включение/отключение)
|
||||
- 🧪 Тестовые платежи для каждого провайдера
|
||||
- 🪝 Управление вебхуками всех платёжных систем
|
||||
- 🪙 Управление вебхуками всех платёжных систем
|
||||
|
||||
🏗️ **REST API для интеграций**
|
||||
🗃️ **REST API для интеграций**
|
||||
- 🔌 **FastAPI Web API** с полной документацией
|
||||
- 🔑 Управление API-ключами и токенами
|
||||
- 🔒 Управление API-ключами и токенами
|
||||
- 📊 Эндпоинты для подписок, пользователей, транзакций
|
||||
- 🎁 API промо-системы и рассылок
|
||||
- 📋 API управления контентом и настройками
|
||||
@@ -775,22 +961,22 @@ REDIS_URL=redis://redis:6379/0
|
||||
- 🔄 **Автосинхронизация серверов** - фоновая синхронизация по расписанию
|
||||
- 🛒 **Умная корзина** - сохранение параметров подписки в Redis при недостатке баланса
|
||||
- 🛡️ **Антифрод** - валидация подписки на канал
|
||||
- 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитации фишинг аккаунтов
|
||||
- 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитация фишинг аккаунтов
|
||||
- 🧠 **Асинхронная архитектура** - aiogram 3, PostgreSQL/SQLite, Redis и очереди задач
|
||||
- 🌐 **Мультиязычность** - локализации RU/EN, быстрый выбор языка
|
||||
- 📦 **Интеграция с Remnawave API** - автоматическое создание пользователей и синхронизация
|
||||
- 🔄 **Миграция сквадов** - массовый перенос пользователей между сквадами
|
||||
- 🧾 **История операций** - хранение всех транзакций и действий для аудита
|
||||
- 💸 **Сервис автопрвоерки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч
|
||||
- 💸 **Сервис автопрворки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч
|
||||
|
||||
### 🌐 Веб-API и мини-приложение
|
||||
|
||||
- ⚙️ **FastAPI Web API** с эндпоинтами для управления всеми аспектами бота
|
||||
- 🔑 **Управление API-ключами** - выпуск, отзыв, реактивация токенов
|
||||
- 🔒 **Управление API-ключами** - выпуск, отзыв, реактивация токенов
|
||||
- 🛰️ **Mini App** - полноценный личный кабинет внутри Telegram
|
||||
- 💳 **Интегрированные платежи** в Mini App (Stars, Pal24, YooKassa, WATA)
|
||||
- 🧭 **Единый стандартный app-config.json** - централизованная раздача ссылок на клиенты
|
||||
- 🪝 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем
|
||||
- 🪙 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем
|
||||
- 📡 **Мониторинг серверов** - REST-эндпоинты для просмотра нод и статистики
|
||||
|
||||
## 🚀 Производительность
|
||||
@@ -804,14 +990,14 @@ REDIS_URL=redis://redis:6379/0
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Технологический стек
|
||||
## 🗃️ Технологический стек
|
||||
|
||||
### 💪 Современные технологии
|
||||
|
||||
- **🐍 Python 3.13+** с AsyncIO - максимальная производительность
|
||||
- **🗄️ PostgreSQL 15+** - надежное хранение данных
|
||||
- **⚡ Redis** - быстрое кеширование и сессии (для корзины)
|
||||
- **🐳 Docker** - простое развертывание в любой среде
|
||||
- **Docker** - простое развертывание в любой среде
|
||||
- **🔗 SQLAlchemy ORM** - безопасная работа с БД
|
||||
- **🚀 aiogram 3** - современная Telegram Bot API
|
||||
- **⚡ FastAPI** - высокопроизводительный REST API
|
||||
@@ -828,7 +1014,7 @@ REDIS_URL=redis://redis:6379/0
|
||||
- Нажми **Синхронизация** и дождись завершения
|
||||
- Без этого пользователи не смогут выбирать страны!
|
||||
|
||||
2. **👥 Синхронизация пользователей** (если есть база)
|
||||
2. **💥 Синхронизация пользователей** (если есть база)
|
||||
- **Админ панель** → **Remnawave** → **Синхронизация**
|
||||
- **Синхронизировать всех** → дождись импорта
|
||||
|
||||
@@ -880,9 +1066,9 @@ ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID=126 # ID топика для тикет
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Устранение неполадок
|
||||
## 🛠 Устранение неполадок
|
||||
|
||||
### 🏥 Health Checks
|
||||
### 🥼 Health Checks
|
||||
- **Unified сервер**: `http://localhost:8080/health/unified` (или `/health`, если административное API отключено)
|
||||
- **Telegram webhook**: `http://localhost:8080/health/telegram-webhook`
|
||||
- **Платёжные webhooks**: `http://localhost:8080/health/payment-webhooks`
|
||||
@@ -929,7 +1115,7 @@ docker system prune
|
||||
|
||||
## 💡 Использование
|
||||
|
||||
### 👤 **Для пользователей**
|
||||
### 💤 **Для пользователей**
|
||||
|
||||
1. **🚀 Старт** → Найди бота и нажми `/start`
|
||||
2. **🌐 Язык** → Выбери язык интерфейса (RU/EN)
|
||||
@@ -937,21 +1123,21 @@ docker system prune
|
||||
4. **💰 Баланс** → Пополни через любой удобный способ
|
||||
5. **🛒 Подписка** → Выбери тариф и параметры
|
||||
6. **📱 Подключение** → Получи ссылку или конфиг
|
||||
7. **👥 Партнерка** → Поделись ссылкой и получай бонусы
|
||||
7. **💥 Партнерка** → Поделись ссылкой и получай бонусы
|
||||
|
||||
### ⚙️ **Для администраторов**
|
||||
|
||||
Доступ через **"⚙️ Админ панель"**:
|
||||
|
||||
- **📦 Подписки** → настройка серверов, цен, синхронизация
|
||||
- **👥 Пользователи** → поиск, редактирование, блокировка
|
||||
- **💥 Пользователи** → поиск, редактирование, блокировка
|
||||
- **💎 Промо-группы** → управление скидочными группами и уровнями
|
||||
- **🎁 Промокоды** → создание и статистика
|
||||
- **🎯 Промо-предложения** → персональные акции и скидки
|
||||
- **📨 Рассылки** → уведомления по сегментам
|
||||
- **📣 Кампании** → управление рекламными кампаниями
|
||||
- **🎫 Тикеты** → система поддержки
|
||||
- **📄 Контент** → политика, оферта, FAQ
|
||||
- **🔄 Контент** → политика, оферта, FAQ
|
||||
- **🖥 Remnawave** → мониторинг, синхронизация
|
||||
- **📊 Статистика** → детальная аналитика
|
||||
|
||||
@@ -959,7 +1145,7 @@ docker system prune
|
||||
|
||||
## 🛡️ Безопасность
|
||||
|
||||
### 🔐 Защита панели Remnawave
|
||||
### 🔍 Защита панели Remnawave
|
||||
|
||||
Бот поддерживает интеграцию с системой защиты панели:
|
||||
|
||||
@@ -985,11 +1171,11 @@ REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD
|
||||
|
||||
## 🤝 Как помочь проекту
|
||||
|
||||
- 🔍 [**Сообщай о багах**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) с подробным описанием
|
||||
- 🐛 [**Сообщай о багах**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) с подробным описанием
|
||||
- 💡 [**Предлагай идеи**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/discussions) для улучшения
|
||||
- ⭐ **Ставь звезды** проекту - это мотивирует разработку!
|
||||
- 📢 **Рассказывай друзьям** о проекте
|
||||
- 💝 **[Поддержи разработку](https://t.me/tribute/app?startapp=duUO)** - помоги проекту расти
|
||||
- 👍 **[Поддержи разработку](https://t.me/tribute/app?startapp=duUO)** - помоги проекту расти
|
||||
- 🔧 **Отправляй Pull Requests** - внеси свой вклад в код
|
||||
|
||||
---
|
||||
@@ -1366,8 +1552,6 @@ docker compose up -d
|
||||
|
||||
**Made with ❤️ by [@fringg](https://t.me/fringg) and amazing [contributors](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/graphs/contributors)**
|
||||
|
||||
**Версия:** v2.5.2 | **Последнее обновление:** 2024
|
||||
|
||||
<div align="center">
|
||||
|
||||
### ⭐ Не забудь поставить звезду проекту!
|
||||
|
||||
Reference in New Issue
Block a user