Resellers (white-label)
Onde no admin: Customers › Resellers › List (
/resellers), Domains & SSL (/resellers/domains), Permissions & wholesale (/resellers/entitlements), Defaults (/resellers/settings). Vagas de revendedores: System › Admin › License & updates (/license).
O que faz
Um revendedor obtém uma cópia com marca própria do portal do cliente no seu próprio domínio, com seus próprios clientes, carteira, preços e (opcionalmente) canais de pagamento. Eles compram de você a preço de atacado e vendem pelo próprio preço. Os clientes deles nunca veem a sua marca, e o domínio do revendedor nunca pode abrir o seu console administrativo. O revendedor gerencia seu negócio pelo console de parceiros em https://partner.<your-domain>.
Requisitos
| Item | Requisito |
|---|---|
| Licença | Uma vaga de domínio de revendedor na sua licença para cada domínio de revendedor personalizado. A página de licença exibe used/max vagas e um link para comprar mais. Sem uma vaga livre, adicionar um domínio falhará com a mensagem "Out of license reseller domain slots". |
| DNS | Cada domínio de revendedor deve apontar para o seu servidor (consulte abaixo). |
| Servidor web e TLS | O nome do host deve alcançar o painel do NexCMP por meio do seu proxy reverso com um certificado válido para esse nome. |
| SMTP configurado para os e-mails de convite e notificação. | |
| Chave principal | Reseller settings › General › rs_enabled está ativado por padrão. |
Preparar a infraestrutura
Defina o endereço público do servidor: seu endereço IPv4 e, se preferir CNAMEs, um nome de host que aponte para ele (por exemplo,
sites.cloud.example.com).Abra Customers › Resellers › Defaults (
/resellers/settings), no grupo Domains & SSL, e defina:Chave Significado rs_server_ipv4O IPv4 público para o qual os registros A dos revendedores devem apontar. rs_cname_targetO nome de host para o qual os registros CNAME dos revendedores devem apontar. rs_master_hostsNomes de host que pertencem ao seu próprio site principal (não podem ser fornecidos a revendedores). rs_platform_domainDomínio pai opcional para subdomínios da plataforma (por exemplo, partners.cloud.example.compara forneceracme.partners.cloud.example.comaos revendedores). Deixar vazio desativa a opção.rs_sites_stale_minutesMinutos antes de o serviço de certificado ser considerado desatualizado (padrão 15). rs_ssl_fail_hoursHoras de tentativas falhas antes de um erro ser disparado (padrão 48). Verifique estes valores antes de enviar as instruções
rs_server_ipv4,rs_cname_targeters_master_hostsvêm preenchidos com valores de exemplo. Substitua-os pelo seu próprio servidor e domínio antes de fornecer as instruções de DNS a um revendedor; caso contrário, as instruções na tela apontarão para o lugar errado.Clique em Save (será solicitada uma justificativa).
Certifique-se de que seu proxy reverso encaminhe os nomes de host dos revendedores para o painel do NexCMP e sirva um certificado para cada um deles. O instalador configura o nginx e o Let's Encrypt apenas para o domínio principal (e para os nomes
admin.epartner.que resolvem). Se você usar a Cloudflare, faça o proxy do nome de host e use o modo Full SSL.
Conectar no NexCMP
Criar o revendedor
Abra Customers › Resellers › List e clique em New reseller. O assistente possui 8 etapas e provisiona tudo no final; cada etapa pode ser repetida com segurança.
Etapa Preencher Reseller Nome legal ou comercial, slug (4 a 31 caracteres de a–z, 0–9 ou -, começando com uma letra; também é o prefixo da fatura), nome de contato, e-mail e telefone, idioma padrão, detalhes de faturamento do revendedor (como comprador de recargas de saldo).Console account Nome de usuário, e-mail da conta, nome completo; Send a one-time invite link by e-mail (válido por 72 horas, recomendado) ou exibir uma senha temporária uma única vez. Brand Nome da marca, nome curto, slogans, cores primárias, e-mail e telefone de suporte, nome do vendedor impresso nas faturas dos clientes, logotipos (fundo claro e escuro), ícone quadrado e favicon: PNG, JPEG, WEBP ou ICO de até 256 KB, sem SVG. Domains O(s) domínio(s) do cliente também com www, qual deles é o principal, um domínio de teste (sslip.io) e a opção de dry-run, ou um subdomínio da plataforma. O assistente exibe DNS OK / DNS not ready e os registros a criar. Pricing & wallet Desconto de atacado (%), piso de varejo (% da tabela), margem padrão (%), limite de crédito, saldo inicial, alerta de saldo baixo, limites de clientes, VMs e domínios, recursos do site (cadastro de clientes, proteção DDoS, tickets de suporte, plano personalizado, redimensionamento, Auto Scaling). Payment channels Quem coleta os pagamentos dos clientes (veja abaixo) e o PayPal próprio e transferência bancária do Vietnã opcionais. Email Nome do remetente e Reply-To. O endereço From permanece o endereço da plataforma até que o DKIM seja configurado para o domínio do revendedor. Review Verifique tudo e clique em Provision everything, ou Save draft (provision later). O provisionamento continua em segundo plano (a cada 30 segundos). Abra o revendedor para ver o progresso e use Continue provisioning ou Retry se alguma etapa falhar.

