Миграция с Marzban на панель Remnawave

Миграция с Marzban

Информация:

Это руководство поможет перенести данные с панели Marzban на панель Remnawave с использованием инструмента миграции Remnawave. Я использовал вариант с экспортом переменных через команду export.

1. Подготовка сервера

1.1. Установка необходимых зависимостей

Убедитесь, что на сервере установлены необходимые инструменты, обновив пакеты системы и установив Git и wget.

# Обновление пакетов системы
sudo apt-get update

# Установка Git и wget
sudo apt-get install -y wget

2. Загрузка инструмента миграции

2.1. Загрузка последней версии

Скачайте предварительно скомпилированный инструмент миграции Remnawave с GitHub.

# Создание и переход в рабочую директорию
mkdir -p /opt/remnawave && cd /opt/remnawave

# Загрузка последней версии (v1.4.0)
wget https://github.com/remnawave/migrate/releases/download/v1.4.0/remnawave-migrate-v1.4.0-linux-amd64.tar.gz

2.2. Распаковка инструмента

Распакуйте загруженный архив.

# Распаковка архива
tar -xf remnawave-migrate-v1.4.0-linux-amd64.tar.gz
Информация:

После распаковки проверьте наличие бинарного файла remnawave-migrate с помощью ls -l.

3. Настройка конфигурации

3.1. Настройка параметров миграции

Я использовал экспорт переменных окружения для настройки миграции. Вот пример:

export PANEL_TYPE=marzban
export PANEL_URL=http://marzban.example.com
export PANEL_USERNAME=admin
export PANEL_PASSWORD=password
export REMNAWAVE_URL=http://remnawave.example.com
export REMNAWAVE_TOKEN=your-token
export DEST_HEADERS="X-Api-Key:abc123"
export SOURCE_HEADERS="X-Debug:true"

./remnawave-migrate
Информация:

Замените значения переменных на ваши данные сервера. Это упрощает выполнение команды без ввода длинных флагов.

3.2. Альтернативный вариант запуска

Можно запустить инструмент, указав параметры напрямую:

./remnawave-migrate \
  --panel-type=marzban \
  --panel-url="http://marzban.example.com" \
  --panel-username="admin" \
  --panel-password="password" \
  --remnawave-url="http://remnawave.example.com" \
  --remnawave-token="your-token" \
  --dest-headers="X-Api-Key:abc123" \
  --preserve-status

3.3. Опции конфигурации

Поддерживаемые флаги и переменные окружения:

