Ajout de la gestion autonome des serveurs minecraft #2

Closed
opened 2026-06-02 07:35:40 +00:00 by Gameur.py · 6 comments
Gameur.py commented 2026-06-02 07:35:40 +00:00 (Migrated from gitlab.com)

L'objectif de ce travail est de fusionner et de faire évoluer notre système de monitoring en temps réel (Discord Status Bot) avec un module de gestion à distance pour nos serveurs Minecraft qui tournent actuellement sous PM2.

Le bot doit permettre aux utilisateurs de suivre la charge de la machine et de lancer des actions de maintenance comme le redémarrage d'un serveur ou l'affichage de son statut directement depuis l'interface Discord. Pour des raisons évidentes de sécurité, cela doit se faire sans donner d'accès SSH direct et avec une étanchéité totale avec le système d'exploitation de l'hôte.

Architecture globale du projet

  • L'Agent de télémétrie (agent.py) : Il est installé sur le serveur de jeux, collecte les métriques système et les envoie via une requête HTTP de type POST toutes les 15 secondes vers le bot.
  • Le Bot Discord (bot.py) : Hébergé sur la machine de ton choix, il intègre un mini-serveur Web pour réceptionner les données de l'agent, analyse les ressources et met à jour un message embed épinglé sur Discord. Il gère aussi les commandes des utilisateurs.
  • Le Script Passerelle (manage_minecraft.sh) : C'est un script Bash local sur le serveur de jeux. C'est le seul élément autorisé à interagir avec PM2 pour le compte du bot, garantissant qu'aucune commande malveillante ne puisse être injectée.

Liste des tâches à accomplir

1. Développement de l'Agent de Télémétrie

  • Programmer l'envoi régulier des données système en arrière-plan toutes les 15 secondes.
  • Sécuriser la communication en ajoutant un mot de passe partagé secret dans l'en-tête de la requête HTTP.
  • Configurer l'agent pour qu'il inspecte les processus actifs afin de regrouper la consommation CPU et RAM par type de service. Les mots-clés à cibler pour identifier les processus sont java, minecraft et paper pour la section Minecraft, factoryserver pour Satisfactory, et ollama pour la section IA.

2. Configuration du Bot et de l'Analyseur de Statut

  • Intégrer un serveur Web aiohttp sur le port 8765 au sein du code du bot pour écouter les rapports de l'agent sans bloquer Discord.
  • Créer la route de réception des métriques et rejeter immédiatement les requêtes par un code d'erreur 401 si le mot de passe secret est incorrect.
  • Mettre en place des alertes visuelles basées sur des seuils de charge : le processeur passe en avertissement à 70% et en critique à 85%. La mémoire RAM passe en avertissement à 80% et en critique à 90%. La mémoire SWAP passe en avertissement à 40% et en critique à 70%.
  • Développer une logique contextuelle : dès qu'un seuil est dépassé, le bot doit analyser quel service est le plus gourmand pour écrire automatiquement une explication claire dans l'embed (par exemple indiquer que la RAM est saturée à cause d'Ollama).

3. Sécurisation de la Passerelle Système (PM2)

  • Écrire un script Bash nommé manage_minecraft.sh placé dans le répertoire système /usr/local/bin, appartenant à root avec des droits d'exécution généraux.
  • Dans ce script, utiliser obligatoirement le chemin d'accès absolu vers l'exécutable PM2 de l'utilisateur discord, qui se trouve dans son dossier nvm, précisément à l'adresse : /home/discord/.nvm/versions/node/v24.15.0/bin/pm2.
  • Définir une liste blanche stricte des applications PM2 autorisées à la gestion, limitée à : survie, skyblock, et creatif.
  • Valider rigoureusement les arguments reçus par le script pour s'assurer que seules les actions de redémarrage ou d'affichage de statut sont exécutées, bloquant toute tentative d'injection de flags ou de commandes shell supplémentaires.
  • Note pour l'infrastructure : l'utilisateur Linux du bot nommé gameurbot recevra l'autorisation sudo correspondante dans le fichier sudoers pour appeler ce script spécifique sans mot de passe.

4. Interface Discord et Commandes Slash

  • Créer la commande setup, réservée aux administrateurs, pour initialiser le salon de monitoring. Le bot doit y envoyer le tableau de bord sous forme d'embed textuel et l'épingler pour qu'il soit actualisé automatiquement.
  • Créer la commande status, accessible à tous, pour afficher l'état du serveur de façon éphémère (un message visible uniquement par l'auteur de la commande).
  • Créer la commande minecraft, qui propose de choisir une action (redémarrer ou voir le statut) sur un serveur de la liste blanche (survie, skyblock, creatif). Les arguments doivent obligatoirement utiliser le système de choix prédéfinis de Discord ; la saisie de texte libre est totalement proscrite.
  • S'assurer d'utiliser la méthode permettant de différer la réponse de Discord lors de l'exécution pour éviter que le bot n'affiche une erreur de timeout si le serveur Minecraft met plus de 3 secondes à répondre.
  • Développer un système de traçabilité qui envoie une notification d'audit détaillée dans notre salon privé de logs administrateur à chaque clic (mention de l'utilisateur, heure, action demandée, serveur ciblé et résultat de la commande).
