Migrar do Marzban
Este guia orienta você no processo de migração de dados de um painel Marzban para um painel Remnawave usando a ferramenta de migração do Remnawave.
1. Preparação do Servidor
1.1. Instalando as Dependências Necessárias
Certifique-se de que seu servidor tenha as ferramentas necessárias instaladas, atualizando os pacotes do sistema e instalando Git e wget.
# Update system packages
sudo apt-get update
# Install Git and wget
sudo apt-get install -y git wget
Execute git --version e wget --version para confirmar a instalação bem-sucedida.
2. Baixando a Ferramenta de Migração
2.1. Baixando o Último Lançamento
Baixe a ferramenta de migração Remnawave pré-compilada da página de lançamentos do GitHub.
# Create and navigate to a working directory
mkdir -p /opt/remnawave && cd /opt/remnawave
# Download the latest version (v2.1.0 as of this guide)
wget https://github.com/remnawave/migrate/releases/download/v2.1.0/remnawave-migrate-v2.1.0-linux-amd64.tar.gz
2.2. Extraindo a Ferramenta
Descompacte o arquivo baixado para acessar o binário.
# Extract the tarball
tar -xf remnawave-migrate-v2.1.0-linux-amd64.tar.gz
Após a extração, você deve ver o binário remnawave-migrate no seu diretório. Use ls -l para verificar.
3. Configuração
3.1. Configurando os Parâmetros de Migração
A ferramenta de migração usa flags de linha de comando para configuração. Abaixo está um exemplo de comando com todos os parâmetros necessários. Substitua os valores de espaço reservado pelos detalhes reais do seu servidor.
./remnawave-migrate \
--panel-type=marzban \
--panel-url=https://your-marzban-server \
--panel-username=admin \
--panel-password=your-admin-password \
--remnawave-url=https://your-remnawave-server \
--remnawave-token=your-remnawave-token \
--preserve-status
3.2. Opções de Configuração
A ferramenta suporta os seguintes flags e suas variáveis de ambiente correspondentes:
| Flag | Variável de Ambiente | Descrição | Padrão |
|---|---|---|---|
--panel-type | PANEL_TYPE | Tipo do painel de origem (marzban ou marzneshin) | marzban |
--panel-url | PANEL_URL | URL do painel de origem (ex.: https://marzban.example.com) | - |
--panel-username | PANEL_USERNAME | Nome de usuário admin do painel de origem | - |
--panel-password | PANEL_PASSWORD | Senha admin do painel de origem | - |
--remnawave-url | REMNAWAVE_URL | URL do painel de destino (ex.: https://remnawave.example.com) | - |
--remnawave-token | REMNAWAVE_TOKEN | Token de API do painel de destino (usado como Authorization Bearer) | - |
--batch-size | BATCH_SIZE | Número de usuários a processar por lote | 100 |
--last-users | LAST_USERS | Migrar apenas os últimos N usuários (0 = todos os usuários) | 0 |
--preferred-strategy | PREFERRED_STRATEGY | Estratégia de reset de tráfego (NO_RESET, DAY, WEEK, MONTH) | - |
--source-headers | SOURCE_HEADERS | Cabeçalhos adicionais para o painel de origem | - |
--dest-headers | DEST_HEADERS | Cabeçalhos adicionais para o Remnawave (ex.: X-Api-Key) | - |
--preserve-status | PRESERVE_STATUS | Preservar status do usuário do painel de origem | false |
--preserve-subhash | PRESERVE_SUBHASH | Preservar hash da URL de assinatura do usuário do painel de origem | false |
--internal-squad | INTERNAL_SQUAD | UUID(s) do(s) grupo(s) interno(s) a atribuir (separados por vírgula) | - |
--external-squad | EXTERNAL_SQUAD | UUID do grupo externo a atribuir a todos os usuários criados | - |
Se você estiver usando o Remnawave com segurança adicional fornecida pelo Caddy, siga estas etapas:
- Faça login no Auth Portal e navegue até API Keys
- Emita uma nova chave de API
- Passe esta chave usando o flag --dest-headers no seguinte formato:
--dest-headers="X-Api-Key:api-key-from-auth-portal"
- Use
--last-users=5para uma migração de teste com um subconjunto pequeno de usuários. - Obtenha seu token de API do Remnawave nas configurações do painel Remnawave (ex.: em API ou Integrações).
- Se
--preferred-strategynão for especificado, a estratégia original do Marzban será usada. A estratégiaYEARé convertida paraNO_RESET.
3.3. Atribuindo Usuários a Grupos
Você pode atribuir automaticamente todos os usuários migrados a grupos internos e/ou externos:
# Assign to a single internal squad
./remnawave-migrate \
[other flags...] \
--internal-squad=e5201a6a-c50e-4b58-9ecb-a4c26c5e74c8
# Assign to multiple internal squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2,uuid3
# Assign to an external squad
./remnawave-migrate \
[other flags...] \
--external-squad=f6302b7b-d61f-5c69-0fdc-b5d37d6e85d9
# Assign to both internal and external squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2 \
--external-squad=uuid3
4. Verificação Pós-Migração
4.1. O Que Verificar
Após a migração, verifique o seguinte no painel Remnawave:
- Contagem de Usuários: Certifique-se de que o número de usuários migrados corresponde à origem.
- Integridade dos Dados:
- Nomes de usuário
- Senhas (Trojan, VLESS UUID, Shadowsocks)
- Limites de tráfego e estratégias de reset
- Datas de expiração
- Status dos usuários (se
--preserve-statusfoi usado) - Hashes de URL de assinatura (se
--preserve-subhashfoi usado) - Atribuições de grupo (se
--internal-squadou--external-squadfoi usado)
Faça login no painel Remnawave e verifique aleatoriamente alguns usuários para confirmar a precisão dos dados.
5. Suporte a Páginas de Assinatura Legadas do Marzban
Após migrar para o Remnawave, a única maneira de garantir suporte e renderização de páginas de assinatura legadas do Marzban é usando o repositório em https://github.com/remnawave/subscription-page/.
5.1. Configuração Padrão do Docker Compose
Por padrão, o arquivo docker-compose.yml para o serviço de página de assinatura é assim:
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
networks:
remnawave-network:
driver: bridge
external: true
5.2. Ajustando para Compatibilidade com Marzban
Durante a migração, você precisa garantir compatibilidade com os caminhos de assinatura do Marzban e habilitar a descriptografia dos links de assinatura do Marzban. Substitua a seção environment na configuração padrão pelo seguinte:
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
networks:
remnawave-network:
driver: bridge
external: true
Explicação das Opções de Configuração
| Variável | Descrição | Valor de Exemplo |
|---|---|---|
REMNAWAVE_PANEL_URL | URL do Painel Remnawave, pode ser http://remnawave:3000 ou https://panel.example.com | http://remnawave:3000 |
APP_PORT | A porta em que o serviço de página de assinatura é executado. | 3010 |
MARZBAN_LEGACY_LINK_ENABLED | Habilita suporte para links de assinatura legados do Marzban. Deve ser true para usar as opções abaixo. | true |
MARZBAN_LEGACY_SECRET_KEY | A chave secreta do seu banco de dados Marzban, necessária para descriptografar links legados. | secret |
REMNAWAVE_API_TOKEN | O token de API gerado no painel do Remnawave (em "API Tokens"). | token |
CUSTOM_SUB_PREFIX | Um prefixo personalizado para URLs de assinatura para corresponder ao seu setup do Marzban (ex.: sub). | sub |
- Se
MARZBAN_LEGACY_LINK_ENABLEDfor definido comotrue, todas as variáveis subsequentes (MARZBAN_LEGACY_SECRET_KEY,REMNAWAVE_API_TOKENeCUSTOM_SUB_PREFIX) devem ser fornecidas. - Para recuperar o
MARZBAN_LEGACY_SECRET_KEY, consulte seu banco de dados Marzban com:Por exemplo, se seu banco de dados Marzban estiver em um contêiner Docker chamadoSELECT secret_key FROM jwt LIMIT 1;marzban-mysql, conecte-se a ele usando:Substituadocker exec -it marzban-mysql mysql -uroot -pPasswordmarzban-mysqlePasswordpelo nome real do seu contêiner e senha root. - Gere o
REMNAWAVE_API_TOKENno painel do Remnawave na seção "API Tokens".
5.3. Verificando o Suporte Legado
Após implantar a configuração atualizada:
- Reinicie o serviço
remnawave-subscription-page:docker compose up -d --force-recreate - Teste um link de assinatura antigo do Marzban para garantir que ele seja resolvido corretamente e exiba dados do usuário na página de assinatura do Remnawave.