# 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 ```bash # 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`) ```yaml 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`) ```yaml 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 : ```bash ansible-vault create inventories/production/group_vars/vault.yml ``` Contenu du vault : ```yaml vault_minecraft_rcon_password: "your-secure-rcon-password" vault_mysql_password: "your-mysql-password" ``` ## 🚀 Déploiement ### Déploiement manuel ```bash # 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 ```bash # 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 ```bash # 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 1. Détection nouvelle version 2. Téléchargement BuildTools 3. Compilation en parallèle 4. Tests de la nouvelle version 5. Basculement sans interruption 6. Nettoyage des anciennes versions ## 🎮 Administration du serveur ### Commandes utiles ```bash # 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