Apontar o DNS (o revendedor faz isso)
O revendedor (ou você) cria os registros exibidos na aba Domains & SSL:
| Registro | Name | Valor |
|---|---|---|
| TXT (propriedade, apenas na primeira vez) | _site-verify.<domain> | sv=<token> exibido na tela |
A (domínio raiz como shop.example.net) | o domínio | seu rs_server_ipv4 |
CNAME (subdomínio como cloud.example.net) | o domínio | seu rs_cname_target (ou um registro A para rs_server_ipv4) |
| CNAME (opcional) | www.<domain> | seu rs_cname_target |
Além disso:
- Remova qualquer registro AAAA (IPv6), a menos que seu servidor responda nesse endereço IPv6.
- Desative o proxy da CDN (off, nuvem cinza) enquanto o domínio estiver sendo verificado.
- Se o domínio tiver registros CAA, permita
letsencrypt.org.
O token no registro TXT é diferente para cada domínio; copie-o da tela. O sistema verifica novamente o DNS a cada 5 minutos nas primeiras 48 horas, depois a cada hora, e libera um nome cujo registro TXT ainda esteja ausente após 72 horas.
Estados do domínio
Em Customers › Resellers › Domains & SSL (todos os revendedores) e na aba Domains & SSL de um revendedor:
| Estado | Significado |
|---|---|
pending_verify | Aguardando o registro TXT. |
pending_dns / verifying | Aguardando o A ou CNAME apontar para você. |
issuing | Certificado sendo emitido. |
active | Atendendo ao site do revendedor. |
cert_expiring | Certificado próximo da expiração; renovação esperada. |
dns_lost | O DNS parou de apontar para você; após 30 dias, o domínio é removido. |
error | Veja o código de erro; Retry após corrigir. |
removing / removed | Sendo removido; o slot de licença é devolvido. |
Ações da linha: Check now, Retry, Make primary, Test mode (para um domínio de teste), Remove.
Permissões e atacado
Customers › Resellers › Permissions & wholesale (/resellers/entitlements) é uma matriz: uma linha por revendedor, com o desconto e a margem de atacado e um botão de alternância por serviço (por exemplo, DDoS Shield e VPN). Um botão pode ser editado quando o recurso global da plataforma estiver ativado; caso contrário, a célula é somente leitura e aponta para a configuração. A sub-aba Top-up codes define quantos códigos cada revendedor pode emitir por mês (consulte Promotions).
Regras de preços:
- Preço de atacado = preço de tabela x (1 - desconto), podendo ser substituído por plano e por ciclo de cobrança na aba Wholesale pricing do revendedor.
- O revendedor define os preços de varejo e não pode ficar abaixo do floor (percentual da tabela).
- A carteira do revendedor paga o preço de atacado quando os clientes dele compram. A carteira possui limite de crédito, período de carência e teto de saldo devedor (consulte Defaults).
Padrões
Customers › Resellers › Defaults (/resellers/settings) são as chaves rs_* que se aplicam a todos os revendedores. Cada alteração solicita um motivo e é auditada.
| Grupo | Chave | Padrão | Significado |
|---|---|---|---|
| Geral | rs_enabled | 1 | Programa de revendedores ativado. |
rs_platform_collect_enabled | 0 | Permite que a plataforma colete pagamentos de clientes para revendedores. Ative apenas após revisão jurídica. | |
rs_totp_required | 1 | As contas do console de revendedor devem usar autenticação de dois fatores. | |
rs_agreement_version | 1 | Versão do contrato de revenda que eles devem aceitar. | |
| Preços padrão | rs_default_discount_bp | 2000 (20 %) | Desconto de atacado para novos revendedores (pontos-base, de 0 a 9000). |
rs_default_markup_bp | 2500 (25 %) | Margem padrão (de 0 a 50000). | |
rs_default_floor_bp | 9000 (90 %) | Piso de varejo (de 0 a 20000). | |
rs_default_max_domains | 3 | Domínios permitidos por revendedor. | |
| Carteira e pagamentos | rs_grace_hours | 72 | Carência antes que os serviços dos clientes sejam afetados por uma carteira de revendedor vazia. |
rs_overdraft_cap_cents | 5000 | Saldo devedor permitido na carteira. | |
rs_retention_days | 14 | Dias antes que as VMs de um revendedor encerrado sejam destruídas. | |
rs_payout_hold_days | 30 | Dias em que uma comissão fica retida antes de poder ser sacada. | |
rs_payout_min_cents | 5000 | Menor saque. | |
rs_topup_min_cents | 2000 | Menor recarga de carteira por um revendedor. | |
| Pagamentos e e-mail | rs_webhook_base | vazio | URL base pública para webhooks de gateway de revendedor (vazio = usar a URL do site). |
rs_mail_from | vazio | Endereço do remetente para e-mails de revendedores. | |
rs_invoice_show_processor | 1 | Exibir o processador de pagamentos nas faturas. | |
rs_gw_stripe_enabled, rs_gw_usdt_enabled | 1 | Se os revendedores podem configurar seu próprio Stripe ou USDT. |
Quem coleta os pagamentos dos clientes
| Modo | Significado |
|---|---|
| O revendedor coleta (canais próprios) — padrão | O revendedor conecta sua própria conta do Stripe, PayPal, USDT ou conta bancária. Os webhooks deles são https://<reseller-domain>/v1/billing/<gateway>/webhook/r/<id>. Cartões salvos e o recurso auto top-up não estão disponíveis para esses sites. |
| A plataforma coleta | Seus canais são exibidos no site do revendedor. Bloqueado até rs_platform_collect_enabled = 1. |
| Misto | Uma combinação escolhida por canal. |
O que o revendedor vê
O console de parceiro em https://partner.<your-domain> possui Visão geral, Relatórios, Clientes, VMs, Tickets, Pedidos, Pagamentos, Preços, Marca, Landing & legal, Domínios e SSL, E-mail, Carteira e Canais de pagamento. As contas do console possuem a função reseller (completa) ou staff (somente leitura). Para conferir você mesmo, abra o revendedor e clique em Sign in to partner console: você entra por 60 minutos, cada gravação é registrada com seu nome tanto no log do admin quanto no log do revendedor, e as operações financeiras exigem uma segunda confirmação.
Verificar
- Após o provisionamento, a linha da lista do revendedor exibe active e uma coluna Provisioning verde.
- Abra o domínio do revendedor em um navegador: a própria página de login do revendedor aparece com sua marca.
https://<reseller-domain>/adminretorna 404. - Cadastre um cliente de teste nesse domínio: o cliente aparece em Customers › List com o revendedor na coluna Site.
- A página de licença mostra um slot usado a mais.
Limites e notas
- Um slot de licença por domínio personalizado ou de teste; subdomínios da plataforma não usam slot.
- Suspender um revendedor mantém os dados; Close reseller devolve todos os slots de domínio, e a exclusão da VM só é permitida após o período de retenção.
- Os clientes dos revendedores aparecem na sua lista de clientes e podem ser acessados por impersonação como qualquer outro (o link abre no domínio do revendedor).
- Os revendedores não podem ver nem alterar seus canais de pagamento, padrões de cotas ou outros revendedores.
Resolução de problemas
| Sintoma | Causa | Correção |
|---|---|---|
| Out of license reseller domain slots | Todos os slots usados | Libere um slot (remova um domínio) ou compre mais na página de licença. |
Domínio travado em pending_verify | Registro TXT ausente | Crie o registro TXT exatamente como mostrado; use Check now. |
Domínio travado em pending_dns | A/CNAME não aponta para você, um registro AAAA ou o proxy do CDN está ativado | Corrija o DNS, desative o proxy e clique em Check now. |
Estado error | Consulte o código na linha (por exemplo, CAA bloqueando o Let's Encrypt, limite de taxa) | Corrija e clique em Retry. |
| O navegador diz que o host é desconhecido ou "421" | O nome do host não está na licença ou não está roteado para o painel | Adicione o domínio por meio do revendedor (consome um slot) e corrija o proxy reverso. |
| As instruções mostram um IP ou host incorreto | rs_server_ipv4 / rs_cname_target ainda contêm os valores de exemplo | Defina-os em Defaults. |
| O revendedor não pode ativar a cobrança da plataforma | Bloqueado | Defina rs_platform_collect_enabled após análise jurídica. |