Панель управления VPN-инфраструктурой через Telegram Mini App.
Проект уже является рабочим продуктом для администратора: есть Telegram Mini App, FastAPI backend, SQLite-инвентарь, Telegram-бот, базовая интеграция с Marzban, ручное применение HAProxy-конфига с валидацией и откатом, а также фоновые проверки доступности и безопасности.
Сейчас продукт находится в стадии доведения до финальной инфраструктурной панели. Основной фокус следующих этапов:
- развить уже добавленный фундамент импорта существующих нод напрямую из Marzban;
- развить уже добавленную модель нескольких inbound/ролей на одном сервере;
- доработать SSH-доступ по ключу и паролю с последующим редактированием способа подключения;
- собрать метрики по серверам, трафику, пользователям и ЧНН за 14 дней;
- добавить мягкие автоматические реакции на сбои без автоматического изменения HAProxy;
- вынести HAProxy-шаблоны по ролям в редактируемый интерфейс панели.
Для будущих разработчиков и AI-агентов ведется накопительный handoff: README_MODELS.md.
Этот продукт для администратора кластера, который управляет серверами с телефона или ПК:
- добавляет серверы в инвентарь;
- редактирует параметры подключения;
- применяет конфиги HAProxy;
- смотрит статус соединений и безопасность;
- получает доступ к диагностике через встроенные инструменты.
- Откройте Telegram-бота.
- Нажмите кнопку
Открыть Control Tower. - Панель откроется внутри Telegram Mini App.
Важно:
- Внешний браузер не должен использоваться для работы с панелью.
- API панели принимает запросы только с валидным Telegram
initData.
- Просматривать список серверов: имя, IP, роль, SSH порт, inbound-группа, SNI, fingerprint, дата оплаты.
- Видеть индикатор реальной SSH-доступности.
- Видеть статус провижининга (в процессе / готово / ошибка).
- Видеть статус связи с Marzban для каждой ноды.
- Видеть, есть ли приватный SSH-ключ для сервера.
- Удалять сервер (из панели, из Marzban и с cleanup на ноде по SSH).
Сначала выбирается режим:
-
Существующий сервер— только добавление в панель (без изменений в Marzban и без команд на сервере). -
Новый сервер— автодеплой (установка утилит + регистрация в Marzban + привязка к группе). -
Указать:
- имя сервера;
- IPv4 адрес;
- роль (
INGRESS,EGRESS,MASTER); - SSH порт;
- inbound-группу (
IN-RU-DIRECT,IN-EU-DIRECT,IN-TRANSIT-GB,IN-TRANSIT-NO,IN-EU-TRANSIT-RECV,IN-EU-DIRECT-WARP); - порт inbound;
- SNI группы;
- fingerprint;
- дату оплаты;
- приватный SSH-ключ (опционально).
-
Если ключ не задан, ключ генерируется автоматически.
-
Опция
Сервер новыйзапускает автоматическую установку:ufwfail2bandockermarzban-node- базовые утилиты мониторинга
- Из инвентаря нажмите
Изменитьу сервера. - Можно изменить:
- имя;
- IP;
- роль;
- SSH порт;
- inbound-группу;
- inbound порт;
- SNI;
- fingerprint;
- статус (
active/offline); - дату оплаты;
- SSH-ключ (опционально, только если нужно заменить).
- Опционально выполнить
перепривязку к Marzbanпосле сохранения.
- Выбрать целевой сервер.
- Вставить новый конфиг.
- Проверить и применить конфигурацию.
- При ошибке в конфиге будет показано сообщение.
- Видеть статус подключения к Marzban и код ошибки (
401/403и другие). - Переподключать Marzban кнопкой
Переподключить Marzban. - Смотреть аномалии трафика и топ пользователей.
- Просматривать блокировки UFW и события SSH.
- Запускать
sysinfoпо выбранному серверу. - Получать базовую информацию по uptime/RAM/disk.
Панель адаптирована под телефон:
- верхняя панель управления;
- выдвижное меню (кнопка
Меню); - карточки серверов и быстрые действия.
Проверьте:
- вы открываете именно через кнопку в боте;
- в
.envзадан корректныйWEB_APP_URLсhttps://; ADMIN_IDсоответствует вашему Telegram ID.
Если в MARZBAN_USERNAME или MARZBAN_PASSWORD есть спецсимволы (#, &, !, *), задавайте их в кавычках:
MARZBAN_USERNAME=\"G72#nT...\"MARZBAN_PASSWORD=\"v8#R&k29!PzQ*5....\"
Также убедитесь, что в .env нет лишних пробелов и экранирование корректное (например \\# будет преобразовано в #).
Если в логах ошибка Cannot connect to host 127.0.0.1:8000:
- Control Tower запущен в Docker и пытается идти в
127.0.0.1внутри контейнера (это не хост). - Для Marzban на хосте используйте
MARZBAN_URL=http://host.docker.internal:8000.
Если на :8000 у Marzban включен TLS (HTTPS), а не HTTP:
- задайте
MARZBAN_URL=https://<адрес>:8000; - для self-signed сертификата добавьте
MARZBAN_INSECURE_TLS=true.
Проверьте:
- правильный SSH порт;
- сетевую доступность сервера;
- актуальность приватного ключа.
Обычно это проблема маршрутизации до backend (nginx/haproxy/порт приложения).
Подробная техническая документация: docs/TECHNICAL_DOCUMENTATION.md