Флаг Переменная окружения Описание По умолчанию
--panel-type PANEL_TYPE Тип исходной панели (marzban или marzneshin) marzban
--panel-url PANEL_URL URL исходной панели (например, http://marzban.example.com) -
--panel-username PANEL_USERNAME Имя администратора исходной панели -
--panel-password PANEL_PASSWORD Пароль администратора исходной панели -
--remnawave-url REMNAWAVE_URL URL целевой панели (например, http://remnawave.example.com) -
--remnawave-token REMNAWAVE_TOKEN API-токен целевой панели (Bearer) -
--dest-headers DEST_HEADERS Дополнительные заголовки для Remnawave (например, X-Api-Key) -
--source-headers SOURCE_HEADERS Дополнительные заголовки для исходной панели -
--batch-size BATCH_SIZE Количество пользователей в одной партии 100
--last-users LAST_USERS Перенос только последних N пользователей (0 = все) 0
--preferred-strategy PREFERRED_STRATEGY Стратегия сброса трафика (NO_RESET, DAY, WEEK, MONTH) -
--preserve-status PRESERVE_STATUS Сохранение статуса пользователей с исходной панели false
Безопасность:

Для Remnawave с защитой Caddy:

  1. Войдите в портал аутентификации и перейдите в раздел API Keys.
  2. Создайте новый API-ключ.
  3. Укажите его в DEST_HEADERS, например: export DEST_HEADERS="X-Api-Key:abc123" или --dest-headers="X-Api-Key:abc123".
Информация:

Для тестовой миграции установите LAST_USERS=5 или --last-users=5. API-токен Remnawave можно получить в настройках панели.

4. Проверка после миграции

4.1. Что проверить

Проверьте в панели Remnawave:

  1. Количество пользователей: Совпадает с исходным.
  2. Целостность данных:
    • Имена пользователей
    • Пароли
    • Лимиты трафика
    • Даты истечения
    • Статусы пользователей (если использовался PRESERVE_STATUS=true или --preserve-status)
Информация:

Проверьте несколько пользователей в панели Remnawave для подтверждения точности данных.

5. Поддержка устаревших страниц подписки

Для поддержки устаревших страниц подписки Marzban используйте репозиторий https://github.com/remnawave/subscription-page/.

5.1. Конфигурация Docker Compose по умолчанию

Конфигурация docker-compose.yml по умолчанию:

services:
    remnawave-subscription-page:
        image: remnawave/subscription-page:latest
        container_name: remnawave-subscription-page
        hostname: remnawave-subscription-page
        restart: always
        environment:
            - APP_PORT=3010
            - REMNAWAVE_PANEL_URL=http://remnawave:3000
        ports:
            - '127.0.0.1:3010:3010'
        networks:
            - remnawave-network
        volumes:
            - ./app-config.json:/opt/app/frontend/assets/app-config.json
networks:
    remnawave-network:
        driver: bridge
        external: true

5.2. Настройка для совместимости с Marzban

Для поддержки путей подписки Marzban и расшифровки ссылок обновите секцию environment:

services:
    remnawave-subscription-page:
        image: remnawave/subscription-page:latest
        container_name: remnawave-subscription-page
        hostname: remnawave-subscription-page
        restart: always
        environment:
            - APP_PORT=3010
            - REMNAWAVE_PANEL_URL=http://remnawave:3000
            - MARZBAN_LEGACY_LINK_ENABLED=true
            - MARZBAN_LEGACY_SECRET_KEY=secret
            - REMNAWAVE_API_TOKEN=token
            - CUSTOM_SUB_PREFIX=sub
        ports:
            - '127.0.0.1:3010:3010'
        networks:
            - remnawave-network
        volumes:
            - ./app-config.json:/opt/app/frontend/assets/app-config.json
networks:
    remnawave-network:
        driver: bridge
        external: true

Описание опций конфигурации

Переменная Описание Пример значения
REMNAWAVE_PANEL_URL URL панели Remnawave (например, http://remnawave:3000) http://remnawave:3000
APP_PORT Порт сервиса страниц подписки 3010
MARZBAN_LEGACY_LINK_ENABLED Включение поддержки устаревших ссылок Marzban (должно быть true для следующих опций) true
MARZBAN_LEGACY_SECRET_KEY Секретный ключ из базы данных Marzban для расшифровки устаревших ссылок secret
REMNAWAVE_API_TOKEN API-токен из панели Remnawave (раздел “API Tokens”) token
CUSTOM_SUB_PREFIX Пользовательский префикс для URL подписки (например, sub) sub
Безопасность:
  • Если MARZBAN_LEGACY_LINK_ENABLED=true, укажите все последующие переменные.
  • Получите MARZBAN_LEGACY_SECRET_KEY с помощью:
    SELECT secret_key FROM jwt LIMIT 1;
    
    Пример для Docker:
    docker exec -it marzban-mysql mysql -uroot -pPassword
    
    Замените marzban-mysql и Password на имя вашего контейнера и пароль.
  • Сгенерируйте REMNAWAVE_API_TOKEN в панели Remnawave в разделе “API Tokens”.

5.3. Проверка поддержки устаревших ссылок

  1. Перезапустите сервис:
    docker compose up -d --force-recreate
    
  2. Проверьте старую ссылку подписки Marzban, чтобы убедиться, что она корректно отображает данные пользователя на странице подписки Remnawave.
Информация:

Инструмент поддерживает массовую обработку, выборочную миграцию последних пользователей и настройку стратегии сброса трафика.