Бэкапы
Автоматические бэкапы
Бот автоматически создаёт резервные копии базы данных по расписанию.BACKUP_TIME, далее повторяет каждые BACKUP_INTERVAL_HOURS.
Содержимое бэкапа
Формат:.tar.gz (или .tar без сжатия). Архив содержит:
| Компонент | Описание |
|---|---|
metadata.json | Метаданные (время, тип БД, таблицы, записи) |
database.sql / database.json | Дамп БД (pg_dump или ORM-дамп) |
files/ | Конфигурационные файлы (app-config.json) |
data/ | Снимок директории data/ |
Ручные бэкапы
Из админ-панели: “Бэкап-панель” → “Создать бэкап”.Отправка в Telegram
BACKUP_ARCHIVE_PASSWORD, бэкап оборачивается в AES-шифрованный ZIP.
Восстановление
Два режима:- Восстановление (merge) — данные добавляются/обновляются (upsert по PK)
- Полная замена — существующие данные удаляются, затем импорт
.json, .json.gz, .tar.gz) через Telegram (до 50 МБ).
После восстановления PostgreSQL последовательности автоматически синхронизируются (sync_postgres_sequences()).
Настройки бэкапов
| Переменная | По умолчанию | Описание |
|---|---|---|
BACKUP_AUTO_ENABLED | true | Автобэкапы |
BACKUP_INTERVAL_HOURS | 24 | Интервал (часы) |
BACKUP_TIME | 03:00 | Время первого бэкапа |
BACKUP_MAX_KEEP | 7 | Максимум хранимых файлов |
BACKUP_COMPRESSION | true | Сжатие gzip |
BACKUP_INCLUDE_LOGS | false | Включать MonitoringLog |
BACKUP_LOCATION | /app/data/backups | Директория хранения |
BACKUP_SEND_ENABLED | true | Отправка в Telegram |
BACKUP_SEND_CHAT_ID | — | ID чата для бэкапов |
BACKUP_SEND_TOPIC_ID | — | ID топика |
BACKUP_ARCHIVE_PASSWORD | — | Пароль AES-шифрования |
Режим техработ
Принцип работы
ГлобальныйMaintenanceMiddleware перехватывает все запросы:
- Если техработы активны — пользователь видит сообщение, запрос блокируется
- Администраторы обходят блокировку
Ручное управление
Из админ-панели: включение с указанием причины (или без —/skip).
Автоматический режим
Мониторинг API RemnaWave с автоматическим включением/выключением:- Фоновая задача проверяет доступность API каждые
MAINTENANCE_CHECK_INTERVALсекунд - При каждой проверке пытается подключиться к RemnaWave (до
MAINTENANCE_RETRY_ATTEMPTSпопыток) - API доступен: сбрасывает счётчик ошибок. Если техработы были автовключены — автоотключает
- API недоступен: увеличивает счётчик. После 3 последовательных сбоев — автовключает техработы
Панель администратора
| Действие | Описание |
|---|---|
| Включить/Выключить | Ручное управление |
| Запустить/Остановить мониторинг | Управление фоновой проверкой |
| Принудительная проверка | Немедленная проверка API |
| Статус панели | Детальная информация (время ответа, ноды, пользователи) |
| Ручное уведомление | Отправка уведомления с выбранным типом и текстом |
Настройка
| Переменная | По умолчанию | Описание |
|---|---|---|
MAINTENANCE_MODE | false | Начальное состояние при запуске |
MAINTENANCE_CHECK_INTERVAL | 30 | Интервал проверки API (секунды) |
MAINTENANCE_AUTO_ENABLE | true | Автовключение после 3 сбоев |
MAINTENANCE_MONITORING_ENABLED | true | Мониторинг при запуске бота |
MAINTENANCE_RETRY_ATTEMPTS | 1 | Попытки на одну проверку |
MAINTENANCE_MESSAGE | Ведутся технические работы... | Сообщение для пользователей |
Система бан-интеграции (BedolagaBan)
Интеграция с внешней системой мониторинга BedolagaBan для контроля злоупотреблений.Типы уведомлений
| Тип | Описание |
|---|---|
punishment | Блокировка за превышение лимита устройств |
enabled | Разблокировка пользователя |
warning | Предупреждение |
network_wifi | Блокировка за использование WiFi |
network_mobile | Блокировка за использование мобильной сети |
POST /ban-notifications/send и пересылаются пользователю.
Шаблоны сообщений
Все шаблоны настраиваются через переменные окружения с плейсхолдерами:| Переменная | Плейсхолдеры |
|---|---|
BAN_MSG_PUNISHMENT | {ip_count}, {limit}, {ban_minutes}, {node_info} |
BAN_MSG_ENABLED | — (статический текст) |
BAN_MSG_WIFI | {ban_minutes}, {network_info}, {node_info} |
BAN_MSG_MOBILE | {ban_minutes}, {network_info}, {node_info} |
BAN_MSG_WARNING | {warning_message} |
Настройка
| Переменная | По умолчанию | Описание |
|---|---|---|
BAN_SYSTEM_ENABLED | false | Включить интеграцию |
BAN_SYSTEM_API_URL | — | URL BedolagaBan API |
BAN_SYSTEM_API_TOKEN | — | Bearer-токен авторизации |
BAN_SYSTEM_REQUEST_TIMEOUT | 30 | Таймаут запросов (секунды) |
Чёрный список
Глобальный чёрный список Telegram ID, загружаемый из GitHub.Как работает
BlacklistMiddlewareпроверяет каждый запрос- Если пользователь в списке — показывается “Доступ запрещён” с причиной
- Результаты кэшируются в памяти на 5 минут
- Список автообновляется с GitHub каждые
BLACKLIST_UPDATE_INTERVAL_HOURS
Формат файла
Настройка
| Переменная | По умолчанию | Описание |
|---|---|---|
BLACKLIST_CHECK_ENABLED | false | Включить проверку |
BLACKLIST_GITHUB_URL | (URL к blacklist.txt) | URL файла на GitHub |
BLACKLIST_UPDATE_INTERVAL_HOURS | 24 | Интервал обновления |
BLACKLIST_IGNORE_ADMINS | true | Игнорировать администраторов |
Защита имён (Banwords)
DisplayNameRestrictionMiddleware блокирует пользователей с подозрительными именами:
| Проверка | Описание |
|---|---|
Символ @ | Блокировка имён с @ или @ |
| Ссылки | t.me/+, joinchat, https://, www., tg:// |
| Обфускация доменов | Варианты вроде t . m e, кириллические подмены |
| Нормализация символов | Кириллические а→a, е→e, о→o и т.д. |
| Запрещённые слова | Из DISPLAY_NAME_BANNED_KEYWORDS |
Сканер заблокированных пользователей
Массовая проверка пользователей, заблокировавших бота:- Отправляет тестовый запрос каждому пользователю
- Определяет заблокировавших бот
- Действия: удалить из БД, из RemnaWave, отметить как заблокированного
Массовый бан
Массовая блокировка по списку Telegram ID:- Ввод ID (по одному на строку, через запятую или пробел)
- Максимум 1000 ID за раз
- Каждому отправляется уведомление
- Результаты: заблокировано / ошибки
Ротация логов
Автоматическая ротация
- Сброс всех обработчиков логов
- Сбор непустых файлов:
info.log,warning.log,error.log,payments.log,bot.log - Создание архива
logs_YYYY-MM-DD.tar.gz - Очистка текущих файлов
- Удаление старых архивов (>
LOG_ROTATION_KEEP_DAYS) - Опционально — отправка в Telegram
Отправка в Telegram
Просмотр логов (админ)
Из админ-панели:- Последние 2300 символов лога в раскрывающемся блоке
- Кнопка обновления
- Скачивание полного файла как Telegram-документ
Настройки логирования
| Переменная | По умолчанию | Описание |
|---|---|---|
LOG_LEVEL | INFO | Уровень логирования |
LOG_FILE | logs/bot.log | Основной лог-файл |
LOG_ROTATION_ENABLED | false | Ротация логов |
LOG_ROTATION_TIME | 00:00 | Время ежедневной ротации |
LOG_ROTATION_KEEP_DAYS | 7 | Хранить архивы (дни) |
LOG_ROTATION_COMPRESS | true | Сжатие gzip |
LOG_ROTATION_SEND_TO_TELEGRAM | false | Отправка архивов |
