Héberger un Bot Discord 24/7 - Tutoriel Complet

Guide pas-à-pas pour héberger votre bot Discord en production 24/7 sur un VPS. Avec PM2 (Node.js) et systemd (Python).

Présentation

Vous avez codé un bot Discord avec discord.js ou discord.py ? Pour qu'il fonctionne 24/7, vous avez besoin d'un VPS. Voici la marche à suivre.

Étape 1 : Choisir et commander un VPS

Un VPS d'entrée de gamme (1 vCPU, 1-2 Go RAM, NVMe) suffit pour la plupart des bots Discord. Chez By-Hoster, comptez ~4,99 €/mois.

  1. Allez sur l'espace client By-Hoster
  2. Choisissez "VPS Linux" → distribution Ubuntu 22.04 LTS
  3. Validez et payez, le VPS est livré en 60 secondes par email avec accès SSH

Étape 2 : Connexion SSH et préparation

  1. Connectez-vous en SSH : ssh root@votre-ip
  2. Mettez à jour le système : apt update && apt upgrade -y
  3. Créez un utilisateur non-root : adduser botuser && usermod -aG sudo botuser
  4. Installez Node.js 20 LTS : curl -fsSL https://deb.nodesource.com/setup_20.x | bash && apt install -y nodejs (pour Node) ou Python 3 : apt install -y python3 python3-pip python3-venv (pour Python)

Étape 3 : Déployer votre bot

  1. Uploadez votre code via Git : git clone https://github.com/vous/votre-bot.git
  2. Installez les dépendances : npm install (Node) ou pip install -r requirements.txt (Python)
  3. Créez un fichier .env avec votre token Discord, ne jamais le commit dans Git
  4. Testez en lançant manuellement : node bot.js ou python bot.py

Étape 4 : Maintenir le bot 24/7

Pour Node.js : utilisez PM2.

  1. Installez PM2 : npm install -g pm2
  2. Démarrez votre bot : pm2 start bot.js --name discord-bot
  3. Configurez le démarrage auto au reboot : pm2 startup && pm2 save
  4. Voir les logs : pm2 logs discord-bot

Étape 5 : Sécuriser votre VPS bot Discord

Un bot Discord exposé sur Internet est une cible privilégiée pour les bruteforce SSH, scans de ports et tentatives d'exploitation. Trois mesures de durcissement suffisent à éliminer 99 % des menaces : authentification SSH par clé uniquement, pare-feu UFW restrictif et fail2ban contre les attaques par dictionnaire.

  1. Désactiver le login SSH par mot de passe : générez une clé sur votre poste (ssh-keygen -t ed25519), copiez-la sur le VPS (ssh-copy-id botuser@votre-ip), puis éditez /etc/ssh/sshd_config et passez PasswordAuthentication no + PermitRootLogin no. Rechargez : systemctl restart sshd
  2. Activer UFW (pare-feu Ubuntu) : ufw default deny incoming && ufw default allow outgoing && ufw allow ssh && ufw enable. Votre bot Discord établit des connexions sortantes (vers gateway.discord.gg), aucun port entrant n'est nécessaire
  3. Installer fail2ban : apt install -y fail2ban && systemctl enable --now fail2ban. Bloque automatiquement toute IP qui tente plus de 5 logins SSH ratés en 10 minutes (ban de 1 heure par défaut)
  4. Mises à jour automatiques de sécurité : apt install -y unattended-upgrades && dpkg-reconfigure --priority=low unattended-upgrades. Les patches critiques (CVE) s'installent sans intervention
  5. Stocker le token Discord dans un .env hors du repo : ajoutez .env à votre .gitignore, chargez-le avec dotenv (Node) ou python-dotenv (Python). Ne committez jamais votre token sur GitHub, Discord révoque les tokens leakés en quelques secondes

Dépannage : mon bot Discord crash, que faire ?

