Call-Informatique
Call-Informatique
Le média tech
Serveur Minecraft Java + Bedrock : config avancée Linux
InformatiqueGuides9 min de lecture

Serveur Minecraft Java + Bedrock : config avancée Linux

Déployez et durcissez un serveur Minecraft Java et Bedrock sur Ubuntu/Debian. Systemd, optimisation JVM, sauvegardes auto, reverse proxy et hardening.

Serveur Minecraft Java + Bedrock : configuration avancée sur Linux

Ce guide couvre le déploiement d'un serveur Minecraft Java Edition (1.21.11) et Bedrock Dedicated Server (BDS) sur une machine Ubuntu 22.04/24.04 ou Debian 12. On va au-delà de l'installation basique : optimisation JVM, hardening, services systemd, sauvegardes automatisées et monitoring.

Pré-requis

  • Ubuntu 22.04+/Debian 12+ (64 bits)
  • 4 Go RAM minimum (8 Go recommandé pour les deux serveurs en parallèle)
  • 2 vCPU minimum
  • 20 Go stockage SSD
  • Accès root ou sudo
  • Ports 25565/tcp (Java) et 19132/udp (Bedrock) disponibles

1. Préparation du système

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y openjdk-21-jre-headless wget unzip curl jq screen

Vérification Java :

bash
java -version 2>&1 | head -1
## openjdk version "21.x.x"

Création de l'utilisateur de service :

bash
sudo useradd -r -m -d /opt/minecraft -s /bin/bash minecraft
sudo mkdir -p /opt/minecraft/{java-server,bedrock-server,backups}
sudo chown -R minecraft:minecraft /opt/minecraft

2. Serveur Java Edition

Installation

bash
sudo su - minecraft
cd ~/java-server

## Récupérer le lien du server.jar depuis le manifest officiel
SERVER_URL=$(curl -s https://launchermeta.mojang.com/mc/game/version_manifest_v2.json \
  | jq -r '.versions[] | select(.id == .latest.release) // empty' \
  || curl -s https://launchermeta.mojang.com/mc/game/version_manifest_v2.json \
  | jq -r '.versions[0].url' \
  | xargs curl -s \
  | jq -r '.downloads.server.url')

## Méthode simplifiée : télécharger depuis la page officielle
## https://www.minecraft.net/en-us/download/server
wget -O server.jar "$SERVER_URL" 2>/dev/null || \
  echo "Récupérez le lien manuellement sur minecraft.net/download/server"

## Premier lancement pour générer les fichiers de config
java -Xmx2G -Xms1G -jar server.jar nogui

## Accepter l'EULA
sed -i 's/eula=false/eula=true/' eula.txt

Configuration server.properties

bash
cat > server.properties << 'EOF'
## Réseau
server-port=25565
query.port=25565
enable-query=true
network-compression-threshold=256

## Jeu
gamemode=survival
difficulty=hard
max-players=20
view-distance=10
simulation-distance=8
spawn-protection=16
allow-flight=false
pvp=true

## Performance
max-tick-time=60000
entity-broadcast-range-percentage=100

## Sécurité
white-list=true
enforce-whitelist=true
online-mode=true
prevent-proxy-connections=false

## Affichage
motd=\u00a7b\u00a7lMon Serveur MC \u00a77- \u00a7aSurvival
server-name=MonServeurMC

## RCON (administration distante)
enable-rcon=true
rcon.port=25575
rcon.password=CHANGEZ_CE_MOT_DE_PASSE_ICI
EOF

Note sécurité : Changez impérativement le mot de passe RCON. Ce mot de passe permet d'exécuter des commandes sur le serveur à distance.

Optimisation JVM (flags Aikar)

Les flags Aikar sont le standard de l'industrie pour les serveurs Minecraft Java. Ils optimisent le ramasse-miettes (garbage collector) pour réduire les freezes.

bash
## Script de lancement optimisé
cat > start.sh << 'SCRIPT'
#!/bin/bash
RAM_MAX="4G"
RAM_MIN="2G"

java \
  -Xmx${RAM_MAX} -Xms${RAM_MIN} \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1MixedGCLiveThresholdPercent=90 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -Dusing.aikars.flags=https://mcflags.emc.gs \
  -Daikars.new.flags=true \
  -jar server.jar nogui
SCRIPT
chmod +x start.sh

Alternative : Paper (recommandé)

Paper est un fork haute performance du serveur vanilla, compatible avec les plugins Bukkit/Spigot. Les gains de performance sont significatifs (TPS plus stables, meilleure gestion des entités).

bash
## Télécharger Paper (remplacez le numéro de build par le dernier disponible)
## Vérifiez sur https://papermc.io/downloads/paper
PAPER_VERSION="1.21.11"
curl -s "https://api.papermc.io/v2/projects/paper/versions/${PAPER_VERSION}" \
  | jq -r '.builds[-1]' | xargs -I{} \
  wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/${PAPER_VERSION}/builds/{}/downloads/paper-${PAPER_VERSION}-{}.jar"

## Utiliser paper.jar au lieu de server.jar dans start.sh
sed -i 's/server.jar/paper.jar/' start.sh

3. Serveur Bedrock Edition

Installation

bash
cd /opt/minecraft/bedrock-server

## Télécharger la dernière version du BDS
## Lien officiel : https://www.minecraft.net/en-us/download/server/bedrock
wget -O bedrock-server.zip "https://minecraft.azureedge.net/bin-linux/bedrock-server.zip"
unzip -o bedrock-server.zip
rm bedrock-server.zip
chmod +x bedrock_server

Configuration

bash
cat > server.properties << 'EOF'
server-name=MonServeurBedrock
gamemode=survival
difficulty=hard
max-players=10
server-port=19132
server-portv6=19133
level-name=MonMonde
level-seed=
online-mode=true
white-list=true
allow-cheats=false
view-distance=10
tick-distance=4
player-idle-timeout=30
max-threads=4
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=true
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-action-direction-threshold=0.85
server-authoritative-block-breaking=false
chat-restriction=None
disable-player-interaction=false
client-side-chunk-generation-enabled=true
block-network-ids-are-hashes=true
EOF

Script de lancement

bash
cat > start-bedrock.sh << 'SCRIPT'
#!/bin/bash
cd /opt/minecraft/bedrock-server
LD_LIBRARY_PATH=. ./bedrock_server
SCRIPT
chmod +x start-bedrock.sh

4. Services systemd

Repassez en utilisateur sudo :

bash
exit  # quitter l'utilisateur minecraft

Service Java

bash
sudo tee /etc/systemd/system/minecraft-java.service << 'EOF'
[Unit]
Description=Minecraft Java Edition Server
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/java-server
ExecStart=/opt/minecraft/java-server/start.sh
ExecStop=/usr/bin/screen -p 0 -S mc-java -X eval 'stuff "say Arrêt du serveur dans 10 secondes..."\015'
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/screen -p 0 -S mc-java -X eval 'stuff "stop"\015'
Restart=on-failure
RestartSec=30
StandardInput=null
StandardOutput=journal
StandardError=journal

## Sécurité
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/minecraft/java-server
ProtectHome=true

## Limites
LimitNOFILE=65535
MemoryMax=5G

[Install]
WantedBy=multi-user.target
EOF

Service Bedrock

bash
sudo tee /etc/systemd/system/minecraft-bedrock.service << 'EOF'
[Unit]
Description=Minecraft Bedrock Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/bedrock-server
Environment=LD_LIBRARY_PATH=/opt/minecraft/bedrock-server
ExecStart=/opt/minecraft/bedrock-server/bedrock_server
Restart=on-failure
RestartSec=30
StandardInput=null
StandardOutput=journal
StandardError=journal

## Sécurité
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/minecraft/bedrock-server
ProtectHome=true

## Limites
LimitNOFILE=65535
MemoryMax=3G

[Install]
WantedBy=multi-user.target
EOF

