Skip to content

Repository files navigation

LUFFY Control Tower

Панель управления 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;
  • смотрит статус соединений и безопасность;
  • получает доступ к диагностике через встроенные инструменты.

Как открыть панель

  1. Откройте Telegram-бота.
  2. Нажмите кнопку Открыть Control Tower.
  3. Панель откроется внутри Telegram Mini App.

Важно:

  • Внешний браузер не должен использоваться для работы с панелью.
  • API панели принимает запросы только с валидным Telegram initData.

Что можно делать в панели

1) Инвентарь серверов

  • Просматривать список серверов: имя, IP, роль, SSH порт, inbound-группа, SNI, fingerprint, дата оплаты.
  • Видеть индикатор реальной SSH-доступности.
  • Видеть статус провижининга (в процессе / готово / ошибка).
  • Видеть статус связи с Marzban для каждой ноды.
  • Видеть, есть ли приватный SSH-ключ для сервера.
  • Удалять сервер (из панели, из Marzban и с cleanup на ноде по SSH).

2) Добавление сервера

Сначала выбирается режим:

  • Существующий сервер — только добавление в панель (без изменений в 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-ключ (опционально).
  • Если ключ не задан, ключ генерируется автоматически.

  • Опция Сервер новый запускает автоматическую установку:

    • ufw
    • fail2ban
    • docker
    • marzban-node
    • базовые утилиты мониторинга

3) Редактирование параметров подключения

  • Из инвентаря нажмите Изменить у сервера.
  • Можно изменить:
    • имя;
    • IP;
    • роль;
    • SSH порт;
    • inbound-группу;
    • inbound порт;
    • SNI;
    • fingerprint;
    • статус (active / offline);
    • дату оплаты;
    • SSH-ключ (опционально, только если нужно заменить).
  • Опционально выполнить перепривязку к Marzban после сохранения.

4) HAProxy

  • Выбрать целевой сервер.
  • Вставить новый конфиг.
  • Проверить и применить конфигурацию.
  • При ошибке в конфиге будет показано сообщение.

5) Marzban и безопасность

  • Видеть статус подключения к Marzban и код ошибки (401/403 и другие).
  • Переподключать Marzban кнопкой Переподключить Marzban.
  • Смотреть аномалии трафика и топ пользователей.
  • Просматривать блокировки UFW и события SSH.

6) Системные логи / диагностика

  • Запускать sysinfo по выбранному серверу.
  • Получать базовую информацию по uptime/RAM/disk.

Мобильный режим

Панель адаптирована под телефон:

  • верхняя панель управления;
  • выдвижное меню (кнопка Меню);
  • карточки серверов и быстрые действия.

Частые проблемы

Панель не открывается

Проверьте:

  • вы открываете именно через кнопку в боте;
  • в .env задан корректный WEB_APP_URL с https://;
  • ADMIN_ID соответствует вашему Telegram ID.

Marzban не подключается (ошибка авторизации)

Если в 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

Проверьте:

  • правильный SSH порт;
  • сетевую доступность сервера;
  • актуальность приватного ключа.

502 Bad Gateway

Обычно это проблема маршрутизации до backend (nginx/haproxy/порт приложения).

Техническая документация

Подробная техническая документация: docs/TECHNICAL_DOCUMENTATION.md

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages