server:minecraft
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| server:minecraft [2020/09/11 20:37] – créée kevin | server:minecraft [2021/12/12 18:06] (Version actuelle) – ajout lien 1.18.1 kevin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Installation d'un serveur Minecraft ====== | + | ====== Installation |
| - | À compléter... | + | ===== Avant-propos ===== |
| + | |||
| + | Mettre en place un serveur Minecraft (// | ||
| + | |||
| + | Ainsi, l' | ||
| + | * **Sécurité** | ||
| + | * Utilisateur dédié et non-root (pour limiter les accès et les dégâts possibles en cas de compromission du serveur) | ||
| + | * Configurations adaptées | ||
| + | * Utilisation d'une liste blanche pour définir les joueurs autorisés | ||
| + | * Ouverture du port dans le pare-feu/'' | ||
| + | * **Fiabilité** | ||
| + | * Sauvegardes régulières (quotidiennes) | ||
| + | * Arrêt propre du serveur (pas de '' | ||
| + | * Utilisation des mécanismes natifs de l'OS ('' | ||
| + | * **Autonomie** (//" | ||
| + | * Lancement automatique au démarrage (service) | ||
| + | * Fonctionnement en arrière-plan ('' | ||
| + | * Accès distant par SSH pour maintenance | ||
| + | * **Performances** | ||
| + | * La meilleure fluidité possible pour accueillir environ 2-5 utilisateurs simultanés (mais aura de la marge pour en accueillir plus ;-)) | ||
| + | |||
| + | En résumé, je souhaite que le serveur Minecraft soit capable d' | ||
| + | |||
| + | Pour ce faire, je me suis inspiré de plusieurs sources, principalement le projet https:// | ||
| + | |||
| + | ===== Situation initiale ===== | ||
| + | Voici les caractéristiques de la machine : | ||
| + | |||
| + | ^ CPU | Intel Core i3-4160 CPU @ 3.60GHz | | ||
| + | ^ Architecture | x86-64 | | ||
| + | ^ RAM | 8 Go | | ||
| + | ^ OS | Debian 9 (stretch), 64-bit | | ||
| + | ^ Disque | HDD Western Digital Black, 640 Go | | ||
| + | ^ Réseau | Gigabit Ethernet, IP statique | | ||
| + | |||
| + | À noter que cette machine héberge d' | ||
| + | |||
| + | En outre : | ||
| + | * '' | ||
| + | * SSH est activé et l' | ||
| + | * '' | ||
| + | |||
| + | En savoir plus sur l' | ||
| + | |||
| + | ===== Installation des dépendances ===== | ||
| + | Pour commencer, nous installons les dépendances requises pour faire tourner Minecraft en arrière-plan : | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt update | ||
| + | sudo apt install screen wget -y | ||
| + | sudo apt install net-tools -y | ||
| + | </ | ||
| + | |||
| + | ==== Installation de Java ==== | ||
| + | Sans surprise, //Minecraft Java Edition// ne pourrait pas tourner sans la présence de Java ;-) | ||
| + | |||
| + | Nous choisissons ici la variante open-source OpenJDK prévue pour les systèmes d' | ||
| + | |||
| + | Malheureusement, | ||
| + | |||
| + | Pour ce faire, éditer le fichier '' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Et y ajouter la ligne : | ||
| + | |||
| + | < | ||
| + | |||
| + | Maintenant, nous pouvons installer Java 11 : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Si une autre version de Java était déjà installée, vous pourriez avoir besoin de changer la version utilisée par défaut : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Cette commande permet de vérifier la version de Java actuellement utilisée : | ||
| + | |||
| + | <code bash> | ||
| + | ou (en Java 8) | ||
| + | <code bash> | ||
| + | </ | ||
| + | |||
| + | ===== Création du compte utilisateur ===== | ||
| + | Pour des raisons évidentes de sécurité, nous n' | ||
| + | |||
| + | Pour commencer, nous créons l' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Comme ce compte sera accessible par SSH, un mot de passe (fort !) doit absolument être défini (on peut laisser les autres informations vides). | ||
| + | |||
| + | Le répertoire utilisateur ''/ | ||
| + | |||
| + | ===== Configuration de SSH ===== | ||
| + | Le système d' | ||
| + | |||
| + | Pour cela, nous devons éditer le fichier ''/ | ||
| + | |||
| + | < | ||
| + | |||
| + | Pour terminer, redémarrer le service SSH pour prendre en compte la modification : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | ===== Téléchargement du serveur Minecraft ===== | ||
| + | Il nous faut à présent télécharger le JAR (fichier exécutable Java) du serveur Minecraft et le placer dans le répertoire désiré. Pour ma part, j'ai choisi que ce serait le répertoire home de '' | ||
| + | |||
| + | <code bash>cd / | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Notez que j'ai décidé de continuer de travailler avec le compte admin pour le moment en agissant en tant que '' | ||
| + | </ | ||
| + | |||
| + | Premièrement, | ||
| + | |||
| + | En l' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Lançons le serveur Minecraft une première fois afin qu'il crée sa structure et ses fichiers de base : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Le serveur se termine de lui-même, prévenant que nous devons accepter les conditions d' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Configuration du serveur (server.properties) ===== | ||
| + | La configuration du serveur Minecraft se fait par le fichier '' | ||
| + | |||
| + | Les valeurs par défaut sont majoritairement adaptées, moyennant les personnalisations usuelles ('' | ||
| + | |||
| + | Toutefois, certains paramètres " | ||
| + | |||
| + | < | ||
| + | op-permission-level=3 | ||
| + | </ | ||
| + | |||
| + | Par défaut, la valeur est à 4, ce qui signifie que les opérateurs (ops) peuvent utiliser **toutes** les commandes du serveur, | ||
| + | |||
| + | < | ||
| + | white-list=true | ||
| + | </ | ||
| + | |||
| + | Nous souhaitons restreindre l' | ||
| + | |||
| + | < | ||
| + | snooper-enabled=false | ||
| + | </ | ||
| + | |||
| + | Facultatif. Désactive le " | ||
| + | |||
| + | ===== Mise en place des scripts ===== | ||
| + | Nous allons à présent créer les scripts de démarrage et d' | ||
| + | |||
| + | Avant tout, connectons-nous avec l' | ||
| + | |||
| + | <code bash>su - minecraft</ | ||
| + | |||
| + | ==== Script de démarrage ==== | ||
| + | Ce script sauvegarde les fichiers du serveur (dans le sous-répertoire '' | ||
| + | |||
| + | Le serveur est démarré en arrière-plan avec '' | ||
| + | |||
| + | Nous allons donc créer le fichier '' | ||
| + | |||
| + | <file bash start.sh> | ||
| + | # | ||
| + | # Minecraft Server startup script using screen | ||
| + | |||
| + | # Check if server is already running | ||
| + | if screen -list | grep -q " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Switch to server directory | ||
| + | cd / | ||
| + | |||
| + | # Back up server | ||
| + | if [ -d " | ||
| + | echo " | ||
| + | tar --exclude=' | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | echo "To minimize the window and let the server run in the background, press Ctrl+A then Ctrl+D" | ||
| + | screen -dmS mcs java -Xms1G -Xmx3G -XX: | ||
| + | </ | ||
| + | |||
| + | Adaptez '' | ||
| + | |||
| + | On doit attribuer au script les droits d' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | ==== Script d' | ||
| + | Adapté de [[https:// | ||
| + | |||
| + | Nous allons créer le fichier '' | ||
| + | |||
| + | <file bash stop.sh> | ||
| + | # | ||
| + | # James Chambers - March 2nd 2019 | ||
| + | # Minecraft Server stop script - primarily called by minecraft service but can be ran manually | ||
| + | |||
| + | # Check if server is running | ||
| + | if ! screen -list | grep -q " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Stop the server | ||
| + | #if [ " | ||
| + | echo " | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 30 seconds! $(printf ' | ||
| + | sleep 23s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 7 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 6 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 5 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 4 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 3 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 2 seconds! $(printf ' | ||
| + | sleep 1s | ||
| + | screen -Rd mcs -X stuff "say Server is stopping in 1 second! $(printf ' | ||
| + | sleep 1s | ||
| + | #fi | ||
| + | |||
| + | echo " | ||
| + | screen -Rd mcs -X stuff "say Closing server (stop.sh called)...$(printf ' | ||
| + | screen -Rd mcs -X stuff " | ||
| + | |||
| + | # Wait up to 30 seconds for server to close | ||
| + | StopChecks=0 | ||
| + | while [ $StopChecks -lt 30 ]; do | ||
| + | if ! screen -list | grep -q " | ||
| + | break | ||
| + | fi | ||
| + | sleep 1; | ||
| + | StopChecks=$((StopChecks+1)) | ||
| + | done | ||
| + | |||
| + | # Force quit if server is still open | ||
| + | if screen -list | grep -q " | ||
| + | echo " | ||
| + | screen -S mcs -X quit | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | |||
| + | # Sync all filesystem changes out of temporary RAM | ||
| + | sync | ||
| + | </ | ||
| + | |||
| + | Ne pas oublier une fois encore de lui attribuer les droits d' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Se déconnecter de l' | ||
| + | |||
| + | ===== Création du service ===== | ||
| + | À ce stade, il est déjà possible de démarrer et d' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Il est nécessaire d' | ||
| + | </ | ||
| + | |||
| + | Nous allons tout d' | ||
| + | |||
| + | <file ini minecraft.service> | ||
| + | [Unit] | ||
| + | Description=minecraft server service | ||
| + | After=network-online.target | ||
| + | |||
| + | [Service] | ||
| + | User=minecraft | ||
| + | WorkingDirectory=/ | ||
| + | ProtectSystem=full | ||
| + | Type=forking | ||
| + | ExecStart=/ | ||
| + | ExecStop=/ | ||
| + | GuessMainPID=no | ||
| + | TimeoutStartSec=600 | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | Ne pas oublier de changer '' | ||
| + | |||
| + | Comme les scripts, ce fichier doit avoir les droits d' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Nous activons à présent le service afin qu'il puisse démarrer automatiquement : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Nous démarrons le service (ce qui lancera le serveur) : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Finalement, nous planifions le redémarrage du serveur tous les jours à 4 heures du matin (sauvegarde quotidienne) : | ||
| + | |||
| + | <code bash> | ||
| + | < | ||
| + | |||
| + | ===== Ouverture du port ===== | ||
| + | Le serveur est démarré, le service opérationnel, | ||
| + | |||
| + | Nous allons par conséquent éditer le fichier ''/ | ||
| + | |||
| + | < | ||
| + | -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT</ | ||
| + | |||
| + | ===== Configuration de la liste blanche et des opérateurs ===== | ||
| + | À ce stade, le serveur est prêt et fonctionnel. Il ne reste plus qu'à ajouter les joueurs autorisés à la liste blanche et définir qui est opérateur (op). | ||
| + | |||
| + | On se connecte tout d' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Ensuite, on autorise les joueurs '' | ||
| + | |||
| + | < | ||
| + | |||
| + | Et on ajoute '' | ||
| + | |||
| + | < | ||
| + | |||
| + | Pour finir, on utilise la combinaison de touches '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Erreurs et solutions ===== | ||
| + | Voici quelques erreurs que j'ai rencontrées et leurs solutions. | ||
| + | |||
| + | ==== Échec de connexion au serveur (authentification impossible) ==== | ||
| + | À la connexion au serveur, certains utilisateurs rencontraient l' | ||
| + | |||
| + | La solution consiste à mettre à jour la liste des certificats Java du serveur à l'aide de ces deux commandes : | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt install ca-certificates-java</ | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Améliorations possibles ===== | ||
| + | * Utilisation du serveur PaperMC (plus fluide, compatible avec les mods Spigot et Bukkit) | ||
| + | * Activation de rcon pour la gestion du serveur à distance | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Commandes utiles ===== | ||
| + | ==== Se connecter à la console du serveur ==== | ||
| + | Depuis le compte '' | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Puis '' | ||
| + | |||
| + | ==== Démarrer le serveur ==== | ||
| + | <code bash> | ||
| + | |||
| + | ==== Arrêter le serveur ==== | ||
| + | <code bash> | ||
| + | |||
| + | Rappel : il faut compter au minimum 30 secondes pour son arrêt complet. | ||
| + | |||
| + | ==== Mettre à jour le serveur (server.jar) ==== | ||
| + | Tout d' | ||
| + | |||
| + | Ensuite, télécharger le nouvelle version du serveur (se mettre dans ''/ | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | L'URL est trouvable sur cette page : https:// | ||
| + | |||
| + | Historique : | ||
| + | * 1.15.2 : https:// | ||
| + | * 1.16 : https:// | ||
| + | * 1.16.1 : https:// | ||
| + | * 1.16.3 : https:// | ||
| + | * 1.16.4 : https:// | ||
| + | * 1.16.5 : https:// | ||
| + | * 1.17.1 : https:// | ||
| + | * 1.18 : https:// | ||
| + | * 1.18.1 : https:// | ||
| + | |||
| + | Finalement, redémarrer le serveur avec la commande indiquée ci-dessus. | ||
| + | |||
| + | ==== Se connecter à l' | ||
| + | <code bash> | ||
| + | |||
| + | ==== Lister les écrans screen ==== | ||
| + | <code bash> | ||
server/minecraft.1599849449.txt.gz · Dernière modification : 2020/09/11 20:37 de kevin
