2c8263fe62a75beec16b9c6db22fbf5da35300fe
Ansible Minecraft Spigot Server
Ce projet Ansible permet d'installer et de gérer automatiquement un serveur Minecraft Spigot avec toutes les fonctionnalités nécessaires pour un environnement de production.
🚀 Fonctionnalités
- Installation automatisée de Minecraft Spigot version 1.21.6
- Durcissement de sécurité du serveur (SSH, Firewall, Fail2ban)
- Installation Java automatique et optimisée
- Système de sauvegarde complet (quotidien, hebdomadaire, mensuel)
- Mises à jour automatiques de Spigot
- Gestion des plugins et des administrateurs
- Surveillance et logs avec rotation automatique
- CI/CD intégré avec Gitea Actions
📋 Prérequis
Serveurs cibles
- OS supportés : Debian 10/11/12/13 ou Ubuntu LTS
- Accès SSH configuré avec l'utilisateur
ansible
- Privilèges sudo pour l'utilisateur ansible
- Python 3.8+ installé sur les cibles
Machine de contrôle
- Ansible 2.10+
- Python 3.8+
- Collections Ansible (installées via requirements.yml)
🛠️ Installation
1. Cloner le repository
git clone https://gitea.tips-of-mine.com/Tips-Of-Mine/Ansible-Minecraft-Serveur.git
cd Ansible-Minecraft-Serveur
2. Installer les dépendances
# Installation des collections Ansible
ansible-galaxy collection install -r requirements.yml
# Installation de Python (si nécessaire)
python3 -m pip install ansible
3. Configuration des inventaires
Staging
Éditer inventories/staging/hosts.yml
et inventories/staging/group_vars/all.yml
Production
Éditer inventories/production/hosts.yml
et inventories/production/group_vars/all.yml
4. Configuration des secrets
Pour Gitea CI/CD
Configurer ces secrets dans Gitea :
ANSIBLE_SSH_PRIVATE_KEY
: Clé SSH privée (base64)MINECRAFT_RCON_PASSWORD
: Mot de passe RCONSTAGING_HOST
: Adresse du serveur stagingPRODUCTION_HOST
: Adresse du serveur production
📚 Structure du projet
Ansible-Minecraft-Serveur/
├── README.md # Ce fichier
├── requirements.yml # Collections Ansible requises
├── secrets # Template des secrets
├── site.yml # Playbook principal
├── .gitea/workflows/ci.yml # Pipeline CI/CD
├── inventories/ # Inventaires par environnement
│ ├── production/ # Configuration production
│ └── staging/ # Configuration staging
└── roles/ # Rôles Ansible
├── 01-server_hardening/ # Durcissement serveur
├── 02-installation-java/ # Installation Java
├── 03-Installation-minecraft/ # Installation Minecraft
├── 04-backups/ # Système de sauvegarde
└── 05-Update/ # Gestion des mises à jour
🚀 Utilisation
Déploiement complet
Environnement Staging
# Vérification de la syntaxe
ansible-playbook --syntax-check site.yml -i inventories/staging/hosts.yml
# Mode dry-run
ansible-playbook site.yml -i inventories/staging/hosts.yml --check --diff
# Déploiement réel
ansible-playbook site.yml -i inventories/staging/hosts.yml
Environnement Production
# Mode dry-run obligatoire en production
ansible-playbook site.yml -i inventories/production/hosts.yml --check --diff
# Déploiement réel (après validation)
ansible-playbook site.yml -i inventories/production/hosts.yml
Déploiement par rôle
Durcissement uniquement
ansible-playbook site.yml -i inventories/staging/hosts.yml --tags hardening
Installation/Mise à jour Minecraft
ansible-playbook site.yml -i inventories/staging/hosts.yml --tags minecraft
Configuration sauvegardes
ansible-playbook site.yml -i inventories/staging/hosts.yml --tags backup
🔧 Configuration avancée
Variables importantes
Minecraft
minecraft_version: "1.21.6" # Version Spigot
minecraft_max_memory: "4G" # RAM maximum
minecraft_min_memory: "2G" # RAM minimum
minecraft_port: 25565 # Port serveur
minecraft_rcon_port: 25575 # Port RCON
Sécurité
firewall_enabled: true # Activation UFW
fail2ban_enabled: true # Activation Fail2ban
hardening_enabled: true # Durcissement complet
ssh_port: 22 # Port SSH
Sauvegardes
backup_enabled: true # Activation sauvegardes
backup_retention_daily: 7 # Rétention quotidienne
backup_retention_weekly: 4 # Rétention hebdomadaire
backup_retention_monthly: 6 # Rétention mensuelle
Ajout d'administrateurs Minecraft
Dans group_vars/all.yml
:
minecraft_admins:
- name: "PlayerName"
uuid: "player-uuid-here"
level: 4
bypass_limit: false
Installation de plugins
minecraft_plugins:
- name: "WorldEdit"
url: "https://example.com/worldedit.jar"
- name: "Vault"
url: "https://example.com/vault.jar"
🔍 Monitoring et maintenance
Logs importants
- Serveur Minecraft :
/opt/minecraft/server/logs/
- Système :
/var/log/syslog
- SSH :
/var/log/auth.log
- Fail2ban :
/var/log/fail2ban.log
Commandes utiles
Status du serveur
systemctl status minecraft
Connexion RCON
/opt/minecraft/tools/mcrcon/mcrcon -H localhost -P 25575 -p votre_mot_de_passe
Sauvegarde manuelle
/usr/local/bin/minecraft-backup-daily.sh
Restauration
/usr/local/bin/minecraft-restore.sh daily minecraft-daily-20240127_020000
🔄 Mises à jour
Automatiques
Les mises à jour sont vérifiées selon la planification définie dans les crons.
Manuelles
ansible-playbook site.yml -i inventories/production/hosts.yml --tags update
🐛 Dépannage
Problèmes courants
Le serveur ne démarre pas
- Vérifier les logs :
journalctl -u minecraft -f
- Vérifier l'EULA :
/opt/minecraft/server/eula.txt
- Vérifier la RAM disponible :
free -h
Compilation Spigot échoue
- Vérifier Java :
java -version
- Vérifier l'espace disque :
df -h
- Vérifier les logs de compilation
Connexion SSH échoue
- Vérifier le pare-feu :
ufw status
- Vérifier les clés SSH
- Vérifier Fail2ban :
fail2ban-client status sshd
Logs de debug
# Activation du mode verbose
ansible-playbook site.yml -i inventories/staging/hosts.yml -vvv
🤝 Contribution
- Fork le projet
- Créer une branche feature (
git checkout -b feature/amazing-feature
) - Commit les changements (
git commit -m 'Add amazing feature'
) - Push vers la branche (
git push origin feature/amazing-feature
) - Créer une Pull Request
📝 Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE
pour plus de détails.
🆘 Support
- Issues : Gitea Issues
- Wiki : Documentation détaillée
- Discussions : Forum du projet
🙏 Remerciements
- Équipe Ansible pour l'excellente plateforme
- Communauté Spigot pour le serveur
- Contributeurs du projet
Made with ❤️ for Minecraft communities
Languages
Jinja
93.9%
Shell
6.1%