Hubert Cornet a2bdbde7a7
Some checks failed
Ansible Lint / ansible_lint_and_syntax_check (push) Successful in 14s
Ansible Lint / deploy (push) Failing after 6s
Actualiser roles/03-installation-minecraft/tasks/05-compile-spigot.yml
2025-08-26 20:00:57 +02:00
2025-08-26 14:44:39 +02:00
2025-08-26 14:28:09 +02:00
2025-08-26 14:28:09 +02:00
2025-08-26 14:28:09 +02:00
2025-08-22 10:08:04 +02:00
2025-08-22 10:08:04 +02:00
2025-08-26 19:45:24 +02:00
2025-08-26 14:28:09 +02:00

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

  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

# 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 ansible
  • ANSIBLE_VAULT_PASSWORD : Mot de passe du vault Ansible
  • ANSIBLE_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 principales
  • spigot.yml.j2 : Configuration Spigot
  • bukkit.yml.j2 : Configuration Bukkit

Ajout de nouveaux environnements

  1. Créer le répertoire d'inventaire :
mkdir -p inventories/preprod/{group_vars}
  1. Créer les fichiers de configuration :
cp inventories/staging/* inventories/preprod/
  1. 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

  1. Fork du projet
  2. Branche de fonctionnalité : feature/nouvelle-fonctionnalite
  3. Commits descriptifs et atomiques
  4. Tests : Validation avec ansible-lint
  5. 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

Description
No description provided
Readme AGPL-3.0 334 KiB
Languages
Jinja 93.9%
Shell 6.1%