iz
izerick.dev Blog & Tech Lab
#devops #discord #whatsapp #vps #tutorial

Cómo Desplegar un Bot de Discord o WhatsApp en un VPS Gratuito 24/7

I
Izerick
8 min de lectura

Introducción: El eterno dilema del desarrollo de bots

Construir un bot para Discord o WhatsApp suele ser la parte divertida. Lo programamos en Node.js o Python, añadimos comandos interactivos, integramos APIs de Inteligencia Artificial como OpenAI, y todo funciona perfectamente en nuestra máquina local. Sin embargo, el verdadero desafío técnico llega cuando cerramos nuestra terminal: el bot se desconecta.

Aquí es donde la mayoría de los desarrolladores caen en la trampa de mantener su ordenador encendido 24/7, lo cual es inviable e ineficiente, o pagan por servicios de hosting cloud tradicionales que superan el presupuesto para proyectos personales o comunidades pequeñas. Como desarrollador full stack y entusiasta de la infraestructura, sé que necesitas una solución robusta, automatizada y, sobre todo, gratuita.

En este artículo técnico, veremos paso a paso cómo desplegar bot discord vps gratis (aplicable también para WhatsApp) en una infraestructura de nube real que opere 24/7 sin coste alguno, utilizando herramientas modernas como Linux, PM2 o Docker, y asegurando alta disponibilidad.


1. El mito del “Hosting Gratis” y cómo elegir la mejor capa gratuita (Always Free)

Muchos proveedores de servicios en la nube (Cloud Providers) ofrecen capas gratuitas permanentes (Always Free Tier). Sin embargo, hay que saber filtrar el marketing de la realidad técnica. No todas las instancias gratuitas sirven para correr procesos en segundo plano de manera continua.

Tabla Comparativa de Proveedores de VPS Gratuitos

ProveedorEspecificaciones VPS Gratuito¿Apto para Bots 24/7?Restricciones Principales
Oracle Cloud Infrastructure (OCI)Hasta 4 Cores ARM Ampere, 24 GB RAMSí (Excelente)Demanda alta, requiere tarjeta de crédito para verificación, puede haber límite de región.
Google Cloud Platform (GCP)e2-micro (1 vCPU, 1 GB RAM)Sí (Con reservas)Limitado a regiones específicas de EE.UU., 30 GB HDD, tráfico de red limitado al mes.
AWS (Amazon Web Services)t2.micro / t3.micro (1 año gratis)No a largo plazoCaduca tras 12 meses; si excedes los límites, genera cobros automáticos.
Render / RailwayPares de contenedores (PaaS)ParcialLas instancias entran en modo sleep (inactividad) tras 15 minutos sin peticiones HTTP (malo para websockets de bots).

Para este tutorial, utilizaremos una instancia basada en Oracle Cloud (Always Free) o GCP, ejecutando Ubuntu Server 22.04 LTS, ya que soportan conexiones persistentes mediante WebSockets (esenciales tanto para la API de Discord como para la librería de WhatsApp como Baileys o WPPConnect).


2. Preparación del Entorno en el Servidor VPS (Linux Ubuntu)

Una vez que hayas creado tu instancia en la nube y obtenido tu dirección IP pública, conéctate a través de SSH desde tu terminal:

ssh -i /ruta/a/tu/llave-privada.key ubuntu@tu-ip-publica

Actualización y seguridad básica del sistema

Nunca despliegues código en un servidor recién salido de fábrica sin antes actualizar los paquetes y configurar un entorno seguro básico. Ejecuta los siguientes comandos en tu terminal SSH:

# Actualizar el índice de paquetes y el sistema
sudo apt update && sudo apt upgrade -y

# Instalar herramientas esenciales de red y desarrollo
sudo apt install curl git ufw build-essential -y

Configuración del Firewall (UFW)

Es fundamental mantener los puertos seguros. Aunque nuestros bots no suelen requerir abrir puertos entrantes al mundo exterior (ya que ellos inician la conexión saliente hacia Discord/WhatsApp), es una buena práctica configurar el cortafuegos:

sudo ufw allow OpenSSH
sudo ufw enable

3. Instalación de Node.js y el Gestor de Procesos (PM2)

La gran mayoría de los bots modernos se desarrollan en Node.js. Vamos a instalar la versión LTS actual utilizando el repositorio oficial de NodeSource.

# Instalar Node.js LTS (Versión 20.x o superior)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

# Verificar la correcta instalación
node -v
npm -v

¿Por qué PM2 para mantener el bot 24/7?

Si ejecutas tu bot usando simplemente node index.js, en cuanto cierres la sesión de SSH o el proceso sufra una excepción no controlada (Unhandled Exception), el bot morirá. PM2 es un gestor de procesos de producción para Node.js que reinicia automáticamente tu aplicación si se cae.

Instala PM2 de forma global:

sudo npm install -g pm2

4. Estructura del Proyecto y Despliegue del Bot

Supongamos que tienes tu código fuente en un repositorio de GitHub. Vamos a clonarlo directamente en nuestro VPS. Si aún estás estructurando tu proyecto, asegúrate de utilizar un archivo de configuración segura para tus credenciales (.env).

Ejemplo de Estructura Recomendada (Node.js + Discord.js)

Un archivo de entrada típico (index.js) optimizado para producción luce así:

// index.js - Ejemplo básico de Bot de Discord robusto
const { Client, GatewayIntentBits } = require('discord.js');
require('dotenv').config();

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent
    ]
});

