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