Это руководство поможет перенести данные с панели 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:
- Войдите в портал аутентификации и перейдите в раздел API Keys.
- Создайте новый API-ключ.
- Укажите его в
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:
- Количество пользователей: Совпадает с исходным.
- Целостность данных:
- Имена пользователей
- Пароли
- Лимиты трафика
- Даты истечения
- Статусы пользователей (если использовался
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с помощью:
Пример для Docker:SELECT secret_key FROM jwt LIMIT 1;
Заменитеdocker exec -it marzban-mysql mysql -uroot -pPasswordmarzban-mysqlиPasswordна имя вашего контейнера и пароль. - Сгенерируйте
REMNAWAVE_API_TOKENв панели Remnawave в разделе “API Tokens”.
5.3. Проверка поддержки устаревших ссылок
- Перезапустите сервис:
docker compose up -d --force-recreate - Проверьте старую ссылку подписки Marzban, чтобы убедиться, что она корректно отображает данные пользователя на странице подписки Remnawave.
Инструмент поддерживает массовую обработку, выборочную миграцию последних пользователей и настройку стратегии сброса трафика.