Releases: prasx/vless-manager-proxy
Release list
Release v3.0
Что нового
- 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
Release v2.0 — Чистка кода, рефакторинг, тюнинг
API настроек (POST /api/settings)
- Убрана диагностика Xray из ответа (JS её не использовал)
- Добавлена валидация числовых полей (возвращает 400 при ошибке)
rebuild_keysвынесен в константу модуля
db.py
- Удалена устаревшая миграция
check_interval→check_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
Что нового
📊 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
📋 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/status→sources[]+unknown_count.
v2.5
- Двухуровневое тестирование (TCP + реальный VLESS)
- Фоновый чекер с VLESS-тестами по расписанию
- Auto-apply при тестировании
- Observatory + Balancer (leastPing)
- Фильтр по странам
- Hot-swap через Xray API
- Subscription URL
- Прогресс-бар тестов
- Батч-операции (test/delete выбранных)
- Светлая/тёмная тема
VLESS Manager v2.3
Новое
- Массовые операции — Чекбоксы в таблице прокси, "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.Host→wsSettings.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
Новые функции
🔒 Импорт только безопасных прокси
- Чекбокс 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:
wget→git 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
Веб-панель для управления 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":"..."} |