client.once('ready', () => {
    console.log(`[Bot Online] Conectado exitosamente como ${client.user.tag}`);
});

client.on('messageCreate', async (message) => {
    if (message.author.bot) return;

    if (message.content === '!ping') {
        await message.reply('¡Pong! El servidor VPS gratuito está respondiendo al 100%.');
    }
});

// Manejo de errores globales para evitar caídas fatales del proceso
process.on('unhandledRejection', error => {
    console.error('Error no controlado detectado:', error);
});

client.login(process.env.DISCORD_TOKEN);

Clonación y Configuración de Variables de Entorno

  1. Clona tu repositorio en el directorio /var/www/ o en tu carpeta de usuario:
cd ~
git clone https://github.com/tu-usuario/tu-repo-bot.git
cd tu-repo-bot
  1. Instala las dependencias del proyecto:
npm install --production
  1. Crea tu archivo de variables de entorno de producción (.env):
nano .env

Añade tus credenciales de forma segura dentro del archivo:

DISCORD_TOKEN=tu_token_secreto_aqui
CLIENT_ID=tu_client_id_aqui

Guarda y sal del editor (Ctrl + O, Enter, Ctrl + X).


5. Puesta en Marcha con PM2 y Persistencia del Sistema

Ahora que todo está configurado, pondremos a correr nuestro bot utilizando PM2 para garantizar su ejecución continua 24/7.

Creación del archivo de configuración de PM2 (ecosystem.config.js)

Crea un archivo de configuración en la raíz de tu proyecto para gestionar mejor los logs y las políticas de reinicio:

nano ecosystem.config.js

Pega el siguiente contenido adaptado a tu proyecto:

module.exports = {
  apps: [
    {
      name: "mi-bot-produccion",
      script: "./index.js",
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "300M", // Reinicia si consume más de 300MB (previene fugas de memoria)
      env: {
        NODE_ENV: "production",
      },
    },
  ],
};

Lanzamiento y automatización al reiniciar el VPS

Inicia la aplicación con PM2:

pm2 start ecosystem.config.js

Para asegurarte de que si el servidor VPS se reinicia por mantenimiento o un corte de energía el bot vuelva a encender solo, ejecuta el comando de startup que te proporciona PM2:

pm2 startup

(Copia y pega en la terminal el comando exacto con privilegios sudo que te devolverá la consola tras ejecutar la línea anterior).

Finalmente, guarda el estado actual de los procesos:

pm2 save

Puedes monitorear el rendimiento en tiempo real ejecutando:

pm2 monit

6. Errores Comunes en el Despliegue y Cómo Evitarlos

Incluso siguiendo una guía paso a paso, surgen detalles técnicos que pueden frustrar el proceso. Aquí te comparto los errores más recurrentes y cómo solucionarlos con base en la experiencia:

1. Fuga de Memoria (Memory Leaks) en Node.js

  • El problema: Los bots que manejan muchas interacciones o bases de datos locales mal cerradas acumulan memoria con el tiempo. En un VPS gratuito de 1 GB de RAM, esto provocará que el sistema operativo mate el proceso por falta de memoria (OOM Killer).
  • La solución: Configura siempre la propiedad max_memory_restart en tu archivo ecosystem.config.js tal como vimos en el paso anterior. Monitorea los logs con pm2 logs.

2. Desconexiones por inactividad de red o firewall de Oracle/GCP

  • El problema: Las conexiones WebSocket con Discord o WhatsApp se congelan de repente tras unas horas.
  • La solución: Asegúrate de implementar un bloqueador de latidos (heartbeat) o lógica de reconexión automática en el código de tu bot (la gran mayoría de librerías modernas como discord.js o whatsapp-web.js lo traen por defecto, pero debes verificar que tus eventos error y disconnect estén gestionados).

3. Problemas con la versión de Node.js instalada

  • El problema: Al usar sudo apt install nodejs sin el repositorio de NodeSource, Ubuntu suele instalar versiones muy antiguas (ej. v12 o v16), lo que genera errores de sintaxis o incompatibilidad con dependencias modernas.
  • La solución: Utiliza siempre el script oficial de NodeSource para asegurar versiones LTS recientes (v18, v20 o superior).

Conclusión

Desplegar un bot de Discord o WhatsApp en un VPS gratuito 24/7 ya no es un privilegio exclusivo de quienes pagan por servidores dedicados. Combinando la capa gratuita de proveedores cloud como Oracle u OCI con un gestor de procesos sólido como PM2, obtienes una arquitectura resiliente, económica y lista para producción.

Implementar buenas prácticas de DevOps desde proyectos pequeños te ahorra dolores de cabeza a futuro y escala de manera orgánica cuando tu comunidad crezca.

¿Tienes dudas sobre cómo escalar este despliegue a microservicios o necesitas arquitecturas personalizadas para tus proyectos de Inteligencia Artificial y desarrollo web? Explora más artículos técnicos en mi portafolio y blog personal en izerick.dev o contáctame directamente para llevar tus desarrollos al siguiente nivel.

Automatización con IA

¿Pierdes ventas por no responder a tiempo en WhatsApp?

Implementamos agentes y bots de WhatsApp con IA que atienden a tus clientes 24/7, agendan citas y cierran ventas en automático.

Automatizar mi WhatsApp Asesoría personalizada en izerick.dev
iz

Escrito por Izerick

Desarrollador Full Stack & Diseñador de Soluciones de Inteligencia Artificial. Explorando automatizaciones, vibecoding y sistemas escalables en izerick.dev.