Faire tourner ton bot sur ton propre ordinateur fonctionne très bien, jusqu'au moment où tu l'éteins ou qu'il se met en veille. Pour une solution permanente, il te faut une vraie installation Discord bot VPS : tu déplaces le bot sur un petit serveur cloud et tu le maintiens en ligne 24/7 grâce à un gestionnaire de processus. Dans ce guide, je détaille la préparation d'un VPS Ubuntu de zéro, l'installation de Node.js et l'exécution permanente d'un bot discord.js avec pm2, de sorte qu'il redémarre automatiquement même après un redémarrage du serveur.
Pourquoi un VPS et pourquoi pm2 ?
Un bot doit maintenir une connexion permanente (un WebSocket) vers Discord. Si cette connexion tombe, le bot passe hors ligne et ne répond plus aux commandes. Un VPS est une machine Linux avec un internet et une alimentation ininterrompus, allumée 365 jours par an — exactement ce qu'il te faut.
Alors pourquoi ne pas simplement lancer node index.js ? Parce qu'au moment où tu fermes le terminal, le processus meurt. pm2 est un gestionnaire de processus : il garde le bot en arrière-plan, le redémarre automatiquement en cas de plantage, collecte ses logs et relance le bot tout seul quand le serveur redémarre.
- Redémarrage automatique : si le bot lève une erreur et plante, pm2 le redémarre en quelques secondes.
- Résistance au boot : le bot démarre automatiquement même après un redémarrage du VPS.
- Gestion des logs : stdout/stderr sont consultables en une seule commande.
- Coût nul : pm2 est open source et gratuit.
1. Choisir un VPS et la première connexion
Un bot Discord consomme très peu de ressources ; le plus petit plan avec 1 vCPU et 1 Go de RAM suffit largement. Chez un fournisseur comme Hetzner, DigitalOcean, Contabo ou similaire, crée un serveur avec Ubuntu 22.04 LTS ou 24.04 LTS préinstallé. Le fournisseur te donnera une adresse IP et un mot de passe root (ou une clé SSH).
Connecte-toi depuis ta machine via SSH :
ssh root@IP_DE_TON_SERVEUR
La première tâche est de mettre à jour les paquets :
apt update && apt upgrade -y
2. Un utilisateur sudo et la sécurité de base
Tout faire en root est risqué. Créons un utilisateur séparé et donnons-lui les privilèges :
adduser bot
usermod -aG sudo bot
Tu peux désormais basculer vers cet utilisateur avec su - bot. Mettons aussi en place un pare-feu simple ; la connexion sortante du bot vers Discord ne nécessite aucun port ouvert, il suffit donc de ne laisser que SSH ouvert :
sudo ufw allow OpenSSH
sudo ufw enable
3. Installer la bonne version de Node.js
Le Node.js du dépôt d'Ubuntu est souvent dépassé ; discord.js v14 exige au moins Node.js 16.11, et en pratique une version LTS récente. Installons la dernière LTS (par exemple 20.x) via le dépôt NodeSource :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Vérifie l'installation :
node -v
npm -v
4. Mettre le code du bot sur le serveur
La méthode la plus propre est de récupérer le code via Git. Si ton bot est dans un dépôt GitHub :
git clone https://github.com/utilisateur/bot-repo.git
cd bot-repo
npm install
Ne code jamais en dur des secrets comme ton token et ne les envoie pas dans le dépôt. Crée plutôt un fichier .env :
nano .env
Mets-y le token :
DISCORD_TOKEN=ton_token_secret
Pour que le bot lise cette valeur, tu peux utiliser le paquet dotenv (npm install dotenv) et ajouter require('dotenv').config() tout en haut de ton fichier d'entrée. Ajoute toujours .env à ton .gitignore.
5. Faire tourner le bot en permanence avec pm2
Installons pm2 globalement :
sudo npm install -g pm2
Démarre le bot et donne-lui un nom lisible :
pm2 start index.js --name discord-bot
Si le fichier d'entrée de ton bot est différent (par exemple bot.js ou src/index.js), indique ce chemin. Pour voir l'état :
pm2 status
Pour suivre les logs en direct :
pm2 logs discord-bot
Autres commandes courantes :
pm2 restart discord-bot— redémarre le bot (après une mise à jour du code).pm2 stop discord-bot— l'arrête.pm2 delete discord-bot— le retire de la liste.pm2 monit— affiche l'utilisation CPU/RAM en direct.
6. Garder le bot en vie même après un redémarrage
C'est là que se trouve la vraie magie. Quand le VPS redémarre après une mise à jour ou une coupure, on veut que le bot revienne tout seul. D'abord, demande à pm2 de générer un script de démarrage :
pm2 startup
Cette commande affiche une seule ligne commençant par sudo env PATH=... ; copie cette ligne et exécute-la. Ensuite, sauvegarde la liste des processus actuels :
pm2 save
Désormais, même si tu redémarres le serveur avec sudo reboot, pm2 se déclenche au démarrage et relance automatiquement le processus discord-bot. N'hésite pas à le tester.
7. Quand tu mets à jour le code
Quand tu ajoutes une nouvelle fonctionnalité, le flux est simple : récupère les changements, installe les dépendances si nécessaire, redémarre le processus :
cd bot-repo
git pull
npm install
pm2 restart discord-bot
Si tu n'as ajouté aucune nouvelle dépendance, tu peux sauter l'étape npm install.
Questions fréquentes
Le bot plante sans cesse — que fait pm2 ?
pm2 redémarre automatiquement le processus planté, mais si la cause profonde persiste, il peut entrer dans une boucle de redémarrage sans fin. Lis l'erreur avec pm2 logs discord-bot ; c'est généralement un token invalide, un réglage intents manquant ou un rejet de Promise non géré. Corrige le problème dans le code plutôt que de te fier au seul redémarrage.
Pourquoi pm2 plutôt que screen ou nohup ?
screen et nohup gardent le bot en arrière-plan mais ne le redémarrent pas en cas de plantage, ne le lancent pas au boot et n'offrent aucune gestion des logs. pm2 te donne tout cela dans un seul outil ; pour un environnement de production, il est nettement plus robuste.
Puis-je faire tourner plusieurs bots sur le même VPS ?
Oui. Utilise un dossier distinct et un pm2 start ... --name distinct pour chaque bot. Même un petit VPS gère sans problème plusieurs bots légers ; tu peux surveiller l'utilisation des ressources avec pm2 monit.
Tu veux mettre ton bot en ligne en toute confiance ? Si tu as besoin d'aide pour le développement de bots Discord, l'installation d'un VPS et un hébergement stable 24/7, contacte-moi — mettons ton projet en route ensemble.