Files
Ansible-Minecraft-Server/README.md
hcornet 31711c7627
Some checks failed
Deploy Minecraft Server / deploy (push) Failing after 1m25s
Ansible Lint / lint (push) Failing after 12s
update
2025-08-26 14:28:09 +02:00

216 lines
6.3 KiB
Markdown

# 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