Перейти к основному содержимому

Переезд с Marzban

Marzban хранит данные в MySQL или MariaDB, а XLADA — в PostgreSQL. Прямой перенос каталога базы между разными СУБД невозможен: пользователей переносят через API панели, а старые ссылки подписки продолжают работать через режим совместимости страницы подписки. Перенос «одной командой» возможен только для данных пользователей; конфигурацию Xray, ноды и хосты настраивают в XLADA заново.

Что переносится​

Данные MarzbanКак переносятся
Имена пользователейusername в POST /api/users
Пароли Trojan и Shadowsocks, UUID VLESSполя trojanPassword, ssPassword, vlessUuid
Лимит трафика и период сбросаtrafficLimitBytes, trafficLimitStrategy
Дата истеченияexpireAt в формате ISO 8601
Статус (active, disabled, limited, expired)status
Привязка к скводамinternal-squads или массовые операции
Старые ссылки подпискирежим MARZBAN_LEGACY_* на странице подписки

Не переносятся администраторы, история трафика, inbound/outbound и хосты — их заводят в XLADA заново через профили конфигураций и хосты.

Ограничения
  • Тип пользователя в Marzban определяется протоколом: для vless нужен vlessUuid, для trojan — trojanPassword, для shadowsocks — ssPassword. Если протокол не переносить, пользователю понадобится новый ключ.
  • Имя пользователя в XLADA — только латиница, цифры, _ и - (в API не короче трёх символов). При разборе старой ссылки недопустимые символы заменяются на _, а имя короче шести символов дополняется до шести. Заводите пользователей сразу в этом виде, иначе старая ссылка не найдёт владельца.
  • Готового импортёра внутри панели нет: отдельный инструмент миграции живёт в репозитории организации xray-panel/migrate, а панель лишь принимает данные через API.

Поддержка legacy-ссылок​

Страница подписки умеет принимать старые ссылки Marzban и сопоставлять их с пользователями XLADA по имени. Режим включается переменными окружения:

ПеременнаяНазначение
MARZBAN_LEGACY_LINK_ENABLEDвключает модуль совместимости
MARZBAN_LEGACY_SECRET_KEYсекрет из базы Marzban; несколько ключей — через запятую
MARZBAN_LEGACY_SUBSCRIPTION_VALID_FROMотсечка: ссылки, созданные раньше даты, не принимаются
MARZBAN_LEGACY_DROP_REVOKED_SUBSCRIPTIONSобрывать соединение для отозванных подписок
CUSTOM_SUB_PREFIXпрефикс ссылки подписки, например sub

При включённом режиме MARZBAN_LEGACY_SECRET_KEY обязателен — без него контейнер страницы подписки не стартует.

services:
remnawave-subpage:
image: ghcr.io/xray-panel/subscription-page:latest
restart: unless-stopped
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=http://remnawave:3000
- REMNAWAVE_API_TOKEN=токен_из_панели
- MARZBAN_LEGACY_LINK_ENABLED=true
- MARZBAN_LEGACY_SECRET_KEY=secret_из_базы_marzban
- CUSTOM_SUB_PREFIX=sub

Секрет лежит в таблице jwt базы Marzban:

SELECT secret_key FROM jwt LIMIT 1;
Какие ссылки понимает режим

Поддерживаются обе схемы Marzban: JWT с алгоритмом HS256 и полем access: subscription, а также base64url-токен с подписью SHA-256. Если пользователя с таким именем в XLADA нет, старая ссылка не откроется.

Пошаговый план​

  1. Инвентаризация. Выгрузите из Marzban список пользователей и сохраните secret_key из таблицы jwt. Посчитайте число пользователей — это эталон для проверки.
  2. Установка XLADA. Поднимите панель и ноды по инструкциям Установка панели и Установка ноды, создайте API-токен в Настройки → API Tokens.
  3. Перенос пользователей. Заведите их методом POST /api/users, сохраняя имя, дату истечения и лимит трафика:
curl -sX POST https://panel.example.com/api/users \
-H "Authorization: Bearer $XLADA_API_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"username": "john_doe", "expireAt": "2026-01-17T15:38:45.065Z", "trafficLimitBytes": 0, "trafficLimitStrategy": "NO_RESET"}'
  1. Скводы. Распределите перенесённых пользователей по внутренним скводам — поштучно или массово через /api/users/bulk/update-squads.
  2. Старые ссылки. Разверните страницу подписки с MARZBAN_LEGACY_* из примера выше и перезапустите её контейнер.
  3. Проверка. Откройте пару старых ссылок Marzban: страница должна показать данные пользователя XLADA. Затем проверьте свежие ссылки в разделе Пользователи.
Совет

Переносите сначала 5–10 пользователей и убеждайтесь, что и вход, и старая ссылка работают. Marzban не выключайте, пока не сверите число пользователей и не убедитесь, что клиенты подключились.

Что дальше​