L'objectif de ce travail est de fusionner et de faire évoluer notre système de monitoring en temps réel (Discord Status Bot) avec un module de gestion à distance pour nos serveurs Minecraft qui tournent actuellement sous PM2. Le bot doit permettre aux utilisateurs de suivre la charge de la machine et de lancer des actions de maintenance comme le redémarrage d'un serveur ou l'affichage de son statut directement depuis l'interface Discord. Pour des raisons évidentes de sécurité, cela doit se faire **sans donner d'accès SSH** direct et avec une **étanchéité totale** avec le système d'exploitation de l'hôte. ### Architecture globale du projet * **L'Agent de télémétrie (agent.py) :** Il est installé sur le serveur de jeux, collecte les métriques système et les envoie via une requête HTTP de type POST toutes les 15 secondes vers le bot. * **Le Bot Discord (bot.py) :** Hébergé sur la machine de ton choix, il intègre un mini-serveur Web pour réceptionner les données de l'agent, analyse les ressources et met à jour un message embed épinglé sur Discord. Il gère aussi les commandes des utilisateurs. * **Le Script Passerelle (manage_minecraft.sh) :** C'est un script Bash local sur le serveur de jeux. C'est le seul élément autorisé à interagir avec PM2 pour le compte du bot, garantissant qu'aucune commande malveillante ne puisse être injectée. ### Liste des tâches à accomplir #### 1. Développement de l'Agent de Télémétrie * Programmer l'envoi régulier des données système en arrière-plan toutes les 15 secondes. * Sécuriser la communication en ajoutant un mot de passe partagé secret dans l'en-tête de la requête HTTP. * Configurer l'agent pour qu'il inspecte les processus actifs afin de regrouper la consommation CPU et RAM par type de service. Les mots-clés à cibler pour identifier les processus sont java, minecraft et paper pour la section Minecraft, factoryserver pour Satisfactory, et ollama pour la section IA. #### 2. Configuration du Bot et de l'Analyseur de Statut * Intégrer un serveur Web aiohttp sur le port 8765 au sein du code du bot pour écouter les rapports de l'agent sans bloquer Discord. * Créer la route de réception des métriques et rejeter immédiatement les requêtes par un code d'erreur 401 si le mot de passe secret est incorrect. * Mettre en place des alertes visuelles basées sur des seuils de charge : le processeur passe en avertissement à 70% et en critique à 85%. La mémoire RAM passe en avertissement à 80% et en critique à 90%. La mémoire SWAP passe en avertissement à 40% et en critique à 70%. * Développer une logique contextuelle : dès qu'un seuil est dépassé, le bot doit analyser quel service est le plus gourmand pour écrire automatiquement une explication claire dans l'embed (par exemple indiquer que la RAM est saturée à cause d'Ollama). #### 3. Sécurisation de la Passerelle Système (PM2) * Écrire un script Bash nommé manage_minecraft.sh placé dans le répertoire système /usr/local/bin, appartenant à root avec des droits d'exécution généraux. * Dans ce script, utiliser obligatoirement le chemin d'accès absolu vers l'exécutable PM2 de l'utilisateur discord, qui se trouve dans son dossier nvm, précisément à l'adresse : /home/discord/.nvm/versions/node/v24.15.0/bin/pm2. * Définir une liste blanche stricte des applications PM2 autorisées à la gestion, limitée à : survie, skyblock, et creatif. * Valider rigoureusement les arguments reçus par le script pour s'assurer que seules les actions de redémarrage ou d'affichage de statut sont exécutées, bloquant toute tentative d'injection de flags ou de commandes shell supplémentaires. * Note pour l'infrastructure : l'utilisateur Linux du bot nommé gameurbot recevra l'autorisation sudo correspondante dans le fichier sudoers pour appeler ce script spécifique sans mot de passe. #### 4. Interface Discord et Commandes Slash * Créer la commande setup, réservée aux administrateurs, pour initialiser le salon de monitoring. Le bot doit y envoyer le tableau de bord sous forme d'embed textuel et l'épingler pour qu'il soit actualisé automatiquement. * Créer la commande status, accessible à tous, pour afficher l'état du serveur de façon éphémère (un message visible uniquement par l'auteur de la commande). * Créer la commande minecraft, qui propose de choisir une action (redémarrer ou voir le statut) sur un serveur de la liste blanche (survie, skyblock, creatif). Les arguments doivent obligatoirement utiliser le système de choix prédéfinis de Discord ; la saisie de texte libre est totalement proscrite. * S'assurer d'utiliser la méthode permettant de différer la réponse de Discord lors de l'exécution pour éviter que le bot n'affiche une erreur de timeout si le serveur Minecraft met plus de 3 secondes à répondre. * Développer un système de traçabilité qui envoie une notification d'audit détaillée dans notre salon privé de logs administrateur à chaque clic (mention de l'utilisateur, heure, action demandée, serveur ciblé et résultat de la commande).
Gameur.py commented 2026-06-02 07:35:45 +00:00 (Migrated from gitlab.com)

assigned to @lowei3651

assigned to @lowei3651
Gameur.py commented 2026-06-02 07:36:40 +00:00 (Migrated from gitlab.com)

changed start date to June 02, 2026 and changed due date to June 06, 2026

changed start date to June 02, 2026 and changed due date to June 06, 2026
Gameur.py commented 2026-06-02 07:36:47 +00:00 (Migrated from gitlab.com)

added time estimate of 6h

added time estimate of 6h
Gameur.py commented 2026-06-02 07:41:55 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
Gameur.py commented 2026-06-02 07:44:06 +00:00 (Migrated from gitlab.com)

changed due date to June 13, 2026

changed due date to June 13, 2026
Gameur.py commented 2026-06-06 15:32:25 +00:00 (Migrated from gitlab.com)

set status to Done

set status to **Done**
Gameur.py (Migrated from gitlab.com) closed this issue 2026-06-06 15:32:26 +00:00
Sign in to join this conversation.
No labels
In progress
pending
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Gameur/Gameurbot#2
No description provided.