14 KiB
Minecraft Spigot Server - Ansible Deployment
Ce projet Ansible permet de déployer automatiquement un serveur Minecraft Spigot complet avec hardening de sécurité, sauvegarde automatisée et gestion des mises à jour.
🚀 Fonctionnalités
✅ Rôles disponibles
- 01-server_hardening : Durcissement sécuritaire du serveur
- 02-installation-java : Installation automatique de Java OpenJDK
- 03-installation-minecraft : Déploiement complet du serveur Spigot
- 04-backups : Système de sauvegarde automatisé
- 05-update : Gestion des mises à jour automatisées
🔧 Composants installés
- Spigot 1.21.6 : Serveur Minecraft optimisé
- mcrcon : Administration à distance via RCON
- Java 21 : Version optimale pour Spigot
- Fail2Ban : Protection contre les attaques par force brute
- UFW : Pare-feu simplifié
- Logrotate : Rotation automatique des logs
📁 Structure du projet
minecraft-spigot-ansible/
├── README.md # Documentation principale
├── site.yml # Playbook principal
├── ansible.cfg # Configuration Ansible
├── inventories/ # Inventaires des serveurs
│ ├── production/ # Environnement de production
│ └── staging/ # Environnement de test
├── roles/ # Rôles Ansible
│ ├── 01-server_hardening/ # Sécurisation du serveur
│ ├── 02-installation-java/ # Installation Java
│ ├── 03-installation-minecraft/ # Déploiement Minecraft
│ ├── 04-backups/ # Système de sauvegarde
│ └── 05-update/ # Gestion des mises à jour
└── .gitea/workflows/ # CI/CD Gitea
├── lint.yml # Tests et validation
└── deploy.yml # Déploiement automatique
⚙️ Configuration requise
Serveur cible
- OS : Debian 10/11/12/13 ou Ubuntu LTS
- RAM : Minimum 2GB (4GB recommandés)
- Stockage : 20GB minimum
- Réseau : Accès Internet pour téléchargements
Serveur de contrôle
- Ansible : Version 2.9 ou supérieure
- Python : 3.8 ou supérieure
- SSH : Accès par clé aux serveurs cibles
🛠️ Installation et configuration
1. Préparation de l'environnement
# Cloner le repository
git clone https://your-gitea-instance.com/your-repo/minecraft-spigot-ansible.git
cd minecraft-spigot-ansible
# Installer Ansible (si nécessaire)
pip install ansible ansible-lint yamllint
# Configurer les clés SSH
ssh-keygen -t ed25519 -f ~/.ssh/ansible_key
ssh-copy-id -i ~/.ssh/ansible_key.pub ansible@your-server-ip
2. Configuration des inventaires
Production (inventories/production/hosts.yml
)
all:
children:
minecraft_servers:
hosts:
minecraft-prod-01:
ansible_host: YOUR_PROD_IP
ansible_user: ansible
Variables globales (inventories/production/group_vars/minecraft_servers.yml
)
minecraft_version: "1.21.6"
minecraft_memory_min: "1G"
minecraft_memory_max: "4G"
minecraft_rcon_password: "your-secure-password"
3. Configuration des secrets
Créer un fichier vault pour les mots de passe :
ansible-vault create inventories/production/group_vars/vault.yml
Contenu du vault :
vault_minecraft_rcon_password: "your-secure-rcon-password"
vault_mysql_password: "your-mysql-password"
🚀 Déploiement
Déploiement manuel
# Test de connectivité
ansible all -i inventories/production/hosts.yml -m ping
# Déploiement complet
ansible-playbook -i inventories/production/hosts.yml site.yml --ask-vault-pass
# Déploiement par rôle spécifique
ansible-playbook -i inventories/production/hosts.yml site.yml --tags "minecraft" --ask-vault-pass
Déploiement par tags
# Sécurisation uniquement
ansible-playbook site.yml --tags "hardening"
# Installation Java uniquement
ansible-playbook site.yml --tags "java"
# Configuration Minecraft uniquement
ansible-playbook site.yml --tags "minecraft"
# Configuration des sauvegardes uniquement
ansible-playbook site.yml --tags "backup"
# Mises à jour uniquement
ansible-playbook site.yml --tags "update"
🔐 Sécurité
Hardening automatique inclus
- SSH : Configuration sécurisée (clés uniquement, port personnalisable)
- Firewall : UFW avec règles restrictives
- Fail2Ban : Protection anti-bruteforce
- Permissions : Utilisateur dédié minecraft
- Logs : Rotation automatique et surveillance
Ports ouverts par défaut
- 22/tcp : SSH (configurable)
- 25565/tcp : Minecraft
- 25575/tcp : RCON (localhost uniquement)
💾 Système de sauvegarde
Types de sauvegardes
- Quotidienne : 2h00, rétention 7 jours
- Hebdomadaire : Dimanche 3h00, rétention 4 semaines
- Mensuelle : 1er du mois 4h00, rétention 6 mois
Localisation des sauvegardes
/opt/minecraft/backups/
├── daily/ # Sauvegardes quotidiennes
├── weekly/ # Sauvegardes hebdomadaires
├── monthly/ # Sauvegardes mensuelles
└── scripts/ # Scripts de sauvegarde
Restauration
# Lister les sauvegardes disponibles
sudo -u minecraft /opt/minecraft/backups/scripts/restore.sh
# Restaurer une sauvegarde spécifique
sudo -u minecraft /opt/minecraft/backups/scripts/restore.sh daily 20241201_020000
🔄 Gestion des mises à jour
Mises à jour automatiques
Le rôle 05-update
vérifie et applique automatiquement :
- Clés SSH : Nouvelles clés autorisées
- Système : Paquets Debian/Ubuntu
- Spigot : Nouvelles versions disponibles
Processus de mise à jour Spigot
- Détection nouvelle version
- Téléchargement BuildTools
- Compilation en parallèle
- Tests de la nouvelle version
- Basculement sans interruption
- Nettoyage des anciennes versions
🎮 Administration du serveur
Commandes utiles
# Statut du service
systemctl status minecraft
# Logs en temps réel
journalctl -u minecraft -f
# Console RCON
/opt/minecraft/tools/mcrcon -H 127.0.0.1 -P 25575 -p your-password
# Commandes RCON utiles
/opt/minecraft/tools/mcrcon -H 127.0.0.1 -P 25575 -p your-password "say Serveur en maintenance"
/opt/minecraft/tools/mcrcon -H 127.0.0.1 -P 25575 -p your-password "stop"
Structure des fichiers Minecraft
/opt/minecraft/
├── server/ # Serveur actif
│ ├── spigot.jar # Exécutable Spigot
│ ├── plugins/ # Plugins installés
│ ├── worlds/ # Mondes Minecraft
│ ├── logs/ # Logs du serveur
│ └── ops.json # Administrateurs
├── sources/ # Sources et BuildTools
├── tools/ # Outils (mcrcon, scripts)
└── backups/ # Sauvegardes automatiques
Configuration des administrateurs
Éditer le fichier inventories/production/group_vars/minecraft_servers.yml
:
minecraft_ops:
- name: "admin_username"
uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
level: 4
bypass_limit: true
- name: "moderator_username"
uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
level: 3
bypass_limit: false
🔧 CI/CD avec Gitea
Configuration des secrets Gitea
Dans les paramètres de votre repository Gitea, configurez ces secrets :
ANSIBLE_SSH_KEY
: Clé privée SSH pour l'utilisateur ansibleANSIBLE_VAULT_PASSWORD
: Mot de passe du vault AnsibleANSIBLE_HOST
: IP du serveur pour ssh-keyscan
Workflows disponibles
Lint et validation (.gitea/workflows/lint.yml
)
- Déclenchement : Push sur main/develop, Pull Requests
- Actions :
- Validation YAML avec yamllint
- Validation Ansible avec ansible-lint
- Test des inventaires
Déploiement automatique (.gitea/workflows/deploy.yml
)
- Déclenchement : Push sur main, déclenchement manuel
- Environnements : staging, production
- Actions :
- Déploiement automatique selon la branche
- Utilisation des secrets sécurisés
Stratégie de déploiement
develop branch → staging environment
main branch → production environment
manual trigger → choice of environment
📊 Monitoring et logs
Logs système
# Logs du service Minecraft
journalctl -u minecraft -f --since "1 hour ago"
# Logs de sécurité
tail -f /var/log/auth.log
# Logs Fail2Ban
tail -f /var/log/fail2ban.log
# Logs UFW
tail -f /var/log/ufw.log
Logs Minecraft
# Log actuel du serveur
tail -f /opt/minecraft/server/logs/latest.log
# Logs archivés
ls -la /opt/minecraft/server/logs/
# Recherche dans les logs
grep "ERROR" /opt/minecraft/server/logs/latest.log
Métriques système
# Utilisation mémoire Java
ps aux | grep java
# Espace disque
df -h /opt/minecraft
# Processus réseau
netstat -tlnp | grep :25565
🔍 Dépannage
Problèmes courants
Le serveur ne démarre pas
# Vérifier le statut
systemctl status minecraft
# Vérifier les logs
journalctl -u minecraft -n 50
# Vérifier la configuration
sudo -u minecraft java -jar /opt/minecraft/server/spigot.jar --help
Problèmes de mémoire
# Ajuster dans group_vars/minecraft_servers.yml
minecraft_memory_min: "2G"
minecraft_memory_max: "6G"
# Redéployer
ansible-playbook site.yml --tags "minecraft"
Problèmes de connectivité
# Vérifier le pare-feu
ufw status verbose
# Tester la connectivité
telnet server-ip 25565
# Vérifier RCON
/opt/minecraft/tools/mcrcon -H 127.0.0.1 -P 25575 -p password "list"
Erreurs de compilation Spigot
# Nettoyer le cache de compilation
rm -rf /opt/minecraft/sources/build_*
# Relancer la compilation
ansible-playbook site.yml --tags "compile" -v
Mode debug
Pour activer le mode debug lors du déploiement :
ansible-playbook site.yml -vvv
🔄 Maintenance
Maintenance programmée
# Script de maintenance (à créer)
#!/bin/bash
# Arrêter le serveur
systemctl stop minecraft
# Effectuer la maintenance
# ...
# Redémarrer le serveur
systemctl start minecraft
Mise à jour manuelle
# Mise à jour du système uniquement
ansible-playbook site.yml --tags "system-update"
# Mise à jour Spigot uniquement
ansible-playbook site.yml --tags "spigot-update"
# Mise à jour complète
ansible-playbook site.yml --tags "update"
Nettoyage
# Nettoyer les anciens logs
find /opt/minecraft/server/logs/ -name "*.log.gz" -mtime +30 -delete
# Nettoyer les anciennes sauvegardes (automatique via scripts)
# Les scripts de sauvegarde incluent le nettoyage automatique
# Nettoyer les anciennes versions compilées
rm -rf /opt/minecraft/sources/build_*
📝 Personnalisation
Ajout de plugins
Éditer inventories/production/group_vars/minecraft_servers.yml
:
minecraft_plugins:
- name: "EssentialsX-2.21.0.jar"
url: "https://github.com/EssentialsX/Essentials/releases/download/2.21.0/EssentialsX-2.21.0.jar"
- name: "WorldEdit-7.3.0.jar"
url: "https://dev.bukkit.org/projects/worldedit/files/latest"
Configuration serveur personnalisée
Éditer les templates dans roles/03-installation-minecraft/templates/
:
server.properties.j2
: Propriétés principalesspigot.yml.j2
: Configuration Spigotbukkit.yml.j2
: Configuration Bukkit
Ajout de nouveaux environnements
- Créer le répertoire d'inventaire :
mkdir -p inventories/preprod/{group_vars}
- Créer les fichiers de configuration :
cp inventories/staging/* inventories/preprod/
- Adapter la configuration dans
group_vars/
🤝 Contribution
Développement local
# Cloner le projet
git clone https://your-gitea-instance.com/your-repo/minecraft-spigot-ansible.git
cd minecraft-spigot-ansible
# Installer les dépendances de développement
pip install ansible ansible-lint yamllint pre-commit
# Installer les hooks pre-commit
pre-commit install
# Tester les modifications
ansible-lint
yamllint .
Standards de code
- YAML : Indentation 2 espaces
- Ansible : Utilisation des modules officiels
- Templates : Variables Jinja2 documentées
- Tags : Cohérence dans le nommage
- Idempotence : Tous les tasks doivent être idempotents
Processus de contribution
- Fork du projet
- Branche de fonctionnalité :
feature/nouvelle-fonctionnalite
- Commits descriptifs et atomiques
- Tests : Validation avec ansible-lint
- Pull Request avec description détaillée
📚 Ressources
Documentation Ansible
Documentation Minecraft
Sécurité
📞 Support
Rapporter un problème
Utilisez le système d'issues de Gitea avec :
- Titre descriptif
- Environnement (OS, version Ansible, etc.)
- Logs d'erreur
- Steps to reproduce
Contact
- Issues : Système d'issues Gitea
- Discussions : Forum interne de l'équipe
- Documentation : Wiki du projet
📄 Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE
pour plus de détails.
Version du playbook : 1.0.0 Compatible avec : Debian 10/11/12/13, Ubuntu 18.04/20.04/22.04 Version Minecraft supportée : 1.21.6 Dernière mise à jour : Décembre 2024