RavokBot · API privadaAbrir prévia do app

Instalação da API de login, registro e keys na sua VPS

Passo a passo para aaPanel com Apache, MariaDB 10.11, Node.js e PM2. No fim, o aplicativo só funciona com e-mail e senha cadastrados, contas novas exigem token real e tudo fica registrado no banco.

Passo 1

Apague a instalação antiga

Remove os projetos Node e o site que estavam brigando pelo domínio.

  1. Website → Node project: pare e apague os projetos "api" e "apiapp" (marque para apagar os arquivos também).
  2. Website → PHP project: se existir um site api.dmhost.shop, apague também.
  3. Files: apague a pasta /www/wwwroot/apiapp se ainda existir.

Confira no Terminal que não sobrou nada rodando nas portas antigas (não pode aparecer nenhuma linha):

Terminal
ss -ltnp | grep -E ":3100|:3210"

Se ainda aparecer uma linha com node, pare ela com: kill NUMERO_DO_PID (o número depois de pid=).

Passo 2

Confira o Node.js

Precisa ser v18 ou mais novo (você já tem o v20).

Terminal
node -v

Se não aparecer v20.x: App Store → Node.js version manager → instale o v20 e clique em "Set as command line version".

Passo 3

Envie os arquivos da API

Em /www/wwwroot/ravokbot-api, pasta padrão de projetos do aaPanel.

  1. Files → vá em /www/wwwroot → New → Folder → nome: ravokbot-api.
  2. Entre na pasta e envie TODO o conteúdo da pasta server do projeto (não a pasta server em si).

A pasta tem que ficar exatamente assim:

/www/wwwroot/ravokbot-api
src/
scripts/
.env.example
package.json
schema.sql
Passo 4

npm install e .env

Instala as dependências e configura o banco.

Terminal
cd /www/wwwroot/ravokbot-api
npm install --omit=dev
cp .env.example .env
npm run secret

Abra /www/wwwroot/ravokbot-api/.env e preencha (APP_SECRET = o código que o npm run secret mostrou, sem espaço depois do =):

.env
DB_USER=apiapp
DB_PASS=SENHA_DO_BANCO
DB_NAME=apiapp
APP_SECRET=CODIGO_GERADO

Crie as tabelas (só uma vez):

Terminal
npm run migrate
Passo 5

Crie o processo no PM2

Não precisa de build: é JavaScript puro.

Terminal
cd /www/wwwroot/ravokbot-api
pm2 start src/index.js --name ravokbot-api
pm2 save

Teste:

Terminal
curl http://127.0.0.1:3210/health
→ {"ok":true,"service":"ravokbot-api"}

Se não responder: pm2 logs ravokbot-api --lines 30 mostra o erro.

Passo 6

Ligue o domínio pelo Apache

Site comum com HTTPS fazendo proxy para a porta 3210.

  1. Website → PHP project → Add site → Domain: api.dmhost.shop | PHP: Static | Database: não criar.
  2. Abra o site → SSL → Let’s Encrypt → aplique e ative "Force HTTPS".
  3. Abra o site → Reverse proxy → Add → Name: api | Target URL: http://127.0.0.1:3210 | Sent domain: $host → Save.

Teste no navegador:

Navegador
https://api.dmhost.shop/health
→ {"ok":true,"service":"ravokbot-api"}

Qualquer outro endereço responde 404 de propósito: só o aplicativo (com o APP_SECRET) consegue usar a API.

Não abra a porta 3210 no Security do aaPanel. O acesso de fora é só pelo https://api.dmhost.shop.

Passo 7

Gere keys e defina o suporte

Tudo pelo Terminal até você fazer o seu painel.

Keys
cd /www/wwwroot/ravokbot-api

npm run key -- teste 5 --dias 2     # 5 keys de teste de 2 dias
npm run key -- diaria 10
npm run key -- semanal 10
npm run key -- mensal 10
npm run key -- trimensal 5
npm run key -- vitalicio 1 --nota "Cliente João"

No aplicativo a key de teste aparece como "Teste", com os dias que você definiu. Renovar antes de vencer soma o tempo ao que resta.

Suporte
npm run setting -- support_url https://wa.me/5511999999999

Pode trocar quando quiser (também no phpMyAdmin, tabela settings). O botão Suporte do bot sempre busca o valor atual.

Passo 8

Conecte o aplicativo à API

O segredo fica dentro do app compilado, nunca na tela.

Pegue o APP_SECRET que está no /www/wwwroot/ravokbot-api/.env. Na pasta desktop do projeto, copie app-config.example.json para app-config.json e preencha:

desktop/app-config.json
{
  "apiUrl": "https://api.dmhost.shop",
  "appSecret": "O_MESMO_APP_SECRET_DO_.env"
}
Terminal (seu PC)
cd desktop
npm install
npm run dist

O instalador detecta restos de uma instalação antiga e pergunta se deve apagar tudo. Na desinstalação existe a caixinha "Apagar todos os dados e rastros do RavokBot".

Passo 9

Comandos do dia a dia

Sempre dentro de /www/wwwroot/ravokbot-api.

Terminal
pm2 status                                    # está rodando?
pm2 logs ravokbot-api --lines 30              # ver erros
pm2 restart ravokbot-api --update-env         # depois de mudar o .env ou enviar arquivos novos

Segurança incluída

  • API roda no PM2 e escuta só em 127.0.0.1 — invisível para a internet sem o Apache.
  • Toda requisição é assinada com HMAC + horário + nonce: sem o segredo do app, a API responde 404 como se não existisse.
  • Senhas com bcrypt; sessões guardadas apenas como hash SHA-256.
  • Rate limit: login 5 tentativas / 15 min por IP e por e-mail; registro e resgate de key 5 / hora.
  • Bloqueio contra replay (nonce único) e consultas SQL parametrizadas.
  • 1 PC logado por conta (MAX_SESSIONS) — logar em outro derruba o anterior.
  • Sessão salva criptografada no Windows (safeStorage).
  • Logs de tudo em activity_logs, com usuário, IP e dispositivo.

Tabelas no banco

users
Contas: e-mail, senha (hash), telefone, plano, expiração, status (ativo/bloqueado).
license_keys
Keys geradas: código, tipo, dias, quem usou e quando.
sessions
Logins ativos por PC. Para derrubar alguém: revoked = 1.
activity_logs
Tudo que acontece no app, por usuário, com IP e dispositivo.
settings
Configurações editáveis, como support_url.