---
title: "Deploy de bot Discord Node.js com PM2: variáveis de ambiente e restart automático"
description: "Coloque bot discord.js ou compatível em produção com PM2 no Linux: ecosystem.config.cjs, clusters opcional, logs, startup systemd e boas práticas de segredo."
url: "https://streethosting.com.br/guias/bots-discord/deploy-bot-discord-nodejs-pm2"
category: "bots-discord"
slug: "deploy-bot-discord-nodejs-pm2"
datePublished: "2026-05-19"
dateModified: "2026-05-20"
author: "Equipe StreetHosting"
difficulty: "intermediario"
language: "pt-BR"
keywords:
  - "deploy bot discord pm2"
  - "discord.js pm2 ecosystem"
  - "node bot systemd"
  - "hospedar bot node brasil"
---

# 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.

> **Resposta rápida**
>
> Para **deploy bot Discord Node.js com PM2**: instale LTS Node via nvm ou repos oficiais, copie projeto para servidor, defina `DISCORD_TOKEN` e flags em **.env**, crie `ecosystem.config.cjs` apontando script entry, rode `pm2 start ecosystem.config.cjs`, habilite `pm2 save` e `pm2 startup` para sobreviver reboot, monitore `pm2 logs --lines 100` e limite RAM com `max_memory_restart`. Para menos SysOps, use [hospedagem de bots StreetHosting](https://streethosting.com.br/bots).

## 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](https://streethosting.com.br/guias/bots-discord/hospedagem-bot-discord-24-7) para definir monitoramento e capacidade.

## Bootstrap Node e arquivo do bot

1. Acesse via `ssh usuario@vps` com chave e usuário sem root.
2. Instale Node LTS e valide versão com `node -v`.
3. Suba o projeto com clone privado ou pipeline CI, sem enviar secrets.
4. Rode `npm ci --omit=dev` e execute build para gerar `dist/`.
5. Teste local no servidor com `node dist/index.js` antes de iniciar no PM2.

Passos de SSH seguro estão em [SSH seguro em VPS Linux](https://streethosting.com.br/guias/vps/ssh-seguro-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 |

> **Atenção**
>
> 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-prod` passa de 5 restarts em poucos minutos, trate como incidente e congele novos deploys até corrigir a causa.

> **Dica**
>
> Em rate limit, prefira fila com retry e backoff. Log típico inclui `429 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](https://streethosting.com.br/bots) quando quiser operação assistida. Se preferir montar tudo por conta, use [VPS Ryzen](https://streethosting.com.br/vps/ryzen); stacks containerizadas podem seguir [Docker no Ubuntu VPS](https://streethosting.com.br/guias/vps/instalar-docker-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.

## Guias relacionados

- [Hospedagem de bot Discord 24/7 no Brasil](https://streethosting.com.br/guias/bots-discord/hospedagem-bot-discord-24-7.md)
- [SSH seguro em VPS Linux: chaves, senhas, fail2ban e hábitos que evitam invasão](https://streethosting.com.br/guias/vps/ssh-seguro-vps-linux.md)
- [Como instalar Docker no Ubuntu 22.04 ou 24.04 em VPS (guia direto ao ponto)](https://streethosting.com.br/guias/vps/instalar-docker-ubuntu-vps.md)

## Produtos citados

- https://streethosting.com.br/bots
- https://streethosting.com.br/vps/ryzen

## Dados estruturados

```json
[
  {
    "@context": "https://schema.org",
    "@type": [
      "Article",
      "TechArticle"
    ],
    "headline": "Deploy de bot Discord Node.js com PM2",
    "name": "Deploy de bot Discord Node.js com PM2: variáveis de ambiente e restart automático",
    "abstract": "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.",
    "description": "Coloque bot discord.js ou compatível em produção com PM2 no Linux: ecosystem.config.cjs, clusters opcional, logs, startup systemd e boas práticas de segredo.",
    "datePublished": "2026-05-19",
    "dateModified": "2026-05-20",
    "author": {
      "@type": "Organization",
      "name": "Equipe StreetHosting"
    },
    "publisher": {
      "@type": "Organization",
      "name": "StreetHosting",
      "url": "https://streethosting.com.br"
    },
    "inLanguage": "pt-BR",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://streethosting.com.br/guias/bots-discord/deploy-bot-discord-nodejs-pm2"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "PM2 substitui Docker?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Para bot único frequentemente sim em VPS simples. Docker brilha quando precisa reprodutibilidade multi-serviço e pipelines CI idênticos a produção."
        }
      },
      {
        "@type": "Question",
        "name": "Posso usar cluster mode no Discord bot?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "discord.js single process é comum; sharding para bots massivos é outro capítulo. Cluster PM2 não substitui sharding correto da API Discord."
        }
      },
      {
        "@type": "Question",
        "name": "Onde guardo DISCORD_TOKEN?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Arquivo .env fora do Git com permissões restritas, ou variável exportada pelo systemd/painel de hospedagem. Nunca console.log token em erro."
        }
      },
      {
        "@type": "Question",
        "name": "Preciso build TypeScript antes?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Sim se código fonte é TS: rode tsc ou pipeline equivalente antes do PM2 apontar para dist/. Alternativa é ts-node em dev apenas."
        }
      }
    ]
  }
]
```
