PM2Múltiples botsRecursos4 min de lectura

Ejecutar múltiples bots en un VPS

Gestionar varios bots con PM2 ecosystem, systemd y asignación de recursos en un mismo servidor.


¿Cuántos bots puedo correr?

Depende de los recursos de tu VPS. Como referencia:

RAM del VPSBots estimados
1 GB2-3 bots livianos
2 GB4-6 bots
4 GB8-12 bots
8 GB15-25 bots

Método 1: PM2 Ecosystem File

PM2 es ideal para gestionar múltiples procesos Node.js:

javascript
// ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'bot-moderacion',
      script: '/opt/bots/moderacion/index.js',
      max_memory_restart: '200M',
      env: { NODE_ENV: 'production' }
    },
    {
      name: 'bot-musica',
      script: '/opt/bots/musica/index.js',
      max_memory_restart: '300M',
      env: { NODE_ENV: 'production' }
    },
    {
      name: 'bot-tickets',
      script: '/opt/bots/tickets/index.js',
      max_memory_restart: '150M',
      env: { NODE_ENV: 'production' }
    }
  ]
};
bash
# Iniciar todos los bots
pm2 start ecosystem.config.js

# Ver estado de todos
pm2 status

# Reiniciar uno específico
pm2 restart bot-moderacion

# Guardar configuración para auto-start
pm2 save
pm2 startup

Método 2: Múltiples servicios systemd

Creá un template de servicio:

bash
sudo nano /etc/systemd/system/discord-bot@.service
ini
[Unit]
Description=Discord Bot - %i
After=network.target

[Service]
User=deploy
WorkingDirectory=/opt/bots/%i
ExecStart=/usr/bin/node /opt/bots/%i/index.js
Restart=always
RestartSec=10
EnvironmentFile=/opt/bots/%i/.env
MemoryMax=256M
CPUQuota=25%%

[Install]
WantedBy=multi-user.target

Usalo para cada bot:

bash
sudo systemctl enable discord-bot@moderacion
sudo systemctl enable discord-bot@musica
sudo systemctl enable discord-bot@tickets
sudo systemctl start discord-bot@moderacion

Estructura de directorios recomendada

terminal
/opt/bots/
├── moderacion/
│   ├── index.js
│   ├── .env
│   └── package.json
├── musica/
│   ├── index.js
│   ├── .env
│   └── package.json
└── tickets/
    ├── index.js
    ├── .env
    └── package.json

Monitoreo de recursos

bash
# Ver uso de memoria por bot
pm2 monit

# O con htop filtrado
htop -p $(pgrep -d',' -f 'node.*bot')

# Uso total de los bots
pm2 jlist | python3 -c "import sys,json; data=json.load(sys.stdin); print(sum(p['monit']['memory']/(1024*1024) for p in data), 'MB total')"

Recomendaciones

  • Asigná límites de memoria a cada bot para evitar que uno afecte a los demás
  • Usá PM2 si todos son Node.js; systemd si mezclás lenguajes
  • Monitoreá el uso de RAM y CPU regularmente
  • Considerá separar bots críticos en VPS diferentes para alta disponibilidad

¿Te resultó útil esta guía?