TP – Déploiement d’un serveur Minecraft Java avec systemd (Debian) ================================================================== Durée : 2h — Travail individuel ou binôme Contexte : Mise en place d’un serveur Minecraft Java Edition sur une VM Debian, géré comme un service professionnel grâce à systemd. Objectifs pédagogiques ---------------------- - Installer un serveur Minecraft Java sur Debian 13. - Créer un utilisateur système dédié pour la sécurité. - Exécuter le serveur et accepter la licence EULA. - Créer et configurer un service systemd pour exécuter Minecraft automatiquement au démarrage. - Utiliser les logs pour assurer la maintenance. - Superviser le service (à l'aide de la compilation d'un logiciel tiers) - Migrer un existant sans régression Prérequis --------- - VM Debian 13 avec accès SSH. - Ports réseau ouverts : TCP 25565 (Minecraft). - Ports réseau ouverts : TCP 25575 (Supervision RCON). - Java 21 installé (paquet openjdk-21-jdk). -------------------------------------------------------------------- PARTIE 1 — Préparation de l’environnement (20 min) -------------------------------------------------------------------- 1) Mettre à jour le système : $ sudo apt update && sudo apt -y upgrade 2) Installer Java : $ sudo apt install -y openjdk-21-jdk 3) Créer un utilisateur dédié : $ sudo adduser --system --home /opt/minecraft --group mcserver 4) Créer le dossier du serveur : $ sudo mkdir -p /opt/minecraft/server $ sudo chown -R mcserver:mcserver /opt/minecraft -------------------------------------------------------------------- PARTIE 2 — Installation du serveur Minecraft (20 min) -------------------------------------------------------------------- 1) Connectez-vous avec l’utilisateur mcserver : $ sudo -u mcserver -s 2) Déplacez-vous dans le dossier : $ cd /opt/minecraft/server 3) Téléchargez le serveur Minecraft officiel (adapter version : https://www.minecraft.net/fr-fr/download/server) (fournir le jar via SCP depuis l’hôte et le renommer : mv server.jar minecraft_server.jar) 4) Lancez une première fois pour générer les fichiers : $ java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui 5) Modifier le fichier eula.txt : eula=true 6) Autoriser client non officiel (facultatif) : ouvrir le fichier server.properties indiquer online-mode=false -------------------------------------------------------------------- PARTIE 3 — Création du service systemd (20 min) -------------------------------------------------------------------- 1) Créez le fichier `/etc/systemd/system/minecraft.service` avec le contenu suivant : [Unit] Description=Minecraft Server After=network.target [Service] # Dossier du serveur WorkingDirectory=/opt/minecraft/server # Utilisateur dédié User=mcserver Group=mcserver UMask=007 # supprime les droits 7 (R+W+X) aux autres utilisateurs # Limites Java (RAM déjà limitée ici) Environment="JAVA_OPTS=-Xms2048M -Xmx2048M" # Lancement du serveur ExecStart=/usr/bin/java $JAVA_OPTS -jar minecraft_server.jar nogui # 🔻 Arrêt propre # On laisse au serveur le temps de s'arrêter tout seul quand il reçoit SIGTERM TimeoutStopSec=120 KillSignal=SIGTERM SuccessExitStatus=0 143 Restart=on-failure # 🔻 Limites système (RAM / CPU / fichiers ouverts) # Limite supplémentaire côté OS (en plus du -Xmx) MemoryMax=3G # change si besoin CPUQuota=80% # 80% d’un CPU logique (à adapter) LimitNOFILE=4096 # fichiers ouverts autorisés # 🔻 Priorités (pour ne pas saturer la machine) Nice=5 # process un peu "moins prioritaire" que le reste OS IOSchedulingClass=best-effort IOSchedulingPriority=5 # 🔻 Logs dans un fichier + journalctl StandardOutput=append:/var/log/minecraft/server.log StandardError=append:/var/log/minecraft/server-error.log [Install] WantedBy=multi-user.target 2) Autoriser l'utilisateur mcserver sur le répertoire de logs : $ sudo mkdir -p /var/log/minecraft $ sudo chown mcserver:mcserver /var/log/minecraft $ ls -ld /var/log/minecraft 3) Rechargez systemd et activez le service : $ sudo systemctl daemon-reload $ sudo systemctl enable minecraft 4) Démarrez le service : $ sudo systemctl start minecraft 5) Vérifiez son statut : $ systemctl status minecraft -------------------------------------------------------------------- PARTIE 4 — Supervision et maintenance (10 min) -------------------------------------------------------------------- 1) Afficher les logs du serveur : $ sudo nano /var/log/minecraft/server.log $ sudo nano /var/log/minecraft/server-error.log $ sud journalctl -u minecraft -f 2) En cas d’erreur de démarrage : $ sudo journalctl -xe 3) Vérifier que le service redémarre au reboot : $ sudo reboot $ sudo systemctl status minecraft -------------------------------------------------------------------- PARTIE 5 — Installation et connexion avec un client (10 min) -------------------------------------------------------------------- 1) Télécharger le client officiel Minecraft : $ (officiel) https://www.minecraft.net/fr-fr/download Via flatpak pour debian 13 : $ sudo apt install flatpak $ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo $ sudo flatpak install flathub com.mojang.Minecraft $ flatpak run com.mojang.Minecraft $ (non-officiel) https://tlauncher.org/ 2) Tester la connexion au serveur avec le client. -------------------------------------------------------------------- PARTIE 6 — Activer l'administration locale et distante (10 min) -------------------------------------------------------------------- 1) Activer rcon sur le serveur : $ sudo nano /opt/minecraft/serverserver.properties : $ enable-rcon=true $ rcon.port=25575 $ rcon.password=TonMotDePasseFort 2) Installer les dépendances pour le poste administrateur : $ sudo apt update $ sudo apt install git build-essential 3) Cloner le git mcron sur le poste et compiler : $ git clone https://github.com/Tiiffi/mcrcon.git $ cd mcrcon $ make 4) Installer le binaire compilé : $ sudo install mcrcon /usr/local/bin/mcrcon $ mcrcon -h 5) Tester l'accès local à la console : $ mcrcon -H 127.0.0.1 -P 25575 -p TonMotDePasseFort $ op fabien # pour te donner les droits 6) Mode créatif (faculatif) : /gamemode creative /give @p command_block /tp fabien x y z /time set day -------------------------------------------------------------------- PARTIE 7 — Migration vers serveur Paper (10 min) -------------------------------------------------------------------- $ cd /opt/minecraft/server/ $ sudo mkdir -p paper $ cd paper $ # Exemple : Paper 1.21.1 (à adapter selon ta version) & sudo wget https://api.papermc.io/v2/projects/paper/versions/1.21.11-pre4/builds/13/downloads/paper-1.21.11-pre4-13.jar -O paper.jar $ cd .. $ sudo systemctl stop minecraft $ sudo mv minecraft_server.jar minecraft_server-vanilla.jar # pour garder une copie $ sudo cp paper/paper.jar minecraft_server.jar # Paper remplace l’ancien jar $ sudo systemctl start minecraft $ sudo systemctl status minecraft -------------------------------------------------------------------- PARTIE 8 — Installation plugin WorldEdit (https://modrinth.com/plugin/worldedit/versions) (10 min) -------------------------------------------------------------------- $ cd /opt/minecraft/server/plugins $ sudo wget https://cdn.modrinth.com/data/1u6JkXh5/versions/3ISh7ADm/worldedit-bukkit-7.3.17.jar -O WorldEdit.jar $ sudo systemctl restart minecraft -------------------------------------------------------------------- PARTIE 9 — Améliorations et sécurisations (10 min) -------------------------------------------------------------------- - Modifier la RAM allouée (-Xmx et -Xms). - Sécuriser l’accès au serveur avec un pare-feu : $ sudo ufw allow 22/tcp $ sudo ufw allow 25565/tcp $ sudo ufw allow 25575/tcp -------------------------------------------------------------------- PARTIE 10 — Aides Mémoires WordlEdit Commandes -------------------------------------------------------------------- Sélection (hache) clic gauche = premier point clic droit = second point Remplir la zone //set stone Creuser une grotte (méthode brush) //brush sphere air 5 Clique partout = creuse ta grotte. Générer des murs //walls stone_bricks Copier / coller des sections complètes //copy //paste Sauvegarder une structure (schématique) //schem save nom_de_ta_grotte La recharger ailleurs //schem load nom_de_ta_grotte //paste Où mettre tes fichiers schematic ? Paper crée un dossier : /opt/minecraft/server/worldedit/schematics/ Tu peux y mettre : grotte.schem couloir.schem salle_piege.schem Puis //schem load pour les récupérer. -------------------------------------------------------------------- Évaluation (100 pts) -------------------------------------------------------------------- - Préparation environnement + installation Java (10 pts) - Téléchargement + configuration serveur Minecraft (10 pts) - Modification eula.txt + premier lancement OK (10 pts) - Service systemd fonctionnel et persistant (20 pts) - Supervision (30 pts) - Migration vers Paper + WordlEdit (20 pts)