system/bots/infra/README.md

Infra Bot — Telegram бот управления сервером

Версия: 1.0.0
Дата: 2025-12-30


ЧТО ЭТО

Telegram бот для безопасного управления сервером с телефона.

Возможности:
- Мониторинг (диск, память, CPU, сервисы)
- Безопасная очистка L0 (автоматическая при 90%)
- Интерактивная очистка L1 (меню с кнопками при 95%)
- Критические алерты при 98%

Безопасность:
- Только разрешённые пользователи (белый список)
- Только безопасные операции (L0-L1)
- Rate limiting (10 команд в минуту)
- Логирование всех действий


УСТАНОВКА

1. Создать бота

  1. Открой Telegram, найди @BotFather
  2. Отправь /newbot
  3. Укажи имя: Infra Bot
  4. Укажи username: your_infra_bot (замени на свой)
  5. Скопируй токен

2. Настроить конфиг

Отредактируй system/config/telegram.yaml:

bots:
  infra:
    token: "ВАШ_ТОКЕН_ОТ_BOTFATHER"  # ← вставь токен
    username: "your_infra_bot"       # ← твой username

    allowed_users:
      - 1318367261  # ← твой chat_id (см. ниже как узнать)

3. Узнать свой chat_id

# Напиши боту любое сообщение, затем:
python3 system/bots/infra/run.py

# В логах увидишь:
# Unauthorized access: user_id=ТВОЙ_CHAT_ID

# Добавь этот ID в allowed_users

4. Установить systemd сервис

# Скопировать сервис
sudo cp system/bots/infra/infra-bot.service /etc/systemd/system/

# Перезагрузить systemd
sudo systemctl daemon-reload

# Запустить бота
sudo systemctl start infra-bot

# Включить автозапуск
sudo systemctl enable infra-bot

# Проверить статус
sudo systemctl status infra-bot

# Логи
sudo journalctl -u infra-bot -f

ИСПОЛЬЗОВАНИЕ

Команды мониторинга

/status           общий статус системы
/disk             детали диска
/memory           детали памяти
/services         статус сервисов
/docker           статус Docker
/uptime           uptime сервера
/logs nginx       последние 20 строк лога

Очистка

/cleanup L0      — безопасная очистка (кэши, tmp)
/cleanup L1      — интерактивное меню очистки

Автоматические алерты


ИНТЕРАКТИВНОЕ МЕНЮ L1

При 95% диска бот автоматически отправляет меню:

🟡 ДИСК: 95%  требуется L1 очистка

Выбери опции (можно несколько):

 🐳 Docker images (5-7 GB)
 📦 Snapd (1.2 GB)
 💾 Бэкапы >30д (varies)
 📁 venv/node_modules (varies)
 🗜️ Git gc (сжатие)

[ 1] [ 2]
[ 3] [ 4]
[ 5]
[ Отмена]

Как использовать:
1. Нажми кнопки чтобы выбрать (⬜ → ✅)
2. Нажми [🚀 Выполнить]
3. Дождись результата (до 5 минут)


БЕЗОПАСНОСТЬ

Что бот МОЖЕТ

✅ Чтение статуса (READ ONLY)
✅ Очистка L0 (tmp, caches)
✅ Очистка L1 (Docker images, старые venv)
✅ Restart сервисов из белого списка

Что бот НЕ МОЖЕТ

🔴 Удаление production данных
🔴 Изменение конфигов
🔴 Работа с git
🔴 Создание/удаление пользователей
🔴 L2 очистка (volumes, БД дампы)
🔴 Произвольные команды

Опасные операции — только через SSH!


РАЗРАБОТКА

Структура

system/bots/infra/
├── run.py                      # Точка входа
├── bot.py                      # Основной класс
├── config.py                   # Конфигурация
├── security.py                 # Аутентификация, rate limiting
│
├── handlers/
│   ├── commands.py             # Обработчик команд
│   └── callbacks.py            # Обработчик кнопок
│
├── commands/
│   ├── monitoring.py           # Команды мониторинга
│   └── cleanup.py              # Команды очистки
│
├── monitor_integration.py      # Интеграция с monitor
├── infra-bot.service           # Systemd сервис
└── README.md                   # Эта документация

Добавить команду

  1. Добавить функцию в commands/monitoring.py
  2. Добавить handler в handlers/commands.py
  3. Добавить в /help

Тестирование

# Запуск вручную (для разработки)
python3 system/bots/infra/run.py

# Тест L1 меню
python3 system/bots/infra/monitor_integration.py 95

# Тест критического алерта
python3 system/bots/infra/monitor_integration.py 98

СВЯЗИ


TROUBLESHOOTING

Бот не отвечает

# Проверить статус
sudo systemctl status infra-bot

# Логи
sudo journalctl -u infra-bot -f

# Перезапустить
sudo systemctl restart infra-bot

"Доступ запрещён"

Добавь свой chat_id в allowed_users в telegram.yaml

L1 меню не отправляется

  1. Проверь что бот запущен: systemctl status infra-bot
  2. Проверь токен в telegram.yaml
  3. Проверь логи monitor: cat system/monitor/output/latest.json

Версия: 1.0.0