diff --git a/README.md b/README.md index 45b6dc7..560150e 100644 --- a/README.md +++ b/README.md @@ -213,3 +213,318 @@ journalctl -u minecraft -f ``` ### 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` : + +```yaml +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 +```bash +# 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 +```bash +# 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 +```bash +# 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 +```bash +# 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 +```bash +# 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é +```bash +# 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 +```bash +# 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 : + +```bash +ansible-playbook site.yml -vvv +``` + +## 🔄 Maintenance + +### Maintenance programmée + +```bash +# 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 + +```bash +# 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 + +```bash +# 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` : + +```yaml +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 : +```bash +mkdir -p inventories/preprod/{group_vars} +``` + +2. Créer les fichiers de configuration : +```bash +cp inventories/staging/* inventories/preprod/ +``` + +3. Adapter la configuration dans `group_vars/` + +## 🤝 Contribution + +### Développement local + +```bash +# 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 +- [Ansible Documentation](https://docs.ansible.com/) +- [Ansible Best Practices](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html) + +### Documentation Minecraft +- [Spigot Documentation](https://www.spigotmc.org/wiki/) +- [Paper Documentation](https://docs.papermc.io/) + +### Sécurité +- [CIS Benchmarks](https://www.cisecurity.org/cis-benchmarks/) +- [ANSSI Hardening Guide](https://www.ssi.gouv.fr/) + +## 📞 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