mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-20 03:40:26 +00:00
2061 lines
91 KiB
Markdown
2061 lines
91 KiB
Markdown
# 🚀 Remnawave Bedolaga Bot
|
||
|
||
> **🆕 Новый веб-кабинет (Cabinet WebApp)**
|
||
>
|
||
> Вышла новая версия личного кабинета пользователя — веб-интерфейс для управления подписками!
|
||
>
|
||
> **Переменные окружения для Cabinet:**
|
||
> | Переменная | Описание | По умолчанию |
|
||
> |------------|----------|--------------|
|
||
> | `CABINET_ENABLED` | Включить личный кабинет | `false` |
|
||
> | `CABINET_JWT_SECRET` | Секретный ключ для JWT токенов | `BOT_TOKEN` |
|
||
> | `CABINET_ACCESS_TOKEN_EXPIRE_MINUTES` | Время жизни access token (минуты) | `15` |
|
||
> | `CABINET_REFRESH_TOKEN_EXPIRE_DAYS` | Время жизни refresh token (дни) | `7` |
|
||
> | `CABINET_ALLOWED_ORIGINS` | Разрешённые origins для CORS | — |
|
||
> | `CABINET_EMAIL_VERIFICATION_ENABLED` | Включить верификацию email | `false` |
|
||
> | `CABINET_EMAIL_VERIFICATION_EXPIRE_HOURS` | Время жизни токена верификации email (часы) | `24` |
|
||
> | `CABINET_PASSWORD_RESET_EXPIRE_HOURS` | Время жизни токена сброса пароля (часы) | `1` |
|
||
>
|
||
> Для работы email-уведомлений настройте SMTP-переменные: `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM_EMAIL`, `SMTP_FROM_NAME`, `SMTP_USE_TLS`.
|
||
|
||
<div align="center">
|
||
|
||
<img width="1024" height="1024" alt="Image" src="https://github.com/user-attachments/assets/17ad0128-231d-4553-9f4b-ce0644da796c" />
|
||
|
||
**🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API**
|
||
|
||
_Полнофункциональное решение с управлением пользователями, платежами и администрированием_
|
||
|
||
[](https://python.org)
|
||
[](https://postgresql.org)
|
||
[](LICENSE)
|
||
[](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/stargazers)
|
||
|
||
[🚀 Быстрый старт](#-быстрый-старт) • [📖 Функционал](#-функционал) • [Docker](#-docker-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество)
|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
## 🧪 [Тестирование бота](https://t.me/FringVPN_bot)
|
||
|
||
## 💬 **[Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi)** - Для общения, вопросов, предложений
|
||
|
||
---
|
||
|
||
## 🌟 Почему Bedolaga?
|
||
|
||
Бот Бедолага не добрый и не милый.
|
||
Он просто делает вашу работу вместо вас, принимает оплату, выдаёт подписки, интегрируется с Remnawave и тихо ненавидит всех, кто ещё не подключил его.
|
||
|
||
Вы хотите продавать VPN — Бедолага позволит это делать.
|
||
Вы хотите спать — он позволит и это...
|
||
|
||
### ⚡ **Полная автоматизация VPN бизнеса**
|
||
|
||
- 🎯 **Готовое решение** - разверни за 5 минут, начни продавать сегодня
|
||
- 💰 **Многоканальные платежи** - Telegram Stars + Tribute + CryptoBot + Heleket + YooKassa (СБП + карты) + MulenPay + PayPalych (СБП + карты) + Platega (карты + СБП) + WATA + Freekassa (NSPK СБП + карты) + CloudPayments (карты + СБП)
|
||
- 🔄 **Автоматизация 99%** - от регистрации до продления подписок
|
||
- 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки
|
||
- 📊 **Детальная аналитика** - полная картина вашего бизнеса
|
||
- 💬 **Уведомления в топики** об: Активация триала 💎 Покупка подписки 🔄 Конверсия из триала в платную ⏰ Продление подписки 💰 Пополнение баланса 🚧 Включении тех работ ♻️ Появлении новой версии бота
|
||
|
||
### 🎛️ **Гибкость конфигурации**
|
||
|
||
- 🌐 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор
|
||
- 📱 **Управление устройствами** - от 1 до неограниченного количества
|
||
- 📊 **Режимы продажи трафика** - фиксированный лимит или выбор пакетов
|
||
- 🎯 **Режим тарифов** - готовые тарифные планы с фиксированными параметрами
|
||
- 🎁 **Промо-система** - коды на деньги, дни подписки, триал-периоды
|
||
- 🔧 **Гибкие тарифы** - от 5GB до безлимита, от 14 дней до года
|
||
- 🛒 **Умная корзина** - сохранение параметров подписки при недостатке баланса
|
||
|
||
### 💪 **Enterprise готовность**
|
||
|
||
- 🗃️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура
|
||
- 🔒 **Безопасность** - интеграция с системой защиты панели через куки-аутентификацию
|
||
- 📈 **Масштабируемость** - от стартапа до крупного бизнеса
|
||
- 🔧 **Мониторинг** - автоматическое управление режимом тех. работ
|
||
- 🛡️ **Защита панели** - поддержка [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy)
|
||
- 🗄️ **Бекапы/Восстановление** - автобекапы и восстановление бд прямо в боте с уведомлениями в топики
|
||
- ✔️ **Проверка на подписку** - проверяет подписку на канал
|
||
- 🔄 **Автосинхронизация** - фоновая синхронизация подписок и серверов(сквадов) с Remnawave по расписанию
|
||
- 📝 **Ротация логов** - автоматическая очистка и архивация старых логов
|
||
- 🚫 **Система ограничений** - блокировка пользователей по различным критериям
|
||
- 🎮 **Конкурсы и игры** - ежедневные игры с призами и реферальные конкурсы
|
||
- 📡 **Модем-подписки** - дополнительный функционал для устройств-модемов
|
||
|
||
### 📚 Поддерживаемые методы авторизации
|
||
|
||
| Конфигурация | Authorization | X-Api-Key |
|
||
| ---------------- | ------------------- | ------------------- |
|
||
| Только API Key | Bearer <api_key> | <api_key> |
|
||
| Basic Auth | Bearer <api_key> | Basic <user:pass> |
|
||
| Caddy + API Key | Basic <caddy_token> | <api_key> |
|
||
| Cookies (eGames) | Bearer <api_key> | <api_key> + cookies |
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
```bash
|
||
# 1. Скачай репозиторий
|
||
git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git
|
||
cd remnawave-bedolaga-telegram-bot
|
||
|
||
# 2. Создай необходимые директории
|
||
mkdir -p ./logs ./data ./data/backups ./data/referral_qr
|
||
chmod -R 755 ./logs ./data
|
||
sudo chown -R 1000:1000 ./logs ./data
|
||
|
||
# 3.Установи «Docker» командой:
|
||
sudo curl -fsSL https://get.docker.com | sh
|
||
|
||
# 4.Установи «make» следующей командой:
|
||
apt install make -y
|
||
|
||
make up # Поднять контейнеры
|
||
|
||
make help # Показать все команды
|
||
make down # Остановить контейнеры
|
||
make reload # Перезапустить
|
||
make reload-follow # Перезапустить с логами
|
||
make test # Запустить тесты
|
||
```
|
||
|
||
### Ручной Docker запуск
|
||
|
||
Если не хочется пользоваться мастером, можно настроить всё вручную:
|
||
|
||
```bash
|
||
# 1. Скачай репозиторий
|
||
git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git
|
||
cd remnawave-bedolaga-telegram-bot
|
||
|
||
# 2. Настрой конфиг
|
||
cp .env.example .env
|
||
nano .env # Заполни токены и настройки
|
||
|
||
# 3. Создай необходимые директории
|
||
mkdir -p ./logs ./data ./data/backups ./data/referral_qr
|
||
chmod -R 755 ./logs ./data
|
||
sudo chown -R 1000:1000 ./logs ./data
|
||
|
||
# 4. Запусти всё разом
|
||
docker compose up -d
|
||
|
||
# 5. Проверь статус
|
||
docker compose logs
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 Настройка веб-сервера и обратного проксирования
|
||
|
||
> Встроенный FastAPI-сервер обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт.
|
||
|
||
### 1. Выбор режима запуска
|
||
|
||
| `BOT_RUN_MODE` | Что делает | Когда использовать |
|
||
| -------------- | --------------------------------------------------------------------------- | ------------------------------------------------ |
|
||
| `polling` | Бот опрашивает Telegram через long polling. HTTP-сервер можно не поднимать. | Локальная отладка или отсутствие внешнего HTTPS. |
|
||
| `webhook` | Aiogram получает апдейты только через вебхук. | Продакшн и серверы за HTTPS-прокси. |
|
||
| `both` | Одновременно работают polling и 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.domain.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
|
||
WEBHOOK_URL=https://hooks.domain.com
|
||
WEBHOOK_PATH=/webhook
|
||
WEBHOOK_SECRET_TOKEN=super-secret-token
|
||
WEBHOOK_DROP_PENDING_UPDATES=true
|
||
WEBHOOK_MAX_QUEUE_SIZE=1024
|
||
WEBHOOK_WORKERS=4
|
||
WEBHOOK_ENQUEUE_TIMEOUT=0.1
|
||
WEBHOOK_WORKER_SHUTDOWN_TIMEOUT=30.0
|
||
|
||
WEB_API_ENABLED=true
|
||
WEB_API_HOST=0.0.0.0
|
||
WEB_API_PORT=8080
|
||
WEB_API_ALLOWED_ORIGINS=https://miniapp.domain.com
|
||
```
|
||
|
||
- `WEBHOOK_URL` — публичный HTTPS-домен прокси. К нему автоматически добавится путь из `WEBHOOK_PATH`.
|
||
- `WEBHOOK_SECRET_TOKEN` — защитный токен Telegram, обязательно задайте своё значение.
|
||
- Очередь можно тюнить через `WEBHOOK_MAX_QUEUE_SIZE`, `WEBHOOK_WORKERS`, `WEBHOOK_ENQUEUE_TIMEOUT` и `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT`.
|
||
- Если миниапка или админка доступны по другим доменам, перечислите их через запятую в `WEB_API_ALLOWED_ORIGINS`.
|
||
|
||
После изменения `.env` перезапустите сервис: `docker compose up -d remnawave_bot`.
|
||
|
||
### 4. Настройка Docker-сетей
|
||
|
||
#### Вариант 1: Бот на отдельном сервере
|
||
|
||
Если бот запускается на отдельном сервере (не там, где панель 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, os; requests.get(''http://localhost:8080/health'', headers={''X-API-Key'': os.environ.get(''WEB_API_DEFAULT_TOKEN'')}, timeout=5) or exit(1)"',
|
||
]
|
||
interval: 60s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 30s
|
||
|
||
volumes:
|
||
postgres_data:
|
||
driver: local
|
||
redis_data:
|
||
driver: local
|
||
|
||
networks:
|
||
bot_network:
|
||
name: remnawave_bot_network
|
||
driver: bridge
|
||
ipam:
|
||
config:
|
||
- subnet: 172.20.0.0/16
|
||
gateway: 172.20.0.1
|
||
driver_opts:
|
||
com.docker.network.driver.mtu: 1350
|
||
```
|
||
|
||
**docker-compose.yml для Caddy (отдельный файл):**
|
||
|
||
```yaml
|
||
services:
|
||
caddy:
|
||
image: caddy:2-alpine
|
||
container_name: remnawave_caddy
|
||
restart: unless-stopped
|
||
ports:
|
||
- '80:80'
|
||
- '443:443'
|
||
volumes:
|
||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||
- caddy_data:/data
|
||
- caddy_config:/config
|
||
networks:
|
||
- bot_network
|
||
|
||
volumes:
|
||
caddy_data:
|
||
caddy_config:
|
||
|
||
networks:
|
||
bot_network:
|
||
name: remnawave_bot_network
|
||
external: true
|
||
```
|
||
|
||
#### Вариант 2: Бот на одном сервере с панелью Remnawave
|
||
|
||
Если бот и панель Remnawave запускаются на одном сервере, подключите бота к сети панели:
|
||
|
||
**docker-compose.local.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, os; requests.get(''http://localhost:8080/health'', headers={''X-API-Key'': os.environ.get(''WEB_API_DEFAULT_TOKEN'')}, timeout=5) or 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
|
||
driver_opts:
|
||
com.docker.network.driver.mtu: 1350
|
||
|
||
remnawave-network:
|
||
name: remnawave-network
|
||
external: true # Используем существующую сеть панели
|
||
```
|
||
|
||
**Важно:**
|
||
|
||
- Сеть `remnawave-network` должна быть создана панелью Remnawave
|
||
- В `.env` укажите `REMNAWAVE_API_URL=http://remnawave:3000` (обращение внутри Docker-сети)
|
||
- Бот сможет напрямую общаться с панелью без внешних запросов
|
||
|
||
### 5. Проверка здоровья
|
||
|
||
Проверьте, что единый сервер отвечает:
|
||
|
||
```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
|
||
# Hooks + API
|
||
hooks.domain.com {
|
||
encode gzip zstd
|
||
|
||
# Webhook пути для платежных систем
|
||
handle /yookassa-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /platega-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /cryptobot-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /wata-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /heleket-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /tribute-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /pal24-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /mulenpay-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /freekassa-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
handle /cloudpayments-webhook {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
# app-config.json с CORS
|
||
handle /app-config.json {
|
||
header Access-Control-Allow-Origin "*"
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
# Все остальные запросы
|
||
handle {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
# Статика для miniapp
|
||
miniapp.domain.com {
|
||
encode gzip zstd
|
||
|
||
# API эндпоинты /miniapp/* в приложение
|
||
handle /miniapp/* {
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
# app-config.json с CORS
|
||
handle /app-config.json {
|
||
header Access-Control-Allow-Origin "*"
|
||
reverse_proxy remnawave_bot:8080 {
|
||
header_up Host {host}
|
||
header_up X-Real-IP {remote_host}
|
||
transport http {
|
||
read_buffer 0
|
||
}
|
||
}
|
||
}
|
||
|
||
# Статические файлы (корень и всё остальное)
|
||
handle {
|
||
root * /var/www/remnawave-miniapp
|
||
try_files {path} /index.html
|
||
file_server
|
||
}
|
||
}
|
||
```
|
||
|
||
**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080`
|
||
|
||
### 8. Пример nginx-конфига
|
||
|
||
`nginx.conf`:
|
||
|
||
```nginx
|
||
events {}
|
||
http {
|
||
include /etc/nginx/mime.types;
|
||
sendfile on;
|
||
|
||
upstream remnawave_bot_unified {
|
||
server remnawave_bot:8080;
|
||
}
|
||
|
||
# Hooks + API домен
|
||
server {
|
||
listen 80;
|
||
listen 443 ssl http2;
|
||
server_name hooks.domain.com;
|
||
|
||
ssl_certificate /etc/ssl/private/hooks.fullchain.pem;
|
||
ssl_certificate_key /etc/ssl/private/hooks.privkey.pem;
|
||
|
||
client_max_body_size 32m;
|
||
|
||
# Webhook пути для платежных систем
|
||
location = /yookassa-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /platega-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /cryptobot-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /wata-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /heleket-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /tribute-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /pal24-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /mulenpay-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /freekassa-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
location = /cloudpayments-webhook {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
# app-config.json с CORS
|
||
location = /app-config.json {
|
||
add_header Access-Control-Allow-Origin "*";
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
}
|
||
|
||
# Всё остальное
|
||
location / {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
}
|
||
|
||
# Miniapp домен (статика + API)
|
||
server {
|
||
listen 80;
|
||
listen 443 ssl http2;
|
||
server_name miniapp.domain.com;
|
||
|
||
ssl_certificate /etc/ssl/private/miniapp.fullchain.pem;
|
||
ssl_certificate_key /etc/ssl/private/miniapp.privkey.pem;
|
||
|
||
client_max_body_size 32m;
|
||
|
||
# API эндпоинты /miniapp/*
|
||
location /miniapp/ {
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
proxy_read_timeout 120s;
|
||
proxy_send_timeout 120s;
|
||
proxy_buffering off;
|
||
proxy_request_buffering off;
|
||
}
|
||
|
||
# app-config.json с CORS
|
||
location = /app-config.json {
|
||
add_header Access-Control-Allow-Origin "*";
|
||
proxy_pass http://remnawave_bot_unified;
|
||
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;
|
||
}
|
||
|
||
# Статические файлы
|
||
location / {
|
||
root /var/www/remnawave-miniapp;
|
||
try_files $uri $uri/ /index.html;
|
||
|
||
# Кэширование
|
||
expires 1h;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080`
|
||
|
||
Рекомендации:
|
||
|
||
- Откройте входящие 80/443 в файерволе.
|
||
- Если используете Cloudflare/анти-DDoS, разрешите методы `POST` и заголовок `X-Telegram-Bot-Api-Secret-Token`.
|
||
- После развёртывания перезапустите бот (`make reload`), чтобы он заново зарегистрировал webhook.
|
||
|
||
### Быстрая настройка SSL для Nginx в Docker
|
||
|
||
#### 1. Установка Certbot
|
||
|
||
```bash
|
||
sudo apt update && sudo apt install certbot -y
|
||
```
|
||
|
||
#### 2. Генерация сертификатов
|
||
|
||
```bash
|
||
# Остановите Nginx Docker контейнер
|
||
docker compose down
|
||
|
||
# Сгенерируйте сертификаты (порт 80 должен быть свободен)
|
||
sudo certbot certonly --standalone -d hooks.domain.com --agree-tos --email your-email@example.com --non-interactive
|
||
sudo certbot certonly --standalone -d miniapp.domain.com --agree-tos --email your-email@example.com --non-interactive
|
||
```
|
||
|
||
#### 3. Копирование сертификатов
|
||
|
||
```bash
|
||
sudo mkdir -p /etc/ssl/private
|
||
|
||
sudo cp /etc/letsencrypt/live/hooks.domain.com/fullchain.pem /etc/ssl/private/hooks.fullchain.pem
|
||
sudo cp /etc/letsencrypt/live/hooks.domain.com/privkey.pem /etc/ssl/private/hooks.privkey.pem
|
||
sudo cp /etc/letsencrypt/live/miniapp.domain.com/fullchain.pem /etc/ssl/private/miniapp.fullchain.pem
|
||
sudo cp /etc/letsencrypt/live/miniapp.domain.com/privkey.pem /etc/ssl/private/miniapp.privkey.pem
|
||
|
||
sudo chmod 600 /etc/ssl/private/*.pem
|
||
```
|
||
|
||
#### 4. Обновите docker-compose.yml
|
||
|
||
```yaml
|
||
services:
|
||
nginx:
|
||
image: nginx:latest
|
||
container_name: nginx
|
||
ports:
|
||
- '80:80'
|
||
- '443:443'
|
||
volumes:
|
||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||
- /etc/ssl/private:/etc/ssl/private:ro
|
||
- /var/www/remnawave-miniapp:/var/www/remnawave-miniapp:ro
|
||
networks:
|
||
- remnawave-network
|
||
restart: unless-stopped
|
||
|
||
networks:
|
||
remnawave-network:
|
||
external: true
|
||
```
|
||
|
||
#### 5. Запуск Nginx
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
#### 6. Автообновление сертификатов
|
||
|
||
```bash
|
||
# Создайте скрипт обновления
|
||
sudo tee /opt/renew-certs.sh > /dev/null <<'EOF'
|
||
#!/bin/bash
|
||
# Останавливаем Nginx для освобождения порта 80
|
||
docker compose -f /путь/к/docker-compose.yml down
|
||
|
||
# Обновляем сертификаты
|
||
certbot renew --quiet
|
||
|
||
# Копируем обновленные сертификаты
|
||
cp /etc/letsencrypt/live/hooks.domain.com/fullchain.pem /etc/ssl/private/hooks.fullchain.pem
|
||
cp /etc/letsencrypt/live/hooks.domain.com/privkey.pem /etc/ssl/private/hooks.privkey.pem
|
||
cp /etc/letsencrypt/live/miniapp.domain.com/fullchain.pem /etc/ssl/private/miniapp.fullchain.pem
|
||
cp /etc/letsencrypt/live/miniapp.domain.com/privkey.pem /etc/ssl/private/miniapp.privkey.pem
|
||
chmod 600 /etc/ssl/private/*.pem
|
||
|
||
# Запускаем Nginx обратно
|
||
docker compose -f /путь/к/docker-compose.yml up -d
|
||
EOF
|
||
|
||
# Сделайте скрипт исполняемым
|
||
sudo chmod +x /opt/renew-certs.sh
|
||
|
||
# Добавьте в cron (запуск каждый день в 3:00 AM)
|
||
echo "0 3 * * * /opt/renew-certs.sh" | sudo crontab -
|
||
```
|
||
|
||
#### Проверка работы SSL
|
||
|
||
```bash
|
||
curl -I https://hooks.domain.com
|
||
curl -I https://miniapp.domain.com
|
||
```
|
||
|
||
**Важно:**
|
||
|
||
- Замените `domain.com` и `your-email@example.com` на свои данные
|
||
- Замените `/путь/к/docker-compose.yml` на реальный путь к вашему docker-compose файлу
|
||
- Убедитесь, что DNS записи для доменов указывают на IP вашего сервера
|
||
|
||
---
|
||
|
||
## ⚙️ Конфигурация
|
||
|
||
### 🔧 Основные параметры
|
||
|
||
| Настройка | Где взять | Пример |
|
||
| ---------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
||
| 🤖 **BOT_TOKEN** | [@BotFather](https://t.me/BotFather) | `1234567890:AABBCCdd...` |
|
||
| 👑 **ADMIN_IDS** | Твой Telegram ID | `123456789,987654321` |
|
||
| **BOT_RUN_MODE** | определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима. |
|
||
|
||
[Полный список доступных параметров:](.env.example)
|
||
|
||
### 🌐 Интеграция веб-админки
|
||
|
||
Подробное пошаговое руководство по запуску административного веб-API и подключению внешней панели находится в [docs/web-admin-integration.md](docs/web-admin-integration.md).
|
||
|
||
### 🤖 Режимы запуска бота
|
||
|
||
- `BOT_RUN_MODE` — определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима.
|
||
- `WEBHOOK_SECRET_TOKEN` — секрет для проверки заголовка `X-Telegram-Bot-Api-Secret-Token` при работе через вебхуки.
|
||
- `WEBHOOK_DROP_PENDING_UPDATES` — управляет очисткой очереди сообщений при установке вебхука.
|
||
- `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защащаться от перегрузок.
|
||
- `WEBHOOK_WORKERS` — количество фоновых воркеров, параллельно обрабатывающих обновления Telegram.
|
||
- `WEBHOOK_ENQUEUE_TIMEOUT` — сколько секунд ждать свободного места в очереди перед отказом (0 — немедленный отказ).
|
||
- `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT` — таймаут корректного завершения воркеров при остановке приложения.
|
||
|
||
### 📱 Telegram Mini App ЛК
|
||
|
||
Инструкция по развёртыванию мини-приложения, публикации статической страницы и настройке reverse-proxy доступна в [docs/miniapp-setup.md](docs/miniapp-setup.md).
|
||
|
||
Путь к статическим файлам мини-приложения можно переопределить через переменную `MINIAPP_STATIC_PATH`.
|
||
|
||
### 📊 Статус серверов в главном меню
|
||
|
||
| Переменная | Описание | Пример |
|
||
| ---------------------------- | ------------------------------------------------------------------------------------ | --------------------------------- |
|
||
| `SERVER_STATUS_MODE` | Режим работы кнопки: `disabled`, `external_link`, `external_link_miniapp` или `xray` | `xray` |
|
||
| `SERVER_STATUS_EXTERNAL_URL` | Прямаяссылка на внешний мониторинг | `https://status.example.com` |
|
||
| `SERVER_STATUS_METRICS_URL` | URL страницы метрик XrayChecker | `https://sub.example.com/metrics` |
|
||
|
||
### 🛡️ Защита панели Remnawave
|
||
|
||
Для панелей, защищенных через [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy):
|
||
|
||
```env
|
||
# Для панелей установленных скриптом eGames
|
||
REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD
|
||
|
||
# Или если ключ и значение одинаковые
|
||
REMNAWAVE_SECRET_KEY=secret_key_name
|
||
```
|
||
|
||
### 💳 Freekassa
|
||
|
||
Платёжный провайдер [Freekassa](https://freekassa.ru) поддерживает NSPK СБП и банковские карты.
|
||
|
||
```env
|
||
FREEKASSA_ENABLED=true
|
||
FREEKASSA_SHOP_ID=12345
|
||
FREEKASSA_API_KEY=your_api_key
|
||
FREEKASSA_SECRET_WORD_1=secret1
|
||
FREEKASSA_SECRET_WORD_2=secret2
|
||
FREEKASSA_USE_API=true
|
||
FREEKASSA_PAYMENT_SYSTEM_ID=44 # 44 = NSPK СБП, 42 = обычный СБП
|
||
```
|
||
|
||
**Важно:**
|
||
|
||
- `FREEKASSA_USE_API=true` - использовать API для создания заказов (рекомендуется для NSPK)
|
||
- `FREEKASSA_USE_API=false` - редирект на платежную форму
|
||
- `FREEKASSA_PAYMENT_SYSTEM_ID=44` - для NSPK СБП (быстрее и надежнее)
|
||
- Настройте webhook на `https://your-domain.com/freekassa-webhook`
|
||
|
||
### 💳 CloudPayments
|
||
|
||
Платёжный провайдер [CloudPayments](https://cloudpayments.ru) поддерживает оплату банковскими картами и СБП.
|
||
|
||
```env
|
||
CLOUDPAYMENTS_ENABLED=true
|
||
CLOUDPAYMENTS_PUBLIC_ID=pk_xxxxxxxxxxxxx
|
||
CLOUDPAYMENTS_API_SECRET=your_api_secret
|
||
CLOUDPAYMENTS_CURRENCY=RUB
|
||
```
|
||
|
||
**Важно:**
|
||
|
||
- `CLOUDPAYMENTS_PUBLIC_ID` - Public ID из личного кабинета CloudPayments
|
||
- `CLOUDPAYMENTS_API_SECRET` - API Secret для подписи запросов
|
||
- Настройте webhook (Pay/Fail уведомления) на `https://your-domain.com/cloudpayments-webhook`
|
||
- Поддерживает 3D-Secure для безопасных платежей
|
||
|
||
### 💳 Platega.io
|
||
|
||
Платёжный провайдер [Platega.io](https://platega.io) добавляет ещё один способ приёма оплат картой и по СБП. Включите его, если у вас есть кабинет мерчанта и доступ к API.
|
||
|
||
1. В кабинете Platega получите `Merchant ID` и `Secret` (раздел **Интеграция → API**).
|
||
2. В настройках провайдера укажите URL возврата и ошибки. Их можно задать в `.env` (`PLATEGA_RETURN_URL`, `PLATEGA_FAILED_URL`).
|
||
3. Активируйте только нужные платёжные методы и пропишите их ID через запятую в `PLATEGA_ACTIVE_METHODS`.
|
||
4. Добавьте вебхук `https://your-domain.com/platega-webhook` в личном кабинете Platega.
|
||
|
||
Пример набора переменных окружения:
|
||
|
||
```env
|
||
PLATEGA_ENABLED=true
|
||
PLATEGA_MERCHANT_ID=your_merchant_id
|
||
PLATEGA_SECRET=your_secret_key
|
||
PLATEGA_RETURN_URL=https://your-domain.com/payments/success
|
||
PLATEGA_FAILED_URL=https://your-domain.com/payments/failed
|
||
PLATEGA_ACTIVE_METHODS=2,10,11
|
||
PLATEGA_MIN_AMOUNT_KOPEKS=100
|
||
PLATEGA_MAX_AMOUNT_KOPEKS=5000000
|
||
PLATEGA_CURRENCY=RUB
|
||
PLATEGA_WEBHOOK_PATH=/platega-webhook
|
||
```
|
||
|
||
Остальные параметры (`PLATEGA_BASE_URL`, `PLATEGA_WEBHOOK_HOST`, `PLATEGA_WEBHOOK_PORT`) оставьте по умолчанию, если работаете через встроенный FastAPI сервер.
|
||
|
||
### 📊 Режимы продажи трафика
|
||
|
||
#### **Выбираемые пакеты** (по умолчанию)
|
||
|
||
```env
|
||
TRAFFIC_SELECTION_MODE=selectable
|
||
TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true"
|
||
```
|
||
|
||
#### **Фиксированный лимит**
|
||
|
||
```env
|
||
TRAFFIC_SELECTION_MODE=fixed
|
||
FIXED_TRAFFIC_LIMIT_GB=100 # 0 = безлимит
|
||
TRAFFIC_PACKAGES_CONFIG="100:15000:true"
|
||
```
|
||
|
||
### 🎯 Режим тарифов
|
||
|
||
Альтернативный режим продаж с готовыми тарифными планами:
|
||
|
||
```env
|
||
# Включение режима тарифов
|
||
SALES_MODE=tariffs # classic | tariffs
|
||
|
||
# Тарифы настраиваются в админ-панели бота
|
||
# Каждый тариф содержит: название, период, трафик, устройства, серверы, цену
|
||
```
|
||
|
||
**Преимущества режима тарифов:**
|
||
|
||
- Готовые пакеты без сложного выбора параметров
|
||
- Упрощенный UX для пользователей
|
||
- Возможность создавать акционные тарифы
|
||
- Поддержка скидок промогрупп на тарифы
|
||
|
||
### 💰 Система ценообразования
|
||
|
||
Цена подписки рассчитывается по формуле:
|
||
**Базовая цена + Стоимость трафика + Доп. устройства + Доп. серверы**
|
||
|
||
**Пример расчета для подписки на 180 дней:**
|
||
|
||
- Базовый период: 400₽
|
||
- Трафик безлимит: 200₽/мес × 6 мес = 1200₽
|
||
- 4 устройства: 50₽/мес × 6 мес = 300₽
|
||
- 2 сервера: 100₽/мес × 6 мес = 1200₽
|
||
- **Итого: 3100₽**
|
||
|
||
### 📱 Управление устройствами
|
||
|
||
```env
|
||
# Бесплатные устройства в триал подписке
|
||
TRIAL_DEVICE_LIMIT=1
|
||
|
||
# Требовать оплату за активацию триала
|
||
TRIAL_PAYMENT_ENABLED=false
|
||
|
||
# Стоимость активации триала (в копейках)
|
||
TRIAL_ACTIVATION_PRICE=0
|
||
|
||
# Бесплатные устройства в платной подписке
|
||
DEFAULT_DEVICE_LIMIT=3
|
||
|
||
# Максимум устройств для покупки (0 = без лимита)
|
||
MAX_DEVICES_LIMIT=15
|
||
```
|
||
|
||
### 💥 Реферальная система
|
||
|
||
```env
|
||
# Включение/выключение реферальной программы
|
||
REFERRAL_PROGRAM_ENABLED=true
|
||
|
||
# Минимальная сумма пополнения для активации бонусов
|
||
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
|
||
|
||
# Бонус новому пользователю при первом пополнении
|
||
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
|
||
|
||
# Бонус пригласившему при первом пополнении реферала
|
||
REFERRAL_INVITER_BONUS_KOPEKS=10000
|
||
|
||
# Процент комиссии с последующих пополнений
|
||
REFERRAL_COMMISSION_PERCENT=25
|
||
```
|
||
|
||
### 🔄 Автосинхронизация Remnawave
|
||
|
||
```env
|
||
# Включение автоматической синхронизации серверов
|
||
REMNAWAVE_AUTO_SYNC_ENABLED=true
|
||
|
||
# Время синхронизации (через запятую, формат HH:MM)
|
||
REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00
|
||
```
|
||
|
||
### 🛡️ Мониторинг и техническое обслуживание
|
||
|
||
```env
|
||
# Автоматический режим тех. работ
|
||
MAINTENANCE_MODE=false
|
||
MAINTENANCE_AUTO_ENABLE=true
|
||
MAINTENANCE_MONITORING_ENABLED=true
|
||
MAINTENANCE_CHECK_INTERVAL=30
|
||
MAINTENANCE_RETRY_ATTEMPTS=1
|
||
|
||
# Интервал проверки состояния панели (секунды)
|
||
MONITORING_INTERVAL=60
|
||
```
|
||
|
||
### 🛒 Умная корзина
|
||
|
||
```env
|
||
# Redis для сохранения корзины (требуется)
|
||
REDIS_URL=redis://redis:6379/0
|
||
```
|
||
|
||
### 🎮 Конкурсы и игры
|
||
|
||
```env
|
||
# Видимость кнопки конкурсов в главном меню
|
||
CONTEST_BUTTON_VISIBLE=true
|
||
|
||
# Конкурсы и ежедневные игры настраиваются в админ-панели
|
||
# Типы призов: баланс, дни подписки, промогруппа
|
||
```
|
||
|
||
**Возможности системы конкурсов:**
|
||
|
||
- Реферальные конкурсы с рейтингами
|
||
- Ежедневные игры с гарантированными призами
|
||
- Детальная статистика участников
|
||
- Гибкая настройка призов (баланс, подписка, промогруппа)
|
||
|
||
### 🚫 Система ограничений пользователей
|
||
|
||
```env
|
||
# Управление ограничениями через админ-панель
|
||
# Типы ограничений: покупка, триал, пополнение баланса
|
||
```
|
||
|
||
Позволяет блокировать отдельные функции для пользователей без полной блокировки аккаунта.
|
||
|
||
### 📝 Ротация логов
|
||
|
||
```env
|
||
# Настройка ротации логов
|
||
LOG_ROTATION_ENABLED=true
|
||
LOG_ROTATION_MAX_SIZE_MB=100
|
||
LOG_ROTATION_MAX_FILES=10
|
||
```
|
||
|
||
### 👁️ Управление видимостью
|
||
|
||
```env
|
||
# Скрытие кнопок пополнения баланса
|
||
HIDE_TOPUP_BUTTONS=false
|
||
|
||
# Скрытие реферальной программы
|
||
REFERRAL_PROGRAM_VISIBLE=true
|
||
|
||
# Видимость кнопки конкурсов
|
||
CONTEST_BUTTON_VISIBLE=true
|
||
```
|
||
|
||
---
|
||
|
||
#### ⭐ Функционал
|
||
|
||
<table>
|
||
<tr>
|
||
<td width="50%" valign="top">
|
||
|
||
### 💤 **Для пользователей**
|
||
|
||
🧭 **Онбординг и доступ**
|
||
|
||
- 🌐 Выбор языка интерфейса (RU/EN), динамическая локализация
|
||
- 📜 Принятие правил, оферты и политики конфиденциальности
|
||
- 📡 Проверка подписки на обязательный канал
|
||
- 🔗 Deeplink-инвайты, UTM-кампании и реферальные коды
|
||
|
||
🛒 **Умная покупка подписок**
|
||
|
||
- 📅 Гибкие периоды (14—360 дней) со скидками
|
||
- 📊 Выбор трафика: фиксированный лимит, пакеты или безлимит
|
||
- 🌐 Автоматический выбор сервера или мультивыбор
|
||
- 📱 Настройка количества устройств и серверов
|
||
- 🧾 Динамический калькулятор стоимости
|
||
- 💾 **Сквозная корзина** - сохранение параметров при недостатке баланса
|
||
- ↩️ Быстрый возврат к оформлению после пополнения
|
||
- 🎯 **Режим тарифов** - готовые пакеты без сложного выбора
|
||
- 🛒 **Простая покупка** - упрощенный режим для быстрого оформления
|
||
|
||
🧪 **Тестовая подписка**
|
||
|
||
- 🎁 Гибко настраиваемый триал и welcome-цепочка
|
||
- 🔔 Уведомления об истечении и автоконверсия
|
||
- 💎 Автовыдача бонусов за кампании и инвайты
|
||
- 🛡️ Контроль обязательной подписки на канал (отключает подписку при отписке)
|
||
- 💎 Автовыдача сквада из пула выбранных
|
||
- 💳 **Платный триал** с выбором способа оплаты
|
||
|
||
💰 **Платежи и баланс**
|
||
|
||
- ⭐ Telegram Stars
|
||
- 💳 Tribute
|
||
- 💳 YooKassa (СБП + банковские карты)
|
||
- 💰 CryptoBot (USDT, TON, BTC, ETH и др.)
|
||
- 🪙 Heleket (криптовалюта с наценкой)
|
||
- 💳 MulenPay (СБП)
|
||
- 🦐 PayPalych/Pal24 (СБП + карты)
|
||
- 💳 Platega (СБП + банковские карты)
|
||
- 💳 **WATA**
|
||
- 💳 **Freekassa** (NSPK СБП + карты)
|
||
- 💳 **CloudPayments** (карты + СБП)
|
||
- 🔥 Автогенерация счетов и webhook-уведомления
|
||
- 💼 История операций
|
||
- 🔄 Автоплатёж с настройкой дня списания
|
||
- 🎁 Реферальные и промо-бонусы
|
||
- ⚡ **Быстрое пополнение** с кнопками быстрых сумм
|
||
- 🔄 **Умная автоактивация** подписки после пополнения баланса
|
||
|
||
📱 **Управление подписками**
|
||
|
||
- 📈 Реальный трафик, устройства и серверы
|
||
- 🌐 Переключение серверов и стран
|
||
- 📱 Сброс HWID
|
||
- 🧩 Смена языка, промогруппы и параметров
|
||
- 🧾 Просмотр активных услуг и статуса
|
||
- 🔗 Получение ссылок подключения в один клик
|
||
- 📡 **Модем-режим** - дополнительные устройства для модемов
|
||
|
||
🛟 **Поддержка и самообслуживание**
|
||
|
||
- 🎫 **Система тикетов** с вложениями
|
||
- 📚 FAQ, правила, оферта и политика
|
||
- 💬 Быстрые ссылки на поддержку
|
||
|
||
🧩 **Бонусы и промо**
|
||
|
||
- 🎫 Промокоды на деньги, дни, триал подписку, промогруппу
|
||
- 🎁 **Персональные промо-предложения** от админов
|
||
- 💰 **Тестовый доступ к серверам** через промо-акции
|
||
- 💸 **Автоматические скидки** при оплате и автопродлении
|
||
- 💥 Реферальная программа с комиссиями и бонусами
|
||
- 📊 Аналитика доходов и конверсии рефералов
|
||
- 🔗 Генерация реферальных ссылок и QR кодов
|
||
|
||
🎮 **Конкурсы и игры**
|
||
|
||
- 🎲 **Ежедневные игры** с призами (баланс, подписка, промогруппа)
|
||
- 🏆 **Реферальные конкурсы** с рейтингами и наградами
|
||
- 📊 **Детальная статистика** участия в конкурсах
|
||
- 🎁 **Разнообразные призы** - баланс, дни подписки, промогруппы
|
||
|
||
💎 **Промо-группы и скидки**
|
||
|
||
- 🏷️ **Система промогрупп** с индивидуальными скидками с приоритетами
|
||
- 💰 Скидки на серверы, трафик и устройства
|
||
- 📊 **Скидочные уровни за траты** - прозрачная система лояльности
|
||
- 📈 Автоматическое повышение уровня при достижении порога
|
||
- 🎯 **Скидки за длительные периоды** подписки для базовых юзеров
|
||
|
||
📱 **Mini App и гайды**
|
||
|
||
- 🖥️ **Полноценный личный кабинет** в Telegram WebApp
|
||
- 📊 Управление подпиской и параметрами
|
||
- 💳 Интегрированные платежи
|
||
- 🎁 Активация промо-офферов и промокодов
|
||
- 📱 Управление устройствами
|
||
- 💥 Реферальная статистика
|
||
- 📋 FAQ и юридические документы
|
||
- 📥 Библиотека загрузочных ссылок для клиентов
|
||
- 🛰️ Web API для внешних интеграций
|
||
- 🎯 **Отображение тарифа** при режиме тарифов
|
||
|
||
</td>
|
||
<td width="50%" valign="top">
|
||
|
||
### ⚙️ **Для администраторов**
|
||
|
||
📊 **Аналитика и отчётность**
|
||
|
||
- 📈 Дашборды по пользователям, подпискам и трафику
|
||
- 💰 Детализация платежей по всем источникам
|
||
- 🧮 Продажи по тарифам, устройствам и странам
|
||
- 📣 Эффективность кампаний, промокодов и UTM
|
||
- 🎯 **Статистика по промо-группам** и скидочным уровням
|
||
- 📊 **Расширенная фильтрация** пользователей (баланс, траты, активность, трафик)
|
||
- 🏆 **Топ рефереров** по периодам с детальной аналитикой
|
||
- 📡 **Мониторинг трафика** и выявление злоупотреблений
|
||
|
||
💥 **Управление пользователями**
|
||
|
||
- 🔍 Поиск по ID, имени, юзернейму, Telegram ID и фильтры
|
||
- 💰 Ручное изменение баланса
|
||
- 📱 Изменение лимитов устройств, трафика, серверов
|
||
- 🔄 Сброс HWID и перегенерация подписки
|
||
- 🎯 Назначение промогрупп и тарифов
|
||
- 💳 **Покупка подписки пользователю** прямо из админки
|
||
- ⏰ **Продление/сокращение срока** подписки (±365 дней)
|
||
- 🚫 Блокировки с таймером и аудит действий
|
||
- 🛡️ **Защита от запрещенных никнеймов** с настраиваемым список банвордов
|
||
- 💰 **Установка индивидуального реферального процента юзеру**
|
||
- 💬 **Отправка сообщения** конкретному пользователю
|
||
- 🚫 **Система ограничений** - блокировка функций (покупка, триал, пополнение)
|
||
- 📊 **Расширенные фильтры** - по балансу, тратам, трафику, активности
|
||
- 🔄 **Готовы к продлению** - фильтр пользователей для продления
|
||
- 🗑️ **Черный список** пользователей с управлением
|
||
|
||
🎯 **Продажи, маркетинг и удержание**
|
||
|
||
- 🎫 Промокоды
|
||
- 💳 Промо-группы со скидками
|
||
- 🎁 **Персональные промо-предложения** с поиском получателей
|
||
- 💸 **Тестовые серверы** - временная выдача доступа
|
||
- 💰 **Автоматические скидки** при оплате
|
||
- 📣 **Рекламные кампании** с deeplink и бонусами
|
||
- 📨 Рассылки по сегментам с медиа и кнопками
|
||
- 🎨 **Кастомные кнопки** для рассылок
|
||
- 📘 Настройка главного меню и приветственных экранов
|
||
- 🎮 **Управление конкурсами** - создание и настройка призов
|
||
- 🎲 **Ежедневные игры** с настраиваемыми призами
|
||
- 📊 **Детальная статистика** реферальных конкурсов
|
||
- 👁️ **Видимость кнопок** - управление отображением конкурсов и реферальной программы
|
||
|
||
🛟 **Поддержка и модерация**
|
||
|
||
- 🎫 **Центр тикетов** с приоритетами и статусами
|
||
- ⏱️ **SLA таймеры** и автоуведомления
|
||
- 🧑⚖️ Роли модераторов с ограниченным доступом
|
||
- 📊 Детальный журнал всех операций
|
||
- 🚫 Блокировки нарушителей
|
||
- 🧾 История диалогов и быстрые ответы
|
||
- 🔔 **Уведомления об ответах** на тикеты для админов
|
||
|
||
🔔 **Уведомления и коммуникации**
|
||
|
||
- 📢 **Топики для событий** (покупки, триалы, техработы)
|
||
- 🔔 Настройка уведомлений и расписаний
|
||
- 📨 **Управление контентом** - политика, оферта, FAQ
|
||
- 💬 Автоматические сообщения о задолженностях
|
||
|
||
🧰 **Обслуживание и DevOps**
|
||
|
||
- 🚧 Ручной и авто-режим техработ
|
||
- 🗒️ Просмотр системных логов и health-check
|
||
- 🔄 **Автосинхронизация Remnawave** по расписанию и при старте бота
|
||
- ♻️ Проверка обновлений репозитория
|
||
- 📊 **Мониторинг серверов** (интеграция с XrayChecker)
|
||
- 📝 **Ротация логов** - автоматическая очистка и архивация
|
||
- 🔄 **Массовая синхронизация** пользователей с Remnawave
|
||
|
||
🗄️ **Бекапы и восстановление**
|
||
|
||
- 🗓️ **Умные автобекапы** с гибким расписанием
|
||
- 📦 Ручные бекапы с выбором содержимого
|
||
- 📤 Отправка архивов в выделенный чат/топик
|
||
- 🔓 Восстановление без остановки бота
|
||
- ✅ Автоматическая синхронизация sequences после восстановления
|
||
|
||
💳 **Биллинг и настройки**
|
||
|
||
- ⚙️ **Управление ценами** без перезапуска бота
|
||
- 📘 **Управление пакетами трафика** (включение/отключение)
|
||
- 🧪 Тестовые платежи для каждого провайдера
|
||
- 🪙 Управление вебхуками всех платёжных систем
|
||
- ⚙️ **Управление настройками из бота** (с приоритетом в .env)
|
||
- 🎯 **Режим тарифов** - готовые планы с фиксированными параметрами
|
||
- 🛒 **Простая покупка подписки** - упрощенный режим без выбора параметров
|
||
- 👁️ **Скрытие кнопок** пополнения баланса
|
||
- 👁️ **Скрытие реферальной** программы
|
||
|
||
⚙️ **Remnawave**
|
||
|
||
- Синхронизация юзеров из панели в бота (Ручная/автоматическая по таймеру)
|
||
- Синхронизация юзеров из бота в панель
|
||
- Синхронизация сквадов(серверов) из панели в бота
|
||
- Управление нодами/сквадами прямо в боте
|
||
- Детальная статистика по нодам/панели
|
||
- Создание/Редактивание сквадов в боте
|
||
|
||
🗃️ **REST API для интеграций**
|
||
|
||
- 🔌 **FastAPI Web API** с полной документацией
|
||
- 🔒 Управление API-ключами и токенами
|
||
- 📊 Эндпоинты для подписок, пользователей, транзакций
|
||
- 🎁 API промо-системы и рассылок
|
||
- 📋 API управления контентом и настройками
|
||
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
### 🤖 Автоматизация и экосистема
|
||
|
||
- 🔄 **Мониторинг Remnawave** - регулярная проверка API, автоматическое включение/выключение техработ
|
||
- 🔄 **Автосинхронизация серверов** - фоновая синхронизация по расписанию
|
||
- 🛒 **Умная корзина** - сохранение параметров подписки в Redis при недостатке баланса
|
||
- 🛡️ **Антифрод** - валидация подписки на канал
|
||
- 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитация фишинг аккаунтов
|
||
- 🧠 **Асинхронная архитектура** - aiogram 3, PostgreSQL/SQLite, Redis и очереди задач
|
||
- 🌐 **Мультиязычность** - локализации RU/EN, быстрый выбор языка
|
||
- 📦 **Интеграция с Remnawave API** - автоматическое создание пользователей и синхронизация
|
||
- 🔄 **Миграция сквадов** - массовый перенос пользователей между сквадами
|
||
- 🧾 **История операций** - хранение всех транзакций и действий для аудита
|
||
- 💸 **Сервис автопроверки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч
|
||
- 🔄 **Умная автоактивация** - автоматическая активация подписки после пополнения баланса
|
||
- 📝 **Ротация логов** - автоматическая очистка и архивация старых логов
|
||
- 🎮 **Система конкурсов** - ежедневные игры и реферальные конкурсы с призами
|
||
|
||
### 🌐 Веб-API и мини-приложение
|
||
|
||
- ⚙️ **FastAPI Web API** с эндпоинтами для управления всеми аспектами бота
|
||
- 🔒 **Управление API-ключами** - выпуск, отзыв, реактивация токенов
|
||
- 🛰️ **Mini App** - полноценный личный кабинет внутри Telegram
|
||
- 💳 **Интегрированные платежи** в Mini App (Stars, Pal24, YooKassa, WATA, Freekassa, CloudPayments)
|
||
- 🧭 **Единый стандартный app-config.json** - централизованная раздача ссылок на клиенты
|
||
- 🪙 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем
|
||
- 📡 **Мониторинг серверов** - REST-эндпоинты для просмотра нод и статистики
|
||
|
||
## 🚀 Производительность
|
||
|
||
| Пользователей | Память | CPU | Диск | Описание |
|
||
| ------------- | ------ | ------- | ------ | ----------------- |
|
||
| **1,000** | 512MB | 1 vCPU | 10GB | ✅ Стартап |
|
||
| **10,000** | 2GB | 2 vCPU | 50GB | ✅ Малый бизнес |
|
||
| **50,000** | 4GB | 4 vCPU | 100GB | ✅ Средний бизнес |
|
||
| **100,000+** | 8GB+ | 8+ vCPU | 200GB+ | 🚀 Enterprise |
|
||
|
||
---
|
||
|
||
## 🗃️ Технологический стек
|
||
|
||
### 💪 Современные технологии
|
||
|
||
- **🐍 Python 3.13+** с AsyncIO - максимальная производительность
|
||
- **🗄️ PostgreSQL 15+** - надежное хранение данных
|
||
- **⚡ Redis** - быстрое кеширование и сессии (для корзины)
|
||
- **Docker** - простое развертывание в любой среде
|
||
- **🔗 SQLAlchemy ORM** - безопасная работа с БД
|
||
- **🚀 aiogram 3** - современная Telegram Bot API
|
||
- **⚡ FastAPI** - высокопроизводительный REST API
|
||
- **📦 Pydantic v2** - валидация данных
|
||
|
||
---
|
||
|
||
## 🔧 Первичная настройка
|
||
|
||
После запуска необходимо:
|
||
|
||
1. **📡 Синхронизация серверов** (обязательно!)
|
||
|
||
- Зайди в бот → **Админ панель** → **Подписки** → **Управление серверами**
|
||
- Нажми **Синхронизация** и дождись завершения
|
||
- Без этого пользователи не смогут выбирать страны!
|
||
|
||
2. **💥 Синхронизация пользователей** (если есть база)
|
||
|
||
- **Админ панель** → **Remnawave** → **Синхронизация**
|
||
- **Синхронизировать всех** → дождись импорта
|
||
|
||
3. **💳 Настройка платежных систем**
|
||
|
||
- **Telegram Stars**: Работает автоматически
|
||
- **Tribute**: Настрой webhook на `https://your-domain.com/tribute-webhook`
|
||
- **YooKassa**: Настрой webhook на `https://your-domain.com/yookassa-webhook`
|
||
- **CryptoBot**: Настрой webhook на `https://your-domain.com/cryptobot-webhook`
|
||
- **Heleket**: Настрой webhook на `https://your-domain.com/heleket-webhook`
|
||
- **MulenPay**: Настрой webhook на `https://your-domain.com/mulenpay-webhook`
|
||
- **PayPalych**: Укажи Result URL `https://your-domain.com/pal24-webhook` в кабинете Pal24
|
||
- **Platega**: Настрой webhook на `https://your-domain.com/platega-webhook`
|
||
- **WATA**: Настрой webhook на `https://your-domain.com/wata-webhook`
|
||
- **Freekassa**: Настрой webhook на `https://your-domain.com/freekassa-webhook`
|
||
- **CloudPayments**: Настрой Pay/Fail уведомления на `https://your-domain.com/cloudpayments-webhook`
|
||
|
||
4. **🔄 Настройка автосинхронизации** (опционально)
|
||
- В `.env` установи `REMNAWAVE_AUTO_SYNC_ENABLED=true`
|
||
- Укажи время синхронизации в `REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00`
|
||
|
||
### 🛠️ Настройка уведомлений в топик группы
|
||
|
||
#### 1. Переменные окружения
|
||
|
||
Добавьте в файл `.env`:
|
||
|
||
```env
|
||
# Уведомления администраторов
|
||
ADMIN_NOTIFICATIONS_ENABLED=true
|
||
ADMIN_NOTIFICATIONS_CHAT_ID=-1001234567890 # ID канала/группы
|
||
ADMIN_NOTIFICATIONS_TOPIC_ID=123 # ID топика (опционально)
|
||
ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID=126 # ID топика для тикетов
|
||
```
|
||
|
||
#### 2. Создание канала
|
||
|
||
1. **Создайте приватный канал** или группу для уведомлений
|
||
2. **Добавьте бота** как администратора с правами отправки сообщений
|
||
3. **Получите ID канала**:
|
||
- Отправьте любое сообщение в канал
|
||
- Перешлите его боту @userinfobot
|
||
- Скопируйте Chat ID (например: `-1001234567890`)
|
||
|
||
#### 3. Настройка топиков (опционально)
|
||
|
||
Если используете супергруппу с топиками:
|
||
|
||
1. **Включите топики** в настройках группы
|
||
2. **Создайте топики** для уведомлений (например, "Уведомления", "Тикеты")
|
||
3. **Получите ID топика** из URL веб-версии Telegram или используйте бота
|
||
|
||
---
|
||
|
||
## 🛠 Устранение неполадок
|
||
|
||
### 🥼 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`
|
||
|
||
### 🔧 Полезные команды
|
||
|
||
```bash
|
||
# Просмотр логов в реальном времени
|
||
docker compose logs -f bot
|
||
|
||
# Статус всех контейнеров
|
||
docker compose ps
|
||
|
||
# Перезапуск только бота
|
||
docker compose restart bot
|
||
|
||
# Проверка базы данных
|
||
docker compose exec postgres pg_isready -U remnawave_user
|
||
|
||
# Подключение к базе данных
|
||
docker compose exec postgres psql -U remnawave_user -d remnawave_bot
|
||
|
||
# Проверка Redis
|
||
docker compose exec redis redis-cli ping
|
||
|
||
# Проверка использования ресурсов
|
||
docker stats
|
||
|
||
# Очистка Docker
|
||
docker system prune
|
||
```
|
||
|
||
### 🚨 Частые проблемы и решения
|
||
|
||
| Проблема | Диагностика | Решение |
|
||
| -------------------------- | ---------------------------------------------------- | -------------------------------------- |
|
||
| **Бот не отвечает** | `docker logs remnawave_bot` | Проверь `BOT_TOKEN` и интернет |
|
||
| **Ошибки БД** | `docker compose ps postgres` | Проверь статус PostgreSQL |
|
||
| **Webhook не работает** | `curl http://localhost:8080/health/telegram-webhook` | Проверь `WEBHOOK_URL`, прокси и секрет |
|
||
| **API недоступен** | Проверь логи бота | Проверь `REMNAWAVE_API_URL` |
|
||
| **Корзина не сохраняется** | `docker compose ps redis` | Проверь статус Redis |
|
||
| **Платежи не проходят** | Проверь webhook'и | Настрой URL в платежных системах |
|
||
|
||
---
|
||
|
||
## 💡 Использование
|
||
|
||
### 💤 **Для пользователей**
|
||
|
||
1. **🚀 Старт** → Найди бота и нажми `/start`
|
||
2. **🌐 Язык** → Выбери язык интерфейса (RU/EN)
|
||
3. **📋 Правила** → Прими правила сервиса
|
||
4. **💰 Баланс** → Пополни через любой удобный способ
|
||
5. **🛒 Подписка** → Выбери тариф и параметры
|
||
6. **📱 Подключение** → Получи ссылку или конфиг
|
||
7. **💥 Партнерка** → Поделись ссылкой и получай бонусы
|
||
|
||
### ⚙️ **Для администраторов**
|
||
|
||
Доступ через **"⚙️ Админ панель"**:
|
||
|
||
- **📦 Подписки** → настройка серверов, цен, синхронизация
|
||
- **💥 Пользователи** → поиск, редактирование, блокировка
|
||
- **💎 Промо-группы** → управление скидочными группами и уровнями
|
||
- **🎁 Промокоды** → создание и статистика
|
||
- **🎯 Промо-предложения** → персональные акции и скидки
|
||
- **📨 Рассылки** → уведомления по сегментам
|
||
- **📣 Кампании** → управление рекламными кампаниями
|
||
- **🎫 Тикеты** → система поддержки
|
||
- **🔄 Контент** → политика, оферта, FAQ
|
||
- **🖥 Remnawave** → мониторинг, синхронизация
|
||
- **📊 Статистика** → детальная аналитика
|
||
|
||
---
|
||
|
||
## 🛡️ Безопасность
|
||
|
||
### 🔍 Защита панели Remnawave
|
||
|
||
Бот поддерживает интеграцию с системой защиты панели:
|
||
|
||
```env
|
||
# Для защищенных панелей
|
||
REMNAWAVE_SECRET_KEY=secret_name:secret_value
|
||
|
||
# Для панелей eGames скрипта
|
||
REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD
|
||
```
|
||
|
||
### 🔒 Дополнительные меры безопасности
|
||
|
||
- **Валидация всех входящих данных**
|
||
- **Rate limiting для защиты от спама**
|
||
- **Шифрование чувствительных данных**
|
||
- **Автоматическое управление сессиями**
|
||
- **Мониторинг подозрительной активности**
|
||
- **Защита от запрещенных никнеймов** - автоблокировка имитации официальных аккаунтов
|
||
- **Защита от обфусцированных доменов** в отображаемом имени
|
||
|
||
---
|
||
|
||
## 🤝 Как помочь проекту
|
||
|
||
- 🐛 [**Сообщай о багах**](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)** - помоги проекту расти
|
||
- 🔧 **Отправляй Pull Requests** - внеси свой вклад в код
|
||
|
||
---
|
||
|
||
## 💬 Поддержка и сообщество
|
||
|
||
### 📞 **Контакты**
|
||
|
||
- **💬 Telegram:** [@fringg](https://t.me/fringg) - вопросы по разработке (только по делу!)
|
||
- **💬 Telegram Group:** [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) - общение, вопросы, предложения
|
||
- **🐛 Issues:** [GitHub Issues](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) - баги и предложения
|
||
|
||
### 📚 **Полезные ресурсы**
|
||
|
||
- **📖 [https://docs.remna.st](https://docs.rw)))** - документация панели
|
||
- **🤖 [Telegram Bot API](https://core.telegram.org/bots/api)** - API ботов
|
||
- **🐳 [Docker Guide](https://docs.docker.com/get-started/)** - обучение Docker
|
||
- **🛡️ [Reverse Proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy)** - защита панели
|
||
|
||
---
|
||
|
||
### 🎉 **Сообщество**
|
||
|
||
- **Remnawave Team** - за отличную панель и стабильный API
|
||
- **Сообщество Bedolaga** - за активное тестирование и обратную связь
|
||
- **Всем пользователям** - за доверие и использование бота
|
||
|
||
---
|
||
|
||
## 📋 Roadmap
|
||
|
||
### 🚧 **В разработке**
|
||
|
||
- 🌎 **Веб-панель** - полноценная административная панель
|
||
- 🔄 **API для интеграций** - подключение внешних сервисов
|
||
- 🎨 **Темы оформления** - Новая тема интерфейса Mini App by https://t.me/arpicme
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
Проект распространяется под лицензией **MIT**
|
||
|
||
[📜 Посмотреть лицензию](LICENSE)
|
||
|
||
---
|
||
|
||
## 🚀 Начни уже сегодня!
|
||
|
||
<table align="center">
|
||
<tr>
|
||
<td align="center">
|
||
<h3>🧪 Протестируй бота</h3>
|
||
<a href="https://t.me/FringVPN_bot">
|
||
<img src="https://img.shields.io/badge/Telegram-Тестовый_бот-blue?style=for-the-badge&logo=telegram" alt="Test Bot">
|
||
</a>
|
||
</td>
|
||
<td align="center">
|
||
<h3>💬 Присоединись к сообществу</h3>
|
||
<a href="https://t.me/+wTdMtSWq8YdmZmVi">
|
||
<img src="https://img.shields.io/badge/Telegram-Bedolaga_Chat-blue?style=for-the-badge&logo=telegram" alt="Community">
|
||
</a>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">
|
||
<h3>⭐ Поставь звезду</h3>
|
||
<a href="https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot">
|
||
<img src="https://img.shields.io/badge/GitHub-Звезда-yellow?style=for-the-badge&logo=github" alt="Star">
|
||
</a>
|
||
</td>
|
||
<td align="center">
|
||
<h3>💝 Поддержи проект</h3>
|
||
<a href="https://t.me/tribute/app?startapp=duUO">
|
||
<img src="https://img.shields.io/badge/Tribute-Донат-green?style=for-the-badge&logo=heart" alt="Donate">
|
||
</a>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
---
|
||
|
||
## 📈 Статистика проекта
|
||
|
||

|
||

|
||

|
||
|
||

|
||

|
||

|
||
|
||

|
||

|
||

|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
## 🎯 Ключевые особенности в цифрах
|
||
|
||
| Метрика | Значение |
|
||
| -------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||
| 💳 **Платёжных систем** | 11 (Stars, YooKassa, Tribute, CryptoBot, Heleket, MulenPay, Pal24, Platega, WATA, Freekassa, CloudPayments) |
|
||
| 🌍 **Языков интерфейса** | 2 (RU, EN) с возможностью расширения |
|
||
| 📊 **Периодов подписки** | 6 (от 14 дней до года) |
|
||
| 🎁 **Типов промо-акций** | 5 (коды, группы, предложения, скидки, кампании) |
|
||
| 🔌 **REST API эндпоинтов** | 50+ для полного управления |
|
||
| 📱 **Режимов работы** | 3 (классический + тарифы + MiniApp focus) |
|
||
| 🛡️ **Методов авторизации** | 4 (API Key, Bearer, Basic Auth, eGames) |
|
||
| 🗄️ **Способов хранения** | 2 (PostgreSQL, SQLite) с автовыбором |
|
||
|
||
---
|
||
|
||
## 🔥 Почему выбирают Bedolaga?
|
||
|
||
### 💼 **Для бизнеса**
|
||
|
||
✅ **Быстрый запуск** - от установки до первых продаж за 10 минут
|
||
✅ **Полная автоматизация** - бот работает 24/7 без вашего участия
|
||
✅ **Прозрачная аналитика** - всегда знаете, сколько зарабатываете
|
||
✅ **Гибкие тарифы** - настройте цены под свою аудиторию
|
||
✅ **Система лояльности** - удерживайте клиентов промо-группами и скидками
|
||
✅ **Масштабируемость** - от 10 до 100,000+ пользователей
|
||
|
||
### 🛠️ **Для разработчиков**
|
||
|
||
✅ **Современный стек** - Python 3.13, AsyncIO, PostgreSQL, Redis
|
||
✅ **Модульная архитектура** - легко расширять и модифицировать
|
||
✅ **Полное API** - интегрируйте с любыми сервисами
|
||
✅ **Docker-ready** - разворачивается за минуты
|
||
✅ **Подробная документация** - все описано и понятно
|
||
✅ **Активное сообщество** - помощь в Telegram чате
|
||
|
||
### 👥 **Для пользователей**
|
||
|
||
✅ **Простой интерфейс** - интуитивно понятное меню на родном языке
|
||
✅ **Много способов оплаты** - выбирайте удобный вариант
|
||
✅ **Быстрая поддержка** - система тикетов с приоритетами
|
||
✅ **Прозрачность** - всегда видите, за что платите
|
||
✅ **Бонусы и скидки** - реферальная программа и промо-акции
|
||
✅ **Удобное управление** - все в одном месте, в Telegram
|
||
|
||
---
|
||
|
||
## 💡 Советы по оптимизации
|
||
|
||
### ⚡ Повышение производительности
|
||
|
||
1. **Используйте Redis** для корзины и кэширования
|
||
2. **Настройте автосинхронизацию** в ночное время
|
||
3. **Включите автобэкапы** с отправкой в Telegram
|
||
4. **Оптимизируйте логирование** - LOG_LEVEL=INFO для продакшена
|
||
5. **Используйте PostgreSQL** вместо SQLite для больших баз
|
||
|
||
### 💰 Увеличение продаж
|
||
|
||
1. **Включите реферальную программу** - пользователи приведут друзей
|
||
2. **Настройте промо-группы** - дайте скидки постоянным клиентам
|
||
3. **Используйте персональные акции** - реактивируйте неактивных
|
||
4. **Запускайте кампании** - привлекайте новых через deeplink
|
||
5. **Добавьте быстрое пополнение** - упростите процесс оплаты
|
||
|
||
### 🎯 Улучшение UX
|
||
|
||
1. **Включите Mini App режим** - современный интерфейс
|
||
2. **Настройте корзину** - пользователи не потеряют выбор
|
||
3. **Добавьте FAQ** - ответьте на частые вопросы заранее
|
||
4. **Настройте быстрые ответы** - ускорьте поддержку
|
||
5. **Используйте уведомления** - держите пользователей в курсе
|
||
|
||
---
|
||
|
||
## 🔐 Безопасность и соответствие
|
||
|
||
### 🛡️ Защита данных
|
||
|
||
- ✅ Шифрование чувствительных данных в БД
|
||
- ✅ Безопасное хранение токенов и ключей
|
||
- ✅ Валидация всех входящих данных
|
||
- ✅ Защита от SQL-инъекций через ORM
|
||
- ✅ Rate limiting для предотвращения злоупотреблений
|
||
- ✅ Аудит всех административных действий
|
||
|
||
### 📋 Юридическое соответствие
|
||
|
||
- ✅ Политика конфиденциальности (настраивается)
|
||
- ✅ Публичная оферта (настраивается)
|
||
- ✅ Правила использования (настраивается)
|
||
- ✅ История транзакций для аудита
|
||
- ✅ Соответствие требованиям платёжных систем
|
||
- ✅ GDPR-ready (возможность удаления данных)
|
||
|
||
---
|
||
|
||
## 📞 Нужна помощь?
|
||
|
||
### 🆘 Частые вопросы
|
||
|
||
<details>
|
||
<summary><b>Какие требования к серверу?</b></summary>
|
||
|
||
Минимальные:
|
||
|
||
- 1 vCPU
|
||
- 512 MB RAM
|
||
- 10 GB диск
|
||
- Ubuntu 20.04+ или Debian 11+
|
||
- Docker и Docker Compose
|
||
|
||
Рекомендуемые:
|
||
|
||
- 2+ vCPU
|
||
- 2+ GB RAM
|
||
- 50+ GB SSD
|
||
- Стабильное интернет-соединение
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>Как настроить платёжную систему?</b></summary>
|
||
|
||
1. Получите ключи API в личном кабинете платёжной системы
|
||
2. Добавьте их в `.env` файл
|
||
3. Настройте webhook URL в кабинете провайдера
|
||
4. Протестируйте через админ-панель бота
|
||
5. Включите метод для пользователей
|
||
|
||
Подробнее: [docs/payment-setup.md](docs/payment-setup.md)
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>Как обновить бота?</b></summary>
|
||
|
||
**Вручную:**
|
||
|
||
```bash
|
||
cd /root/remnawave-bedolaga-telegram-bot
|
||
|
||
# Обновление до последнего коммита (до последней мастер ветки, не всегда стабильно):
|
||
|
||
git pull origin main
|
||
|
||
# Обновление до конкретной версии (более стабильно, релиз версии):
|
||
|
||
git fetch --tags
|
||
git checkout v2.7.0
|
||
|
||
# Перезагружаем конты:
|
||
|
||
make reload
|
||
|
||
# Перезагружаем конты с логами:
|
||
|
||
make reload-follow
|
||
```
|
||
|
||
Скрипт автоматически создаст бэкап перед обновлением!
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>Как сделать бэкап?</b></summary>
|
||
|
||
**Автоматически:**
|
||
|
||
- Настройте в `.env`: `BACKUP_AUTO_ENABLED=true`
|
||
- Бэкапы создаются по расписанию
|
||
|
||
**Через админ-панель:**
|
||
|
||
- Админ панель → Настройки → Бэкапы → Создать
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>Бот не отвечает, что делать?</b></summary>
|
||
|
||
1. Проверьте статус: `docker compose ps`
|
||
2. Посмотрите логи: `docker compose logs -f bot`
|
||
3. Проверьте BOT_TOKEN в `.env`
|
||
4. Убедитесь, что все контейнеры запущены
|
||
5. Попробуйте перезапустить: `docker compose restart`
|
||
|
||
Если не помогло - пишите в [чат поддержки](https://t.me/+wTdMtSWq8YdmZmVi)
|
||
|
||
</details>
|
||
|
||
### 💬 Куда обратиться?
|
||
|
||
- 🐛 **Баг?** → [GitHub Issues](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues)
|
||
- 💡 **Идея?** → [GitHub Discussions](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/discussions)
|
||
- 🆘 **Вопрос?** → [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi)
|
||
- 📧 **Личное?** → [@fringg](https://t.me/fringg)
|
||
|
||
---
|
||
|
||
**Made with ❤️ by [@fringg](https://t.me/fringg) and amazing [contributors](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/graphs/contributors)**
|
||
|
||
<div align="center">
|
||
|
||
### ⭐ Не забудь поставить звезду проекту!
|
||
|
||
[](https://star-history.com/#Fr1ngg/remnawave-bedolaga-telegram-bot&Date)
|
||
|
||
</div>
|
||
|
||
</div>
|