Skip to content

Releases: prasx/vless-manager-proxy

Release v3.0

Choose a tag to compare

@prasx prasx released this 19 Jun 14:07

Что нового

  • Sniffing — настройка определения протоколов (HTTP/TLS/QUIC/FTP) для корректной маршрутизации UDP
  • Safe-only импорт — фильтр: импортировать только TLS/Reality прокси
  • Rebuild config — пересборка конфига Xray без перезапуска демона
  • Config status — индикатор количества узлов в конфиге и кандидатов
  • Auto-poll логов — страница логов обновляется в реальном времени

Улучшения UI

  • Полный редизайн страницы настроек (8 логических секций)
  • Sticky footer с кнопкой "Save all settings"
  • Hamburger-меню для мобильных устройств
  • Speed Test: отключение блокирует зависимые поля
  • Country Filter: счётчик выбранных стран
  • Mobile-first адаптивность: stacked-раскладка на мобильных

Исправления

  • Вынос общей функции api() в отдельный модуль
  • Кэширование range-элементов в настройках (убрано повторное создание)
  • NaN-guard в setRangeValue()
  • resetTuning() теперь сбрасывает safe-only

Release v2.9

Choose a tag to compare

@prasx prasx released this 05 Jun 18:00

Release v2.0 — Чистка кода, рефакторинг, тюнинг

API настроек (POST /api/settings)

  • Убрана диагностика Xray из ответа (JS её не использовал)
  • Добавлена валидация числовых полей (возвращает 400 при ошибке)
  • rebuild_keys вынесен в константу модуля

db.py

  • Удалена устаревшая миграция check_intervalcheck_interval_db/import
  • Удалён мёртвый дефолт test_scope
  • Добавлены type hints во все методы

Новый модуль app/subscribe.py

  • Генерация subscribe.txt вынесена из xray_configurator.py

xray_configurator.py

  • Выделены общие методы: _policy_config(), _inbounds_config(), _api_config(), _geo_routing_rules()
  • generate_full_config и generate_base_config больше не дублируют код
  • Убраны import time внутри функций

Type hints

  • Добавлены в vless.py, utils.py, db.py

UI настройки

  • Исправлен баг: saveSettings() падал из-за ссылок на удалённые testScope/reimportEnabled
  • Исправлен баг: страны и GeoSite-правила не загружались при открытии страницы (loadCountries() не вызывалась)
  • Дефолты слайдеров: DB-only 0.5h (было 1h), Import+Check 3h (было 5h)
  • Диапазоны: DB-only 0.5–5h, Import+Check 1–24h
  • Дефолты: Speed Top-N 30, Balancer random, Speed URL selectel.ru

VLESS Manager v2.8

Choose a tag to compare

@prasx prasx released this 02 Jun 09:33

Что нового

📊 Speed test

