Ir al contenido
Volver al blog

Ejecutar un bot de Discord 24/7 en un VPS con Python

Mantén un bot de Discord en línea con Python y systemd: instala dependencias, protege el token, revisa intents y monitoriza reinicios y logs.

  • hosting bot Discord
  • bot Discord 24/7
  • Python VPS

Si ejecutas tu bot en el ordenador, se desconecta cuando cierras el programa o apagas el equipo. Un VPS puede mantener el proceso activo y arrancarlo de nuevo tras un reinicio; no configura el bot de Discord ni corrige sus errores por ti. Esta guía usa Python con discord.py y un servicio systemd en Debian o Ubuntu.

Un bot que se conecta al Gateway de Discord normalmente inicia una conexión saliente y no necesita abrir un puerto HTTP de entrada. Si tu proyecto usa interacciones por webhook, un panel web, audio u otros servicios, revisa esos requisitos por separado. La configuración exacta depende del código generado y de los permisos que necesite.

1. Comprueba el bot y sus permisos

Localiza el punto de entrada, requirements.txt o pyproject.toml y la versión de Python que espera el proyecto. Prueba el bot localmente y comprueba que el token no esté escrito en el código ni subido al repositorio. En el portal de Discord crea una aplicación y una cuenta de bot; usa un token de bot, no automatices una cuenta personal.

Activa solo los intents y permisos que requiere cada función. Por ejemplo, leer el contenido de mensajes puede requerir el intent privilegiado correspondiente en el portal y en el código. No concedas Administrator solo para evitar revisar permisos. Invita el bot con los scopes y permisos mínimos que necesita.

2. Prepara un VPS y el entorno Python

Elige un VPS Hostbrid con Debian o Ubuntu compatible con la versión del proyecto. Conéctate por SSH, aplica actualizaciones y crea una cuenta de servicio dedicada:

sudo apt update
sudo apt install git python3-venv
sudo adduser --system --group --home /srv/discord-bot discordbot

Clona el repositorio en /srv/discord-bot/current con una clave de despliegue de solo lectura si es privado. Instala las dependencias dentro de un entorno virtual:

sudo -u discordbot python3 -m venv /srv/discord-bot/venv
sudo -u discordbot /srv/discord-bot/venv/bin/pip install -r /srv/discord-bot/current/requirements.txt

Si el proyecto usa Node.js y discord.js, no ejecutes estos comandos Python: instala la versión de Node compatible con el paquete declarado y las dependencias del proyecto con npm ci. La unidad systemd puede ejecutar Python o Node; el proceso debe coincidir con el repositorio.

3. Guarda el token fuera del código

Guarda el token en /etc/discord-bot.env, fuera del repositorio y con permisos restringidos. El código Python debe leerlo desde el entorno, por ejemplo con os.environ["DISCORD_TOKEN"], y pasarlo al cliente sin imprimirlo. No lo pongas en argumentos visibles del proceso, en Git, en un issue ni en logs. Si se filtra, regénéralo desde el portal de Discord y actualiza el servicio.

Ejecuta primero el bot manualmente como el usuario discordbot con el archivo de entorno cargado. Comprueba el mensaje de inicio y que aparece online en el servidor correcto. No publiques el token en el artículo, ni siquiera como ejemplo completo.

4. Haz que arranque con systemd

Cuando la prueba funcione, crea /etc/systemd/system/discord-bot.service:

[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target

[Service]
User=discordbot
Group=discordbot
WorkingDirectory=/srv/discord-bot/current
EnvironmentFile=/etc/discord-bot.env
ExecStart=/srv/discord-bot/venv/bin/python /srv/discord-bot/current/bot.py
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Sustituye bot.py por el punto de entrada real. Para Node, cambia ExecStart por la ruta absoluta del binario Node y el archivo de entrada; confirma esa ruta con la versión instalada y no dependas del PATH interactivo de tu shell. Si el bot escribe archivos o una base SQLite, define una carpeta de datos y sus permisos antes de añadir restricciones de escritura.

Activa el servicio y revisa su estado:

sudo systemctl daemon-reload
sudo systemctl enable --now discord-bot
sudo systemctl status discord-bot
journalctl -u discord-bot -f

Restart=on-failure ayuda a recuperar un proceso que falla; no arregla un token inválido, un error de código o límites impuestos por Discord. Observa los logs y el uso de CPU/RAM antes de elegir una talla. La voz, modelos de IA, varias instancias o tareas de base de datos pueden necesitar más recursos que un bot sencillo.

5. Actualiza y prueba la recuperación

Haz una copia si el bot guarda estado local. Para publicar una actualización, prepara el nuevo código, instala las dependencias fijadas y reinicia discord-bot; después confirma que el bot vuelve a conectarse y que los comandos siguen funcionando. No ejecutes dos copias con el mismo token si la lógica no está preparada para ello.

El bot necesita permisos y acceso a Internet desde el VPS; un bot Gateway corriente no requiere que configures Nginx, un dominio o un puerto entrante. Si emplea webhooks o una web de control, esa parte sí necesitará exposición HTTPS y protección propias.

Hostbrid ofrece VPS con acceso root; este servicio es autogestionado. Tú mantienes Python o Node, el token, las dependencias, los permisos, actualizaciones y copias. Compara las opciones VPS y los precios vigentes con el consumo medido de tu bot.

Fuentes: documentación oficial de discord.py, intents, token y cuenta bot, intents privilegiados de Discord y discord.js.

Gestiona tus webs, servidores y correo.

Es gratis y tarda un minuto.

Mínimo 8 caracteres. Ni sólo números ni una contraseña común.

Te mandaremos un correo para confirmar la cuenta.