Un bot qui tombe en production est rarement dû à un VPS défaillant, dans 90 % des cas c'est une erreur applicative (token expiré, exception non gérée, dépassement mémoire, rate limit Discord). Voici la checklist de diagnostic à dérouler dans l'ordre.

  • Vérifier le statut du processus : pm2 status (Node) ou systemctl status mon-bot (Python). Cherchez "online" / "active (running)". Si "errored" / "failed", passez au point suivant
  • Lire les logs récents : pm2 logs discord-bot --lines 100 ou journalctl -u mon-bot -n 100 --no-pager. Les logs Discord typiques à identifier : DiscordAPIError[401] = token invalide ou révoqué, DiscordAPIError[429] = rate limit, UnhandledPromiseRejection = exception async non gérée
  • Token invalide (401 Unauthorized) : régénérez un nouveau token sur discord.com/developers/applications → Bot → Reset Token. Mettez à jour votre .env puis pm2 restart discord-bot
  • Bot OOM-killed (out of memory) : vérifiez avec dmesg | grep -i "killed process". Si confirmé, soit votre code a une fuite mémoire (cache qui grossit indéfiniment), soit le VPS est sous-dimensionné, upgradez vers 4 Go RAM
  • Bot offline mais processus actif : Discord a probablement coupé la WebSocket. Activez autoReconnect: true dans discord.js (par défaut) ou implémentez un handler on('disconnect') qui relance client.login()
  • Forcer un redémarrage propre : pm2 restart discord-bot --update-env recharge le code ET les variables d'environnement. Pour repartir totalement à zéro : pm2 delete discord-bot && pm2 start bot.js --name discord-bot
  • Monitoring continu : configurez pm2 install pm2-logrotate (évite de saturer le disque) et un webhook Discord via pm2-discord-webhook qui vous alerte si le bot crash plus de 3 fois en 5 minutes

Aller plus loin : ajouter une base de données à votre bot

Un bot Discord sérieux a besoin de persistance : configuration par serveur, statistiques utilisateurs, économie virtuelle, cache de commandes slash, modération (warns, mutes). Trois choix selon votre besoin : PostgreSQL pour les données relationnelles fiables, MongoDB pour les schémas flexibles, Redis pour le cache rapide et les leaderboards.

  • PostgreSQL (recommandé pour 80 % des bots) : apt install -y postgresql postgresql-contrib. Créez une base : sudo -u postgres createdb monbot. Idéal avec Prisma ORM (Node) : npm i @prisma/client prisma puis définissez vos modèles dans schema.prisma et exécutez npx prisma migrate dev. Type-safe, migrations versionnées, parfait pour des données comme guilds/users/warnings
  • MongoDB (pour schémas évolutifs) : apt install -y mongodb-org puis systemctl enable --now mongod. Utilisez Mongoose (Node) : npm i mongoose. Pratique pour stocker des configurations JSON imbriquées (settings serveur avec listes de rôles, channels custom, etc.) sans définir un schéma rigide à l'avance
  • Redis (cache + leaderboards temps réel) : apt install -y redis-server. Utilisez ioredis (Node) ou redis-py (Python). Idéal pour : cache de commandes slash (TTL 1h), comptage XP en sorted set (ZADD leaderboard 1500 user_id puis ZREVRANGE leaderboard 0 9 WITHSCORES pour le top 10), rate limit anti-spam par utilisateur
  • Exemple Prisma minimal (Node + PostgreSQL) : model Guild { id String @id; prefix String @default("!"); xpEnabled Boolean @default(true); warnings Warning[] } puis dans votre bot : const guild = await prisma.guild.upsert({ where: { id: msg.guildId }, update: {}, create: { id: msg.guildId } }). Le bot mémorise les paramètres par serveur durablement
  • Bonnes pratiques : sauvegardez votre base quotidiennement (pg_dump monbot > backup.sql via cron), n'exposez jamais PostgreSQL/MongoDB sur l'IP publique (UFW deny tout sauf SSH), utilisez un pool de connexions pour éviter de saturer la BDD si votre bot scale

Questions fréquentes

Pour un bot simple : 1 Go RAM minimum. Pour un bot avec base de données et plusieurs centaines de serveurs : 2-4 Go RAM. Le VPS d'entrée By-Hoster à 4,99 €/mois suffit pour 90% des bots.

Oui, à condition d'avoir configuré pm2 startup (Node) ou un service systemd (Python). Le bot redémarre automatiquement après reboot.

PM2 est un process manager Node.js avec dashboard intégré, logs colorés, monitoring CPU/RAM en temps réel et clustering, idéal pour discord.js. systemd est le gestionnaire de services natif Linux : plus bas niveau mais universel (Node, Python, Go, Rust). Pour Python avec discord.py/aiogram, systemd est généralement préféré car PM2 est conçu pour Node.