После VLESS batch-теста топ-20 (настраивается в Tuning) самых быстрых по пингу прокси замеряют реальную пропускную способность. Скачивается файл 100KB (по умолчанию http://proof.ovh.net/files/100Kb.dat) через каждый профиль, замеряется throughput в kbps. Результат сохраняется в БД и используется как primary сортировка при сборке конфига: выше скорость — выше приоритет для балансера.

Во время замера прогресс-бар показывает Speed test: 5/20 (0 ok). На Dashboard появилась колонка Speed (Kbps/Mbps). После завершения конфиг пересобирается, если появились новые данные.

🛡️ Надёжная проверка API

api_ok() теперь вызывает xray api adi (список outbound) вместо проверки TCP-порта 10085. Раньше при зависшем gRPC (порт открыт, но HandlerService не отвечает) код писал base config без нод на диск, outbound'ы не добавлялись, и трафик уходил в direct. Теперь при не отвечающем API пишется полный конфиг на диск и Xray перезапускается.

list_active_outbounds() переписан на adi вместо statsquery — Xray 26.3.27 не всегда отвечает на stats-запросы. add_outbound() и remove_all_outbounds() теперь проверяют код возврата и логируют ошибки.

⚡ Пропуск пересборки конфига

_apply_all_impl_safe вычисляет хэш входных данных (список ссылок, max_active, фильтр стран, geosite rules, прокси-листен, probe_url, observatory_interval) и пропускает пересборку, если ничего не изменилось. Большинство фоновых тиков больше не пишут на диск и не дёргают Xray API.

🔄 Ретест упавших прокси

Каждый 3-й фоновый цикл перепроверяет failed прокси. Если прокси снова стал доступен — возвращается в working.

🌍 Определение стран без гонок

enrich_all_unknown_countries() теперь использует threading.Lock() с blocking=False — предотвращает конкурентный запуск. Если enrich уже выполняется, второй вызов просто пропускается.

📦 ETag-кеширование подписок

Импорт источников сохраняет ETag/Last-Modified из ответа сервера. При следующем импорте отправляет If-None-Match — если источник не изменился (HTTP 304), импорт пропускается. Меньше трафика, меньше логов, быстрее фоновый цикл.

🧹 Подписка с именами

subscribe.txt теперь добавляет каждой VLESS-ссылке фрагмент #COUNTRY_host, если у неё нет своего имени. Клиенты (v2rayNG, Streisand и др.) отображают осмысленные названия вместо UUID. В заголовок добавлена строка # Avg speed: X Mbps со средней скоростью по всем рабочим прокси. Кеш подписки обновляется не чаще раза в 60 секунд.

🔧 Мелочи

  • observatory_probe_interval вынесен в настройки БД (раньше был константой PROBE_INTERVAL в config.py)
  • SQL LIMIT в generate_full_config — запрос выбирает только max_active записей, а не все рабочие прокси
  • Удалён мёртвый код: _apply_with_throttle, _apply_lock, _last_apply_time из ProxyManager.__init__
  • db_q() — SQLITE_BUSY retry (5 попыток, exponential backoff)
  • Фоновый чекер обёрнут в try/except
  • Backup import не затирает geosite_rules пустым массивом из старых бэкапов
  • Исправлен balancer auto not found при 0 рабочих прокси
  • Исправлена потеря несохранённых geosite-правил в UI

Технические детали

Speed test: _run_speed_test_for_top_test_speed_single (запуск Xray через _start_xray) → _measure_kbps (замер через HTTP-прокси). После цикла — apply_all(blocking=True) если changed == True.

Вынесен общий код Xray: _xray_config(parsed, http_port, socks_port) — сборка конфига, _start_xray(parsed)(proc, tmp_path, http_port) — запуск процесса + ожидание готовности, _stop_xray(proc, tmp_path) — убить процесс + удалить temp-файл. _test_vless и _test_speed_single сократились с 40+ строк до 5.

Config hash: _compute_config_hash()ORDER BY COALESCE(NULLIF(speed_kbps, 0), 999999999) DESC, latency_vless ASC LIMIT max_active → SHA256 ссылок + max_active + allowed + proxy_listen + geo_enabled + geosite_rules + probe_url + observatory_probe_interval.

VLESS Manager v2.6

Choose a tag to compare

@prasx prasx released this 01 Jun 09:45

📋 Changelog

v2.6 (2026-06)

  • Настраиваемое расписание: Base interval, TCP interval, VLESS interval — задаются в секундах. Config + subscribe пересобирается каждый tick.
  • VLESS source-only → all: Каждый VLESS-цикл — сначала source-only, затем все рабочие. Reimport вместе с VLESS.
  • Фильтр по источникам: Вместо All/World/RU — кнопки с именами источников импорта. Прокси без источника — в Custom. Источники без прокси скрываются.
  • Интервалы в UI: Все интервалы на странице Settings. Reset to defaults.
  • Прогресс-бар тестов: Показывает текущий статус и время последнего завершённого теста.
  • DEBUG в фильтре логов: Добавлен уровень DEBUG.
  • allowInsecure удалён: Из stream_settings (Xray 26+ не поддерживает).
  • source_id при импорте: Прокси привязываются к источнику для фильтрации.
  • API: /api/test-progress (last_completed), GET /api/proxies?source=N, /api/statussources[] + unknown_count.

v2.5

  • Двухуровневое тестирование (TCP + реальный VLESS)
  • Фоновый чекер с VLESS-тестами по расписанию
  • Auto-apply при тестировании
  • Observatory + Balancer (leastPing)
  • Фильтр по странам
  • Hot-swap через Xray API
  • Subscription URL
  • Прогресс-бар тестов
  • Батч-операции (test/delete выбранных)
  • Светлая/тёмная тема

VLESS Manager v2.3

Choose a tag to compare

@prasx prasx released this 29 May 10:52

Новое

  • Массовые операции — Чекбоксы в таблице прокси, "Select All", кнопки "Test selected" / "Delete selected" (скрывают Test All / Cleanup при выборе)
  • Фильтр логов по уровню — Выпадающий список All / INFO / WARN / ERROR на странице логов
  • Xray traffic stats — На Dashboard отображается количество активных outbound и узлов с трафиком
  • Централизованная конфигурация — Все пути, порты, интервалы и тюнинг-параметры вынесены в config.py (BASE_DIR, порты 1080/1081/10085, CHECK_INTERVAL, PROBE_INTERVAL, TEST_WORKERS и т.д.)
  • Subscription URL/api/subscribe.txt для v2rayNG, Streisand, Hiddify, Nekobox (автокеширование, профиль "VLESS Manager")
  • Настраиваемая Probe URL — Адрес для Observatory в настройках, кнопка сброса на дефолт

Исправления

  • UUID теперь принимает все версии (v1–v8), а не только v4
  • WebSocket: host перенесён из wsSettings.headers.HostwsSettings.host
  • os.geteuid() не падает на Windows (try/except)
  • Из схемы БД удалены неиспользуемые success_count/fail_count
  • Время в подписке теперь с часовым поясом (Europe/Moscow)
  • Observatory использует заданную probe URL вместо жёстко прописанной
  • Удалены все дублирующиеся inline-импорты now_utc в API-роутах
  • from tester import ...from .tester import ... в tasks.py (относительный импорт)

Изменения

  • Рефакторинг: монолит app.py разделён на пакет app/ с 10+ модулями + фабрика create_app()
  • Удалён /api/subscribe — остался только /api/subscribe.txt
  • /api/rebuild встроен в POST /api/settings при изменении allowed_countries
  • Убрана карточка failed >24h с дашборда
  • Пересборка конфига и кеша подписки после автоимпорта
  • restartXray() — один тост вместо двух накладывающихся
  • Чекбоксы перестилизованы под единый UI-класс .chk-custom (тёмная рамка, галка )

VLESS Manager v2.0

Choose a tag to compare

@prasx prasx released this 28 May 06:28

Новые функции

🔒 Импорт только безопасных прокси

  • Чекбокс Safe only (TLS/Reality) на странице Sources
  • При включении — все прокси без шифрования (security=none) пропускаются
  • Работает для ручного импорта, импорта одного источника и фонового автообновления

📤 Экспорт лучших конфигов

  • Кнопка Export Best на Dashboard
  • Скачивает .txt файл с vless:// ссылками лучших рабочих прокси (сортировка по пингу, лимит из настроек)

🧹 Очистка упавших прокси

  • Кнопка Cleanup (красная) на Dashboard
  • Удаляет все прокси со статусом failed
  • Восстановление — повторный импорт из Sources

🌍 Фильтр по странам

  • Блок Country Filter на странице Settings
  • Таблица со всеми обнаруженными странами, чекбоксы для выбора
  • Конфиг генерируется только из выбранных стран
  • Если фильтр пуст — поведение как раньше (все не-RU)

📄 Пагинация логов

  • Страница Logs теперь показывает 50 записей с кнопкой Show next 50
  • Кнопка Clear для очистки всех логов

📊 Статус Xray на Dashboard

  • В строке // status: отображается зелёный/красный бейдж состояния Xray (running/stopped)
  • Данные берутся из /api/xray/status

Улучшения

  • max_active_proxies изменён с 100 → 30 (настраивается в Settings)
  • Dashboard показывает первые 50 профилей с кнопкой Show next 50 — загрузка страницы ускорена
  • Логирование дополнено сводками: BG check: X working, Y failed, Test all completed: ...
  • При импорте лог указывает сколько прокси пропущено: (skipped 8 unencrypted)
  • Добавлен /api/rebuild для принудительной пересборки конфига

Исправления

  • Race condition в apply_all_proxies() — добавлена блокировка _apply_lock, конкурентные вызовы пропускаются
  • xhttp transport — добавлена обработка net="xhttp" в stream_settings() (ранее прокси с xhttp теряли настройки)
  • SQL injection в allowed_countries — переведено на parameterized query
  • request.json crash — добавлены get_json(silent=True) во всех API-обработчиках
  • Мёртвый код удалён: ensure_config(), xray_hot_reload, дубль _sanitize_outbounds()
  • CSS — исправлен дубль font-weight, стандартизированы отступы тулбаров
  • .gitignore расширен (БД, __pycache__, .env, .vscode/)
  • README: wgetgit clone, обновлена таблица API

API endpoints (новые)

Метод Путь Описание
GET /api/export/best Скачать лучшие vless:// ссылки
POST /api/cleanup Удалить все упавшие прокси
POST /api/rebuild Пересобрать конфиг
GET /api/countries Список стран с количеством прокси
GET /api/logs?limit=&offset= Логи с пагинацией
POST /api/logs/clear Очистить логи

v1.0.0

Choose a tag to compare

@prasx prasx released this 27 May 12:16

Веб-панель для управления VLESS прокси. Добавляй подписки и отдельные ссылки — панель сама тестирует, собирает конфиг со всеми рабочими узлами и применяет через Xray API без перезапуска. Встроенный Observatory + Balancer (leastPing) автоматически выбирают лучший узел.

🌟 Особенности

  • ⚡️ Hot-swap через API — Добавление/удаление outbound на лету, без перезапуска Xray и без разрыва соединений.
  • 🎯 Observatory + Balancer — Xray сам проверяет задержки узлов каждые 30 секунд и выбирает лучший по leastPing.
  • 📡 Умное тестирование — Фоновая проверка каждые 60 секунд. Кнопка "Test All" протестирует все прокси и автоматически пересоберет конфиг.
  • 🌍 Автоопределение страны профиля — Из фрагмента ссылки (#RU, #NL) или через ip-api.com.
  • 🔄 Импорт — Вручную (вставка vless://... ссылки) или по URL подписки (списком).
  • 🎨 Тема — Светлая/тёмная тема.
  • 📊 Фильтры — All / World / Failed.

🚀 Быстрая установка

1. Установка Xray-core

# Установка зависимостей
sudo apt update && sudo apt install unzip -y

# Скачивание Xray под вашу архитектуру
arch=$(uname -m); case "$arch" in x86_64) f="Xray-linux-64.zip" ;; aarch64) f="Xray-linux-arm64-v8a.zip" ;; *) echo "Unsupported arch: $arch"; exit 1 ;; esac
wget "https://github.com/XTLS/Xray-core/releases/latest/download/$f"

