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
sudo apt update && sudo apt upgrade -y
sudo apt install -y openjdk-21-jre-headless wget unzip curl jq screenVérification Java :
java -version 2>&1 | head -1
## openjdk version "21.x.x"Création de l'utilisateur de service :
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/minecraft2. Serveur Java Edition
Installation
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.txtConfiguration server.properties
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
EOFNote 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.
## 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.shAlternative : 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).
## 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.sh3. Serveur Bedrock Edition
Installation
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_serverConfiguration
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
EOFScript de lancement
cat > start-bedrock.sh << 'SCRIPT'
#!/bin/bash
cd /opt/minecraft/bedrock-server
LD_LIBRARY_PATH=. ./bedrock_server
SCRIPT
chmod +x start-bedrock.sh4. Services systemd
Repassez en utilisateur sudo :
exit # quitter l'utilisateur minecraftService Java
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
EOFService Bedrock
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
EOFActivation :
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-bedrock5. Pare-feu
## 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 verboseNe 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
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.shAjout au cron :
sudo -u minecraft crontab -eAjouter la ligne :
0 */6 * * * /opt/minecraft/backup.shSauvegarde toutes les 6 heures, rétention de 7 jours.
7. Monitoring basique
Script pour vérifier si les serveurs répondent :
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.sh8. Mise à jour des serveurs
Java
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-javaBedrock
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-bedrock9. Dépannage
Le serveur Java ne démarre pas
## 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 25565Le serveur Bedrock ne démarre pas
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.debLes joueurs ne peuvent pas se connecter
## 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 webPerformances dégradées (TPS bas)
## 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 profilerArborescence finale
/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.shLes 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).
À lire aussi
Serveur mail Postfix + Dovecot : config avancée et hardening
Configuration complète et sécurisée d'un serveur mail Postfix 3.11 + Dovecot sur Ubuntu : TLS, DKIM, DMARC, antispam, virtual mailboxes et scripts d'automatisation.
Créer son serveur mail avec Postfix et Dovecot
Guide pas à pas pour installer et configurer votre propre serveur mail sur Ubuntu avec Postfix, Dovecot, SSL et authentification email complète.
NAS Synology DSM 7 : configuration avancée et sécurisation
Configuration complète d'un NAS Synology sous DSM 7 : RAID, accès SSH, certificat SSL, fail2ban, Hyper Backup et accès VPN sécurisé.