پرش به مطلب اصلی

مهاجرت از Marzban

Marzban داده‌ها را در MySQL یا MariaDB نگه می‌دارد و XLADA در PostgreSQL. انتقال مستقیم دایرکتوری پایگاه داده میان دو DBMS مختلف ناممکن است: کاربران از طریق 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_KEYsecret از پایگاه دادهٔ 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

secret در جدول 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 را خاموش نکنید تا تعداد کاربران را تطبیق دهید و مطمئن شوید کلاینت‌ها متصل شده‌اند.

گام بعدی​