# Установка в /usr/local/bin
sudo unzip -o "$f" -d /usr/local/bin/ xray geosite.dat geoip.dat && rm "$f"

# Установка панели
sudo mkdir -p /opt/vless-manager
cd /opt/vless-manager
wget https://raw.githubusercontent.com/prasx/vless-manager-proxy/main/app.py
pip3 install flask

# Настройка systemd-сервисов
# xray.service
sudo tee /etc/systemd/system/xray.service << 'EOF'
[Unit]
Description=Xray VLESS Proxy
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/xray run -config /etc/xray/config.json
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
EOF

# vless-manager
sudo tee /etc/systemd/system/vless-manager.service << 'EOF'
[Unit]
Description=VLESS Manager
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/vless-manager
ExecStart=/usr/bin/python3 /opt/vless-manager/app.py
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# Запуск
sudo systemctl daemon-reload
sudo systemctl enable --now xray vless-manager

Открой http://<ip>:5000.

Структура

vless-manager/
├── app.py              # Flask-приложение
├── xray_config.json    # Активный конфиг Xray (генерируется automatic)
├── proxies.db          # SQLite (создаётся automatic)
├── requirements.txt
├── static/
│   ├── style.css / dashboard.css / sources.css / logs.css
│   ├── dashboard.js / sources.js / settings.js
│   ├── theme.js / toast.js
└── templates/
    ├── base.html / index.html / sources.html / settings.html / logs.html

API

Метод Путь Описание
GET /api/proxies?filter=&country= Список прокси
GET /api/status Статистика
POST /api/add Добавить {"link": "vless://..."}
POST /api/test/<id> Проверить один
POST /api/test-all Проверить все, пересобрать конфиг
DELETE /api/delete/<id> Удалить
GET /api/sources Список источников
POST /api/sources Добавить {"name":"...","url":"..."}
POST /api/sources/<id>/import Импорт из источника
POST /api/sources/import-all Импорт из всех
GET /api/settings Настройки
POST /api/settings Сохранить настройки
GET /api/xray/status Статус + активные outbound
GET /api/xray/outbounds Список узлов и трафик
POST /api/xray/start systemctl start xray
POST /api/xray/stop systemctl stop xray
POST /api/xray-restart systemctl restart xray
POST /api/import Импорт по URL {"url":"..."}