Skip to content

Поддержка управления несколькими серверами через одного бота (Multi-Server) #37

Description

@madigson

Проблема / Problem

В текущей версии awgram один экземпляр бота может управлять только одним сервером. Это создаёт ограничения для следующих сценариев использования:

Провайдеры VPN:

• Управление несколькими VPS с для разных регионов.
• Необходимость создавать отдельного бота для каждого сервера.
• Сложность переключения между серверами.

Корпоративные пользователи:

• Разные серверы для разных отделов или проектов.
• Отсутствие единой точки управления.

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

• Невозможность управлять production и staging серверами из одного интерфейса.
• Сложность сравнения конфигураций и клиентов между серверами.

Масштабирование:

• При росте количества клиентов требуется распределение нагрузки
• Нет возможности мигрировать клиентов между серверами

Текущие ограничения:

❌ Один бот = один сервер.
❌ Нет переключения между серверами.
❌ Нет единой статистики по всем серверам.
❌ Нет возможности миграции клиентов.
❌ Каждый сервер требует отдельной установки и настройки бота.

Желаемое поведение / Desired behavior

1. Архитектура Multi-Server

Добавить возможность подключать один экземпляр бота к нескольким серверам
manage_amneziawg.sh.

Основные компоненты:

┌─────────────────────────────────────┐
│         Telegram Bot (awgram)       │
│         Единый интерфейс            │
└─────────────────────────────────────┘
              │
              ▼
    ┌─────────────────────┐
    │   Менеджер серверов  │
    │  (Server Manager)    │
    └─────────────────────┘
              │
    ┌─────────┼─────────┐
    ▼         ▼         ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│Сервер 1  │  │Сервер 2  │  │Сервер 3 │
│(EU)      │  │(US)      │  │(ASIA)   │
└─────────┘ └─────────┘ └─────────┘

2. Управление серверами

Новая команда: /servers
Показать список всех подключённых серверов и управлять ими.

🌐 УПРАВЛЕНИЕ СЕРВЕРАМИ

Активные серверы (3/5):
┌──────────────────────────────────────────┐
│ 🟢 SERVER-EU (основной)                 │
│    Статус: ✅ Онлайн                     │
│    Клиентов: 15/50                      │
│    Трафик: 125 GB                       │
│    Нагрузка: CPU 23% RAM 45%           │
│    Регион: Европа (Frankfurt)           │
│    Подключён: 15.07.2026               │
└──────────────────────────────────────────┘

┌──────────────────────────────────────────┐
│ 🟢 SERVER-US                            │
│    Статус: ✅ Онлайн                     │
│    Клиентов: 8/30                       │
│    Трафик: 67 GB                        │
│    Нагрузка: CPU 12% RAM 32%           │
│    Регион: США (New York)              │
│    Подключён: 20.07.2026               │
└──────────────────────────────────────────┘

┌──────────────────────────────────────────┐
│ 🔴 SERVER-ASIA                          │
│    Статус: ❌ Оффлайн                    │
│    Клиентов: 0/20                       │
│    Трафик: 0 GB                         │
│    Регион: Азия (Singapore)             │
│    Последнее подключение: 25.07.2026   │
└──────────────────────────────────────────┘

[➕ Добавить сервер] [✏️ Редактировать] [🗑️ Удалить]
[📊 Общая статистика] [⚙️ Настройки]

Добавление нового сервера:

➕ ДОБАВЛЕНИЕ СЕРВЕРА

Введите параметры сервера:

Имя сервера: SERVER-EU
Регион: Европа (Frankfurt)
IP-адрес: 1.2.3.4
Порт SSH: 22
Пользователь: root

Способ подключения:
[🔑 SSH ключ] [🔐 Пароль]

Метод управления:
[📁 Локальный manage скрипт]
[🌐 API (REST)]

[✅ Добавить] [❌ Отмена]

3. Переключение между серверами

В главном меню:

🏠 ГЛАВНОЕ МЕНЮ

Текущий сервер: SERVER-EU (основной)

[👥 Клиенты] [📊 Статистика] [⚙️ Настройки]

[🌐 Переключить сервер]
   ▼
   SERVER-EU (основной) ✅
   SERVER-US
   SERVER-ASIA ❌
   ➕ Добавить сервер

Переключение контекста:

При выборе сервера все команды выполняются в контексте выбранного сервера.
В списке клиентов показываются клиенты только текущего сервера.
Статистика и мониторинг относятся к текущему серверу.
Индикатор текущего сервера отображается во всех меню.

4. Унифицированные команды

Все существующие команды работают с текущим выбранным сервером:

👥 КЛИЕНТЫ (SERVER-EU)

Всего: 15 | Онлайн: 8 | Оффлайн: 5 | Просрочено: 2

🟢 📱 phone (онлайн, 1.2GB) — 2 мин назад
🔴 💻 laptop (оффлайн) — 2 дня назад
🟢 📺 tv (онлайн, 5.1GB) — 30 сек назад

[➕ Добавить] [🔄 Обновить] [📊 Статистика]

🌐 Текущий сервер: SERVER-EU [Изменить]

Новые команды для работы с серверами:

/servers - Показать все серверы
/server_add - Добавить новый сервер
/server_remove <name> - Удалить сервер
/server_switch <name> - Переключиться на сервер
/server_info <name> - Детальная информация о сервере
/server_status - Статус текущего сервера
/server_sync - Синхронизировать данные с сервером
/server_migrate - Миграция клиентов между серверами

5. Общая статистика по всем серверам

Новая команда: /servers_stats

Показать сводную информацию по всем серверам:

📊 ОБЩАЯ СТАТИСТИКА ПО ВСЕМ СЕРВЕРАМ

Общие показатели:
- Всего серверов: 3
- Всего клиентов: 23 (лимит: 100)
- Онлайн клиентов: 12
- Суммарный трафик: 192 GB

По серверам:
┌────────────────────────────────────────────────┐
│ SERVER-EU  │ 15 клиентов  │ 125 GB  │ 🟢 ✅ │
│ SERVER-US  │  8 клиентов  │  67 GB  │ 🟢 ✅ │
│ SERVER-ASIA│  0 клиентов  │   0 GB  │ 🔴 ❌ │
└────────────────────────────────────────────────┘

Нагрузка по серверам:
- Средний CPU: 18% (макс: 23% на SERVER-EU)
- Средний RAM: 39% (макс: 45% на SERVER-EU)
- Средний диск: 22% (макс: 28% на SERVER-US)

[📊 Подробно] [📥 Экспорт] [🔄 Обновить]

6. Миграция клиентов между серверами

Новая команда: /server_migrate

Возможность перемещать клиентов между серверами.

🔄 МИГРАЦИЯ КЛИЕНТОВ

Выберите клиента для миграции:
[ ] 📱 phone (SERVER-EU)
[ ] 💻 laptop (SERVER-EU)
[ ] 📺 tv (SERVER-EU)
[ ] 📱 tablet (SERVER-US)

Выберите сервер назначения:
[ ] SERVER-EU (15 клиентов)
[✅] SERVER-US (8 клиентов)
[ ] SERVER-ASIA (0 клиентов)

Параметры миграции:
[✅] Сохранить IP-адрес клиента
[✅] Сохранить срок действия
[✅] Сохранить настройки (DNS, Keepalive)

[🚀 Начать миграцию] [❌ Отмена]

Процесс миграции:

  1. Экспорт клиента с исходного сервера
  2. Импорт клиента на сервер назначения
  3. Обновление конфига клиента (новый endpoint)
  4. Отправка нового конфига клиенту
  5. Удаление клиента с исходного сервера

Пользовательские сценарии

  1. Провайдер VPN управляет тремя серверами в разных регионах. Через одного бота переключается между ними, добавляет клиентов на нужный сервер, отслеживает общую статистику и нагрузку.
  2. Корпоративный администратор управляет production и staging серверами. На staging тестирует новые настройки, потом применяет их на production. В любой момент может сравнить конфигурации.
  3. Администратор замечает, что один сервер перегружен. Переносит часть клиентов на другой сервер через /server_migrate, балансируя нагрузку.
  4. Администратор добавляет новый сервер в другом дата-центре через /server_add, указывая параметры подключения. Бот автоматически настраивает управление новым сервером.
  5. При падении сервера администратор видит статус 🔴 в списке серверов. Быстро переключается на резервный сервер и переводит клиентов через миграцию.
  6. Администратор получает общую статистику по всем серверам: видит, где больше клиентов, где выше нагрузка, и может планировать масштабирование.

Ожидаемые результаты

Единая точка управления: Один бот для всех серверов.
Масштабируемость: Легкое добавление новых серверов.
Балансировка: Распределение клиентов между серверами.
Отказоустойчивость: Быстрое переключение на резервный сервер.
Прозрачность: Полная видимость всех серверов и их состояния.

Связанные Issues
· #32 — Feature Request: Расширенный мониторинг сервера
· #35 — Feature Request: Умные бэкапы и восстановление
· #20 — Feature Request: Мультитенантность (Группы клиентов)

Альтернативы / Alternatives considered

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions