Node.jsDiscord.jsDeploy5 min de lectura

Deploy de bot Discord con Node.js

Subir y ejecutar tu bot de Discord en Node.js con reinicio automático y logs persistentes.


Requisitos

  • VPS con Ubuntu/Debian (el plan más básico de Baires Host es suficiente)
  • Node.js 18+ instalado
  • Tu bot desarrollado y testeado localmente
  • Token del bot (desde Discord Developer Portal)

Paso 1: Instalar Node.js

bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
node --version

Paso 2: Subir el código del bot

Opción 1 — Clonar desde Git:

bash
mkdir -p /opt/bots && cd /opt/bots
git clone https://github.com/tu-usuario/mi-bot-discord.git
cd mi-bot-discord

Opción 2 — Subir con rsync:

bash
# Desde tu máquina local
rsync -avz --exclude node_modules ./ usuario@TU_IP:/opt/bots/mi-bot-discord/

Paso 3: Instalar dependencias

bash
cd /opt/bots/mi-bot-discord
npm install --production

Paso 4: Configurar variables de entorno

Creá un archivo .env:

bash
DISCORD_TOKEN=tu_token_aqui
CLIENT_ID=tu_client_id
GUILD_ID=tu_guild_id
PREFIX=!

Importante: Nunca subas el .env a Git. Agregalo a .gitignore.

Paso 5: Instalar PM2 para gestión de procesos

PM2 mantiene tu bot corriendo 24/7 con reinicio automático:

bash
npm install -g pm2

Iniciá el bot:

bash
pm2 start index.js --name "mi-bot" --env production

O si usás un archivo de entrada diferente:

bash
pm2 start src/bot.js --name "mi-bot" --env production

Paso 6: Configurar inicio automático

bash
pm2 startup
pm2 save

Esto asegura que el bot se reinicie si el VPS se reinicia.

Paso 7: Ver logs y monitorear

bash
# Logs en tiempo real
pm2 logs mi-bot

# Estado del bot
pm2 status

# Monitoreo de recursos
pm2 monit

# Reiniciar el bot
pm2 restart mi-bot

Paso 8: Configurar deploy automático

Para actualizar el bot fácilmente, creá un script deploy.sh:

bash
#!/bin/bash
cd /opt/bots/mi-bot-discord
git pull origin main
npm install --production
pm2 restart mi-bot
echo "Deploy completado: $(date)"
bash
chmod +x deploy.sh

Alternativa: Usar systemd directamente

Si preferís no usar PM2, creá /etc/systemd/system/discord-bot.service:

ini
[Unit]
Description=Discord Bot
After=network.target

[Service]
User=deploy
WorkingDirectory=/opt/bots/mi-bot-discord
ExecStart=/home/deploy/.nvm/versions/node/v20.11.0/bin/node index.js
Restart=always
RestartSec=5
EnvironmentFile=/opt/bots/mi-bot-discord/.env

[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable discord-bot
sudo systemctl start discord-bot

Recomendaciones

  • Usá PM2 si tenés múltiples bots en el mismo servidor
  • Configurá log rotation para evitar que los logs llenen el disco
  • Mantené el token seguro y rotalo si sospechás que fue expuesto
  • Monitoreá el uso de memoria; los bots con muchos eventos pueden tener memory leaks

¿Te resultó útil esta guía?