Encontranos en redes
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 --versionPaso 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-discordOpció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 --productionPaso 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 pm2Iniciá el bot:
bash
pm2 start index.js --name "mi-bot" --env productionO si usás un archivo de entrada diferente:
bash
pm2 start src/bot.js --name "mi-bot" --env productionPaso 6: Configurar inicio automático
bash
pm2 startup
pm2 saveEsto 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-botPaso 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.shAlternativa: 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.targetbash
sudo systemctl daemon-reload
sudo systemctl enable discord-bot
sudo systemctl start discord-botRecomendaciones
- 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?