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.