Ves al contingut
Tornar al blog

Executar un bot de Discord 24/7 en un VPS amb Python

Mantén un bot de Discord en línia amb Python i systemd: instal·la dependències, protegeix el token, revisa intents i comprova reinicis i logs.

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

Si executes el bot al teu ordinador, es desconnecta quan tanques el programa o apagues l’equip. Un VPS pot mantenir el procés actiu i arrencar-lo de nou després d’un reinici; no configura el bot de Discord ni n’arregla els errors. Aquesta guia fa servir Python amb discord.py i systemd a Debian o Ubuntu.

Un bot connectat al Gateway de Discord normalment inicia una connexió de sortida i no necessita obrir un port HTTP d’entrada. Si el projecte fa servir interaccions per webhook, un panell web, veu o altres serveis, revisa aquests requisits per separat. La configuració exacta depèn del codi generat i dels permisos necessaris.

1. Revisa el bot i els permisos

Localitza el punt d’entrada, requirements.txt o pyproject.toml i la versió de Python que espera el projecte. Prova el bot en local i confirma que el token no és al codi ni al repositori. Al portal de desenvolupadors de Discord, crea una aplicació i un compte de bot; fes servir un token de bot i no automatitzis un compte personal.

Activa només els intents i permisos necessaris per a cada funció. Per exemple, llegir el contingut dels missatges pot requerir l’intent privilegiat corresponent tant al portal com al codi. No concedeixis Administrator per evitar revisar permisos. Convida el bot amb només els àmbits i permisos que necessita.

2. Prepara un VPS i l’entorn Python

Tria un VPS Hostbrid amb Debian o Ubuntu compatible amb el projecte. Connecta-t’hi per SSH, aplica actualitzacions i crea un compte de servei dedicat:

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

Clona el repositori a /srv/discord-bot/current amb una clau de desplegament de només lectura si és privat. Instal·la les dependències dins d’un entorn 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 projecte fa servir Node.js i discord.js, no executis els passos de Python: instal·la la versió de Node compatible amb el paquet declarat i les dependències del projecte amb npm ci. systemd pot executar Python o Node; el procés ha de correspondre al repositori.

3. Mantén el token fora del codi

Desa el token a /etc/discord-bot.env, fora del repositori i amb permisos restringits. El codi Python l’ha de llegir de l’entorn, per exemple amb os.environ["DISCORD_TOKEN"], i passar-lo al client sense imprimir-lo. No el posis als arguments visibles del procés, a Git, a una incidència ni als logs. Si es filtra, regenera’l al portal de Discord i actualitza el servei.

Primer executa manualment el bot com a usuari discordbot amb el fitxer d’entorn carregat. Comprova el missatge d’arrencada i que apareix en línia al servidor correcte. No publiquis el token en aquesta guia, ni tan sols com a exemple complet.

4. Arrenca’l amb systemd

Quan la prova manual funcioni, 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

Canvia bot.py pel punt d’entrada real. Per a Node, substitueix ExecStart per la ruta absoluta del binari Node i el fitxer d’entrada; comprova-la amb la versió instal·lada i no depenguis del PATH interactiu de la shell. Si el bot desa fitxers o una base SQLite, defineix-ne la carpeta de dades i els permisos abans de restringir-ne l’escriptura.

Activa el servei i comprova’n l’estat:

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

Restart=on-failure ajuda a recuperar un procés que falla; no corregeix un token invàlid, un error de codi ni límits de Discord. Observa els logs i l’ús de CPU/RAM abans de triar la talla. Veu, models d’IA, diverses instàncies o tasques de base de dades poden necessitar més recursos que un bot senzill.

5. Actualitza’l i prova la recuperació

Fes una còpia si el bot desa estat local. Per publicar una actualització, prepara el codi nou, instal·la les dependències fixades i reinicia discord-bot; després confirma que es torna a connectar i que les ordres funcionen. No executis dues còpies amb el mateix token si la lògica no ho preveu.

El bot necessita accés a Internet des del VPS; un bot Gateway normal no requereix Nginx, domini ni port d’entrada. Si fa servir webhooks o un web de control, aquesta part sí que necessitarà exposició HTTPS i protecció pròpies.

Hostbrid ofereix VPS amb accés root; el servei és autogestionat. Tu mantens Python o Node, el token, les dependències, els permisos, les actualitzacions i les còpies. Compara les opcions VPS i els preus vigents amb l’ús mesurat del bot.

Fonts: documentació oficial de discord.py, intents, compte i token de bot, intents privilegiats de Discord i discord.js.

Gestiona els teus webs, servidors i correu.

És gratis i triga un minut.

Mínim 8 caràcters. Ni només números ni una contrasenya comuna.

T’enviarem un correu per confirmar el compte.