В первой части мы создавали простого бота для управления одним сервером. Во второй — учили его измерять скорость и обновляться. Казалось бы, задача решена? Как бы не так.
В этой статье я расскажу, как проект VPS Manager перерос статус «скрипта для себя» и превратился в полноценную асинхронную платформу с Web-админкой, поддержкой Docker-кластера и базой данных SQLite. Встречайте версию 1.13.0.
Зачем это устанавливать? (Мотивация)
Прежде чем лезть под капот, отвечу на главный вопрос: какую боль это решает?
Если у вас один VPS — вам хватит консоли. Но если у вас их 3, 5 или 10 (для VPN, пет-проектов, тестов), начинаются проблемы:
Разрозненность: Чтобы проверить нагрузку, нужно заходить по SSH на каждый сервер или держать 10 разных ботов в Telegram.
Слепота: В Telegram сложно построить график нагрузки за сутки. Вы видите только мгновенное значение.
Неудобство: Чтобы перезагрузить зависший сервис, нужно открывать терминал, вспоминать IP и пароль.
Что дает VPS Manager v1.13:
Единое окно: Один «Мастер-бот» управляет всей вашей сетью. Переключайтесь между серверами одной кнопкой.
Гибридный интерфейс: Быстрые команды (ребут, статус) — в Telegram. Красивые графики и логи — в Web-панели.
Безопасность: Бот работает в изолированном Docker-контейнере или под отдельным пользователем. Никаких паролей в открытом виде.
1. Архитектурная революция: AsyncIO и SQLite
Главной проблемой версий 1.10.x была библиотека requests. Любой сетевой лаг (например, при проверке IP или Speedtest) блокировал весь бот. Пока он «думал», никто не мог нажать кнопку «Меню».
В версии 1.12.0 мы полностью переписали ядро:
AsyncIO Core: Полный переход на
aiohttp. Теперь бот может одновременно качать файлы обновления, пинговать 10 серверов и отвечать вам в чате.SQLite: Хранить состояние кластера в JSON-файле (
nodes.json) стало опасно. Мы внедрилиaiosqlite. Это дало транзакционную целостность и возможность хранить историю метрик (CPU/RAM/Traffic) для построения графиков.
Для пользователей: Миграция бесшовная. При первом запуске бот сам конвертирует старый JSON в новую базу данных
nodes.db.
2. Киллер-фича: Агенты и Ноды
Как управлять десятком серверов через одного бота? Мы внедрили архитектуру Master-Slave:
Master (Бот): Главный центр управления. Держит связь с Telegram, хранит БД и поднимает Web-сервер.
Node (Агент): Легковесный Python-скрипт (
tg-node), который ставится на подчиненные серверы. Он не требует токена Telegram — он общается только с Мастером по HTTP API.
Как это работает:
В боте нажимаете "? Ноды" -> "➕ Добавить". Получаете токен.
На удаленном сервере запускаете наш установочный скрипт
deploy.shи выбираете "8) Install NODE".Вводите IP Мастера и токен. Всё. Сервер появился в вашем меню.
Теперь бот умеет слать алерты не только о превышении CPU, но и о Node Downtime — если удаленный сервер перестал слать «пульс» (heartbeat).
3. Web-интерфейс: Выходим за пределы Telegram
Текст — это хорошо, но графики лучше. Мы встроили в бота полноценный веб-сервер на aiohttp.
Возможности Web-панели:
Дашборд: Живые графики нагрузки (CPU/RAM/Network) и список всех нод.
Логи: Просмотр системных логов (
bot.log) с подсветкой ошибок и поиском.Настройки: Управление уведомлениями, порогами алертов и смена паролей.
(Скриншот новой темной темы Web UI)
Безопасность Web UI:
Защита от Brute-Force (бан IP после 5 ошибок).
Серверные сессии (никаких данных в Cookies).
Автоматический HTTPS: Инсталлятор
deploy.shтеперь сам предлагает поднять Nginx и получить SSL-сертификат через Let's Encrypt.
4. Docker: Полная изоляция
Изначально бот был просто systemd-сервисом. В версии 1.10.14 мы добавили полноценную Docker-поддержку с двумя режимами:
Secure Mode: Бот живет в контейнере под пользователем
tgbot. Доступа к хосту нет, только мониторинг.Root Mode: Привилегированный контейнер. Может перезагружать хост-машину и обновлять пакеты (
apt update).
Интересный багфикс (v1.12.4): На новых ядрах Linux запрещено монтирование поверх /proc. Бот падал. Пришлось переписать логику чтения метрик, монтируя системные папки в /proc_host внутри контейнера.
5. UX v1.13: Конструктор меню
Когда функций стало слишком много, главное меню превратилось в «простыню» кнопок. В релизе 1.13.0 мы переосмыслили интерфейс:
Категории: Меню разбито на логические блоки:
? Мониторинг,⚙️ Управление,?️ Безопасность.Конструктор клавиатуры: Это киллер-фича для админов. Вам не нужен модуль VLESS или Speedtest? Просто отключите их в настройках! Вы можете собрать своё идеальное меню, скрыв лишние кнопки, чтобы не перегружать интерфейс.
? Call to Action для Багхантеров
Переход на AsyncIO и SQLite — это переписывание 80% кодовой базы. Несмотря на тесты, баги могут прятаться в самых неожиданных местах.
Я приглашаю сообщество Хабра поучаствовать в тестировании.
Если вы найдете баг, странное поведение при работе с кластером или уязвимость в Web-панели — создайте Issue на GitHub.
Что особенно интересно протестировать:
Стабильность соединения между Мастером и Нодами при плохом интернете.
Нагрузочное тестирование Web-интерфейса.
Корректность миграции данных со старых JSON-версий (если вы обновляетесь).
Как установить?
Самый простой способ (для Ubuntu/Debian):
bash <(wget -qO- https://raw.githubusercontent.com/jatixs/tgbotvpscp/main/deploy.sh)
Скрипт интерактивный: сам проверит зависимости, предложит Docker или Systemd, настроит SSL и базу данных.
? Репозиторий проекта: github.com/jatixs/tgbotvpscp
Буду рад вашим звездам, пулл-реквестам и, конечно, критике в комментариях!