Activation :

bash
sudo systemctl daemon-reload
sudo systemctl enable —now minecraft-java
sudo systemctl enable —now minecraft-bedrock

## Vérification
sudo systemctl status minecraft-java
sudo systemctl status minecraft-bedrock

5. Pare-feu

bash
## Java
sudo ufw allow 25565/tcp comment "Minecraft Java"

## Bedrock
sudo ufw allow 19132/udp comment "Minecraft Bedrock"
sudo ufw allow 19133/udp comment "Minecraft Bedrock IPv6"

## RCON (uniquement depuis le réseau local ou localhost)
sudo ufw allow from 127.0.0.1 to any port 25575 proto tcp comment "RCON local"

## Activer le pare-feu si pas déjà fait
sudo ufw enable
sudo ufw status verbose

Ne pas exposer le port RCON (25575) sur internet. Si vous avez besoin d'un accès distant, passez par un tunnel SSH.

6. Sauvegardes automatisées

bash
sudo -u minecraft tee /opt/minecraft/backup.sh << 'BACKUP'
#!/bin/bash
## Script de sauvegarde Minecraft
## Exécuté par cron toutes les 6 heures

BACKUP_DIR="/opt/minecraft/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
RETENTION=7  # jours

## Sauvegarde Java
if systemctl is-active —quiet minecraft-java; then
  # Désactiver l'écriture sur le monde pendant la copie
  screen -S mc-java -p 0 -X eval 'stuff "save-off"\015' 2>/dev/null
  screen -S mc-java -p 0 -X eval 'stuff "save-all"\015' 2>/dev/null
  sleep 5
  
  tar -czf "${BACKUP_DIR}/java-${DATE}.tar.gz" \
    -C /opt/minecraft/java-server \
    world world_nether world_the_end server.properties whitelist.json ops.json
  
  screen -S mc-java -p 0 -X eval 'stuff "save-on"\015' 2>/dev/null
fi

## Sauvegarde Bedrock
if systemctl is-active —quiet minecraft-bedrock; then
  tar -czf "${BACKUP_DIR}/bedrock-${DATE}.tar.gz" \
    -C /opt/minecraft/bedrock-server \
    worlds server.properties permissions.json whitelist.json
fi

## Nettoyage des anciennes sauvegardes
find "${BACKUP_DIR}" -name "*.tar.gz" -mtime +${RETENTION} -delete

echo "[$(date)] Backup terminé" >> /opt/minecraft/backups/backup.log
BACKUP

sudo chmod +x /opt/minecraft/backup.sh

Ajout au cron :

bash
sudo -u minecraft crontab -e

Ajouter la ligne :

cron
0 */6 * * * /opt/minecraft/backup.sh

Sauvegarde toutes les 6 heures, rétention de 7 jours.

7. Monitoring basique

Script pour vérifier si les serveurs répondent :

bash
sudo -u minecraft tee /opt/minecraft/check-status.sh << 'CHECK'
#!/bin/bash
## Vérification de l'état des serveurs Minecraft

JAVA_PORT=25565
BEDROCK_PORT=19132

## Check Java (TCP)
if nc -z localhost ${JAVA_PORT} 2>/dev/null; then
  echo "[OK] Java server actif (port ${JAVA_PORT})"
else
  echo "[ERREUR] Java server inactif"
fi

## Check Bedrock (UDP, test basique)
if systemctl is-active —quiet minecraft-bedrock; then
  echo "[OK] Bedrock server actif (systemd)"
else
  echo "[ERREUR] Bedrock server inactif"
fi

## Usage disque
echo "Espace utilisé :"
du -sh /opt/minecraft/java-server/world* 2>/dev/null
du -sh /opt/minecraft/bedrock-server/worlds* 2>/dev/null
du -sh /opt/minecraft/backups/
CHECK

sudo chmod +x /opt/minecraft/check-status.sh

8. Mise à jour des serveurs

Java

