Deploy de bot Discord Node.js com PM2
PM2 é gerenciador de processos Node popular para bots Discord porque reinicia após crash, persiste entre reboots quando combinado com startup hook e centraliza logs mínimos sem montar Kubernetes inteiro. Este guia cobre arquivo ecosystem, env vars para token e integração com hospedagem BR.
Por que PM2 e não só screen
screen e tmux ajudam em sessão manual, mas não controlam ciclo de vida do processo. PM2 registra estado, reinicia quando o bot encerra com erro e mantém comando único para ver logs, memória e contagem de restarts. Em operação diária isso reduz tempo de resposta quando alguém reporta comando quebrado no Discord.
Se a meta é uptime contínuo, combine este guia de deploy com o guia de hospedagem bot Discord 24/7 para definir monitoramento e capacidade. .
Bootstrap Node e arquivo do bot
- Acesse via
ssh usuario@vpscom chave e usuário sem root. - Instale Node LTS e valide versão com
node -v. - Suba o projeto com clone privado ou pipeline CI, sem enviar secrets.
- Rode
npm ci --omit=deve execute build para gerardist/. - Teste local no servidor com
node dist/index.jsantes de iniciar no PM2.
Passos de SSH seguro estão em SSH seguro em VPS Linux.
ecosystem.config e variáveis de ambiente
No ecosystem.config.cjs, declare nome do app, caminho do script compilado e diretório absoluto do projeto. Exemplo comum:name: discord-bot-prod, script: ./dist/index.js,cwd: /home/bot/app e env.NODE_ENV=production. Isso evita restart em pasta errada e facilita diferenciar produção e homologação com nomes separados no pm2 list.
| Chave | Exemplo | Notas |
|---|---|---|
| DISCORD_TOKEN | xxx.yyy.zzz | Rotacione ao suspeitar de vazamento |
| NODE_ENV | production | Evita comportamento de desenvolvimento |
| CLIENT_ID | 123456789012345678 | Necessário para registrar slash command |
Se token for exposto em commit ou log, regenere no portal do Discord e reinicie o processo com pm2 restart discord-bot-prod --update-env.
Logs, restarts e limites de memória
Configure max_memory_restart para interromper leak de memória antes do kernel matar processos. Em bot médio, começar com 300M a 500M costuma funcionar, mas ajuste pelo RSS real. Ative rotação de logs e acompanhe pm2 logs --lines 100 após deploy para garantir que login e registro de comandos terminaram sem erro.
Exemplo de log saudável: [Gateway] Logged in as ModBot#1234. Exemplo de alerta: Error: Used disallowed intents seguido de reinício contínuo. Quando a contagem em pm2 show discord-bot-prodpassa de 5 restarts em poucos minutos, trate como incidente e congele novos deploys até corrigir a causa.
Em rate limit, prefira fila com retry e backoff. Log típico inclui429 Too Many Requests e campo retry_after. Use esse valor para agendar nova tentativa sem gerar loop.
Hospedagem gerenciada versus VPS
Em VPS você controla sistema inteiro, inclusive updates, firewall e hardening. Em hospedagem gerenciada você entrega menos tempo para manutenção e mais tempo para código do bot. Contrate planos de bot Discord StreetHosting quando quiser operação assistida. Se preferir montar tudo por conta, use VPS Ryzen; stacks containerizadas podem seguir Docker no Ubuntu VPS.
- Gerenciada: painel e suporte para rotina de deploy e restart.
- VPS: liberdade para múltiplos bots e serviços auxiliares.
- Executar pm2 save após alterar ecosystem.
- Validar reboot com janela informada para a equipe.
- Checar status com pm2 status e pm2 logs após restart.
- Manter política de atualização de dependências e token rotation.
Perguntas frequentes
- PM2 substitui Docker?
- Para bot único frequentemente sim em VPS simples. Docker brilha quando precisa reprodutibilidade multi-serviço e pipelines CI idênticos a produção.
- Posso usar cluster mode no Discord bot?
- discord.js single process é comum; sharding para bots massivos é outro capítulo. Cluster PM2 não substitui sharding correto da API Discord.
- Onde guardo DISCORD_TOKEN?
- Arquivo .env fora do Git com permissões restritas, ou variável exportada pelo systemd/painel de hospedagem. Nunca console.log token em erro.
- Preciso build TypeScript antes?
- Sim se código fonte é TS: rode tsc ou pipeline equivalente antes do PM2 apontar para dist/. Alternativa é ts-node em dev apenas.
Próximo passo
Ver planos de bots
Bots Discord 24/7 com ativação rápida e suporte em português.
Guias relacionados
Hospedagem de bot Discord 24/7 no Brasil
Hospedagem bot Discord 24/7 combina process manager com restart automático, token fora do código, logs e servidor no Brasil para latência baixa com a API e seus jogadores.
SSH seguro em VPS Linux: chaves, senhas, fail2ban e hábitos que evitam invasão
SSH costuma ser o primeiro alvo em qualquer VPS com IP público. Este guia mostra um fluxo prático para reduzir risco sem complicar a rotina: chave ED25519, login sem senha, acesso administrativo com sudo, bloqueio de tentativas automáticas e revisão periódica de chaves autorizadas.
Como instalar Docker no Ubuntu 22.04 ou 24.04 em VPS (guia direto ao ponto)
Instalar Docker em VPS Ubuntu com estabilidade depende de fonte de pacote correta e validação em etapas. Neste guia, você configura repositório oficial, instala Engine e Compose, testa o daemon e aplica cuidados básicos de segurança antes de subir aplicações.