В первой части мы создавали простого бота для управления одним сервером. Во второй — учили его измерять скорость и обновляться. Казалось бы, задача решена? Как бы не так.

В этой статье я расскажу, как проект VPS Manager перерос статус «скрипта для себя» и превратился в полноценную асинхронную платформу с Web-админкой, поддержкой Docker-кластера и базой данных SQLite. Встречайте версию 1.13.0.


Зачем это устанавливать? (Мотивация)

Прежде чем лезть под капот, отвечу на главный вопрос: какую боль это решает?

Если у вас один VPS — вам хватит консоли. Но если у вас их 3, 5 или 10 (для VPN, пет-проектов, тестов), начинаются проблемы:

  1. Разрозненность: Чтобы проверить нагрузку, нужно заходить по SSH на каждый сервер или держать 10 разных ботов в Telegram.

  2. Слепота: В Telegram сложно построить график нагрузки за сутки. Вы видите только мгновенное значение.

  3. Неудобство: Чтобы перезагрузить зависший сервис, нужно открывать терминал, вспоминать 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:

  1. Master (Бот): Главный центр управления. Держит связь с Telegram, хранит БД и поднимает Web-сервер.

  2. 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-поддержку с двумя режимами:

  1. Secure Mode: Бот живет в контейнере под пользователем tgbot. Доступа к хосту нет, только мониторинг.

  2. Root Mode: Привилегированный контейнер. Может перезагружать хост-машину и обновлять пакеты (apt update).

Интересный багфикс (v1.12.4): На новых ядрах Linux запрещено монтирование поверх /proc. Бот падал. Пришлось переписать логику чтения метрик, монтируя системные папки в /proc_host внутри контейнера.

5. UX v1.13: Конструктор меню

Когда функций стало слишком много, главное меню превратилось в «простыню» кнопок. В релизе 1.13.0 мы переосмыслили интерфейс:

  1. Категории: Меню разбито на логические блоки: ? Мониторинг, ⚙️ Управление, ?️ Безопасность.

  2. Конструктор клавиатуры: Это киллер-фича для админов. Вам не нужен модуль VLESS или Speedtest? Просто отключите их в настройках! Вы можете собрать своё идеальное меню, скрыв лишние кнопки, чтобы не перегружать интерфейс.


? Call to Action для Багхантеров

Переход на AsyncIO и SQLite — это переписывание 80% кодовой базы. Несмотря на тесты, баги могут прятаться в самых неожиданных местах.

Я приглашаю сообщество Хабра поучаствовать в тестировании.

Если вы найдете баг, странное поведение при работе с кластером или уязвимость в Web-панели — создайте Issue на GitHub.

Что особенно интересно протестировать:

  1. Стабильность соединения между Мастером и Нодами при плохом интернете.

  2. Нагрузочное тестирование Web-интерфейса.

  3. Корректность миграции данных со старых JSON-версий (если вы обновляетесь).

Как установить?

Самый простой способ (для Ubuntu/Debian):

bash <(wget -qO- https://raw.githubusercontent.com/jatixs/tgbotvpscp/main/deploy.sh)

Скрипт интерактивный: сам проверит зависимости, предложит Docker или Systemd, настроит SSL и базу данных.

? Репозиторий проекта: github.com/jatixs/tgbotvpscp

Буду рад вашим звездам, пулл-реквестам и, конечно, критике в комментариях!

Комментарии (0)