bash
sudo systemctl stop minecraft-java
sudo -u minecraft bash -c '
  cd /opt/minecraft/java-server
  cp server.jar server.jar.bak
  # Télécharger la nouvelle version depuis minecraft.net/download/server
  wget -O server.jar "NOUVEAU_LIEN_ICI"
'
sudo systemctl start minecraft-java

Bedrock

bash
sudo systemctl stop minecraft-bedrock
sudo -u minecraft bash -c '
  cd /opt/minecraft/bedrock-server
  # Sauvegarder les fichiers de config
  cp server.properties server.properties.bak
  cp whitelist.json whitelist.json.bak
  cp permissions.json permissions.json.bak
  cp -r worlds worlds.bak
  
  # Télécharger et extraire la nouvelle version
  wget -O bedrock-server.zip "https://minecraft.azureedge.net/bin-linux/bedrock-server.zip"
  unzip -o bedrock-server.zip
  rm bedrock-server.zip
  
  # Restaurer les configs
  cp server.properties.bak server.properties
  cp whitelist.json.bak whitelist.json
  cp permissions.json.bak permissions.json
  cp -r worlds.bak/* worlds/
'
sudo systemctl start minecraft-bedrock

9. Dépannage

Le serveur Java ne démarre pas

bash
## Vérifier les logs
journalctl -u minecraft-java -n 50 —no-pager

## Erreurs fréquentes :
## "Unsupported Java version" → vérifier java -version (besoin de 21+)
## "Cannot allocate memory" → réduire -Xmx ou augmenter la RAM du VPS
## "Address already in use" → un autre processus utilise le port 25565
sudo ss -tlnp | grep 25565

Le serveur Bedrock ne démarre pas

bash
journalctl -u minecraft-bedrock -n 50 —no-pager

## "Permission denied" → vérifier les droits
ls -la /opt/minecraft/bedrock-server/bedrock_server

## Librairies manquantes
ldd /opt/minecraft/bedrock-server/bedrock_server | grep "not found"

## Sur Ubuntu 24.04, il peut manquer libssl1.1
## Solution :
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Les joueurs ne peuvent pas se connecter

bash
## Vérifier que les ports sont ouverts
sudo ufw status | grep -E '25565|19132'

## Tester la connectivité
nc -zv VOTRE_IP 25565  # Java
nc -zuv VOTRE_IP 19132  # Bedrock

## Vérifier que le serveur écoute
sudo ss -tlnp | grep 25565  # Java (TCP)
sudo ss -ulnp | grep 19132  # Bedrock (UDP)

## Si VPS : vérifier le firewall du provider (OVH, Hetzner, etc.)
## dans le panneau d'administration web

Performances dégradées (TPS bas)

bash
## Voir le TPS en temps réel (dans la console du serveur Java)
## Taper : tps

## Réduire la distance de rendu
## Dans server.properties :
## view-distance=8
## simulation-distance=6

## Si Paper : utiliser le profiler intégré
## Taper dans la console : spark profiler

Arborescence finale

terminal
/opt/minecraft/
├── java-server/
│   ├── server.jar (ou paper.jar)
│   ├── start.sh
│   ├── server.properties
│   ├── eula.txt
│   ├── whitelist.json
│   ├── ops.json
│   └── world/
├── bedrock-server/
│   ├── bedrock_server
│   ├── start-bedrock.sh
│   ├── server.properties
│   ├── whitelist.json
│   ├── permissions.json
│   └── worlds/
├── backups/
│   ├── java-2026-03-18_12-00.tar.gz
│   ├── bedrock-2026-03-18_12-00.tar.gz
│   └── backup.log
├── backup.sh
└── check-status.sh

Les deux serveurs tournent indépendamment, avec des services systemd séparés, des sauvegardes automatisées et un pare-feu configuré. Pour aller plus loin, envisagez GeyserMC (passerelle entre Java et Bedrock pour un serveur unifié) ou Velocity (proxy multi-serveur).

Sur le même sujet

À lire aussi

#tutoriel#guide-technique#minecraft#serveur-linux#systemd