feat: Synchronisation Git automatique des sous-repositories

Amélioration du script check-config.sh pour gérer automatiquement
le clonage et la mise à jour des repositories NationsGlory_ServeurBuild_Red
et WebNationsGlory_ServeurBuild_Red.

Nouveautés:
- Clone automatique si repositories absents
- Pull automatique si mises à jour disponibles
- Détection de conflits et modifications locales
- Configuration via repos.conf (template fourni)
- Documentation dans GIT_SYNC.md

Permet un déploiement simplifié sur nouvelle machine et
des mises à jour automatisées en production.
This commit is contained in:
2026-02-05 18:47:13 +01:00
parent c58d85d751
commit 773bc7de1f
5 changed files with 503 additions and 10 deletions

225
GIT_SYNC.md Normal file
View File

@@ -0,0 +1,225 @@
# 🔄 Synchronisation Git Automatique
Le script `check-config.sh` a été amélioré pour gérer automatiquement la synchronisation des repositories Git.
## 🎯 Fonctionnalités
### 1. Clonage automatique
Si les dossiers `NationsGlory_ServeurBuild_Red` ou `WebNationsGlory_ServeurBuild_Red` n'existent pas, le script les clone automatiquement depuis les URLs configurées.
### 2. Mise à jour automatique
Si les repositories existent déjà, le script :
- ✅ Vérifie si des mises à jour sont disponibles
- ✅ Met à jour automatiquement si possible
- ⚠️ Vous avertit si vous avez des modifications locales
### 3. Détection de conflits
Le script détecte :
- Modifications locales non commitées
- Différences entre la version locale et distante
- Problèmes de connexion Git
## ⚙️ Configuration
### Fichier `repos.conf`
Créez ce fichier pour configurer les URLs de vos repositories :
```bash
cp repos.conf.example repos.conf
nano repos.conf
```
### Exemples de configuration
**Git sur serveur local (SSH) :**
```bash
MC_SERVER_REPO="git@192.168.1.195:/srv/git/NationsGlory_ServeurBuild_Red.git"
WEB_ADMIN_REPO="git@192.168.1.195:/srv/git/WebNationsGlory_ServeurBuild_Red.git"
DEFAULT_BRANCH="main"
```
**GitHub (SSH) :**
```bash
MC_SERVER_REPO="git@github.com:username/NationsGlory_ServeurBuild_Red.git"
WEB_ADMIN_REPO="git@github.com:username/WebNationsGlory_ServeurBuild_Red.git"
DEFAULT_BRANCH="main"
```
**GitHub (HTTPS) :**
```bash
MC_SERVER_REPO="https://github.com/username/NationsGlory_ServeurBuild_Red.git"
WEB_ADMIN_REPO="https://github.com/username/WebNationsGlory_ServeurBuild_Red.git"
DEFAULT_BRANCH="main"
```
## 🚀 Utilisation
### Premier déploiement
```bash
# 1. Configurer les URLs Git
cp repos.conf.example repos.conf
nano repos.conf
# 2. Cloner et vérifier
./check-config.sh
# 3. Déployer
./deploy.sh
```
### Mise à jour
```bash
# Vérifier et mettre à jour
./check-config.sh
# Si des mises à jour sont disponibles
./stop.sh
./deploy.sh
```
## 📋 Comportement du script
### Cas 1 : Repository n'existe pas
```
[→] Clonage de NationsGlory Serveur MC depuis git@...
[✓] NationsGlory Serveur MC cloné avec succès
```
### Cas 2 : Repository à jour
```
[INFO] Repository NationsGlory Serveur MC existe, vérification des mises à jour...
[✓] NationsGlory Serveur MC est à jour
```
### Cas 3 : Mise à jour disponible
```
[INFO] Repository NationsGlory Serveur MC existe, vérification des mises à jour...
[→] Mise à jour de NationsGlory Serveur MC disponible...
[→] Mise à jour de NationsGlory Serveur MC...
[✓] NationsGlory Serveur MC mis à jour avec succès
```
### Cas 4 : Modifications locales
```
[INFO] Repository NationsGlory Serveur MC existe, vérification des mises à jour...
[→] Mise à jour de NationsGlory Serveur MC disponible...
[⚠] NationsGlory Serveur MC a des modifications locales non commitées
[INFO] Pour mettre à jour, committez ou annulez vos modifications
```
## 🔐 Configuration SSH
### Pour un serveur Git local
1. **Générer une clé SSH** (si vous n'en avez pas) :
```bash
ssh-keygen -t ed25519 -C "votre@email.com"
```
2. **Copier la clé sur le serveur Git** :
```bash
ssh-copy-id user@192.168.1.195
```
3. **Tester la connexion** :
```bash
ssh git@192.168.1.195
```
### Pour GitHub/GitLab
1. **Ajouter votre clé SSH** à votre compte GitHub/GitLab
2. **Tester la connexion** :
```bash
ssh -T git@github.com
# ou
ssh -T git@gitlab.com
```
## 🐛 Dépannage
### Erreur : "Échec du clonage"
**Causes possibles :**
- URL Git incorrecte dans `repos.conf`
- Problème d'authentification SSH
- Serveur Git inaccessible
**Solutions :**
```bash
# Vérifier l'URL
cat repos.conf
# Tester la connexion SSH
ssh git@192.168.1.195
# Cloner manuellement pour voir l'erreur
git clone <URL_DU_REPO>
```
### Avertissement : "Modifications locales non commitées"
**Solution 1 : Commiter les modifications**
```bash
cd NationsGlory_ServeurBuild_Red
git add .
git commit -m "Mes modifications"
git push
```
**Solution 2 : Annuler les modifications**
```bash
cd NationsGlory_ServeurBuild_Red
git reset --hard origin/main
```
### Erreur : "MC_SERVER_REPO non défini"
**Solution :**
```bash
# Créer repos.conf depuis le template
cp repos.conf.example repos.conf
nano repos.conf
```
## 📚 Workflow recommandé
### Développement local
1. Faites vos modifications dans les sous-repositories
2. Testez localement
3. Committez et pushez vos changements
4. Sur le serveur de production, exécutez `./check-config.sh` pour mettre à jour
### Production
1. Exécutez régulièrement `./check-config.sh` pour vérifier les mises à jour
2. Si des mises à jour sont détectées :
```bash
./stop.sh
./check-config.sh # Met à jour
./deploy.sh # Redémarre
```
## 🎓 Avantages
✅ **Automatisation** : Plus besoin de cloner/pull manuellement
✅ **Détection de conflits** : Avertit avant d'écraser des modifications
✅ **Portable** : Fonctionne sur n'importe quelle machine
✅ **Flexible** : Supporte Git local, GitHub, GitLab, etc.
✅ **Sécurité** : Vérifie avant de modifier
---
**Note** : Le fichier `repos.conf` n'est pas versionné (dans `.gitignore`) pour permettre des configurations différentes sur chaque machine.

113
README.md
View File

@@ -6,22 +6,58 @@ Ce dossier contient le serveur Minecraft NationsGlory modé et son interface web
```
Serveur NationsGlory/
├── NationsGlory_ServeurBuild_Red/ # Serveur Minecraft 1.6.4
├── WebNationsGlory_ServeurBuild_Red/ # Application web admin
├── NationsGlory_ServeurBuild_Red/ # Serveur Minecraft 1.6.4 (repo Git)
├── WebNationsGlory_ServeurBuild_Red/ # Application web admin (repo Git)
├── deploy.sh # Script de déploiement
── stop.sh # Script d'arrêt
── stop.sh # Script d'arrêt
├── check-config.sh # Vérification et sync Git
└── repos.conf # Configuration des repos Git
```
## 🚀 Déploiement Rapide
### Prérequis
- Git installé
- Docker et Docker Compose installés
- Ports disponibles: 25565 (Minecraft), 25575 (RCON), 4001 (Web Admin)
### Installation en 3 étapes
### Installation en 4 étapes
#### 1. Configuration initiale
#### 0. Configuration Git (première fois uniquement)
```bash
# Copier et configurer les URLs des repositories
cp repos.conf.example repos.conf
nano repos.conf
```
Configurez les URLs de vos repositories Git :
- `MC_SERVER_REPO` : URL du repository du serveur Minecraft
- `WEB_ADMIN_REPO` : URL du repository de l'application web
**Exemples d'URLs :**
```bash
# Git local (SSH)
MC_SERVER_REPO="git@192.168.1.195:/srv/git/NationsGlory_ServeurBuild_Red.git"
# GitHub
MC_SERVER_REPO="git@github.com:username/NationsGlory_ServeurBuild_Red.git"
```
#### 1. Synchronisation et vérification
```bash
./check-config.sh
```
Ce script va automatiquement :
- ✅ Cloner les repositories s'ils n'existent pas
- ✅ Mettre à jour les repositories existants
- ✅ Vérifier Docker, les ports, et la configuration
- ✅ Détecter les problèmes de configuration
#### 2. Configuration initiale
```bash
cd WebNationsGlory_ServeurBuild_Red
@@ -33,7 +69,7 @@ Modifiez au minimum :
- `SESSION_SECRET` : Générez avec `openssl rand -base64 32`
- `RCON_PASSWORD` : Mot de passe pour RCON (doit correspondre au serveur MC)
#### 2. Déploiement
#### 3. Déploiement
```bash
cd .. # Retour au dossier parent
@@ -47,7 +83,7 @@ Le script va automatiquement :
- ✅ Démarrer l'application web admin
- ✅ Afficher les URLs d'accès
#### 3. Accès
#### 4. Accès
**Serveur Minecraft:**
- Adresse: `votre-ip:25565`
@@ -192,15 +228,72 @@ Cette configuration est entièrement portable :
✅ **Configuration par variables d'environnement** : Facile à adapter
✅ **Détection automatique de l'hôte** : Fonctionne sur n'importe quelle machine
✅ **Scripts de déploiement** : Installation simplifiée
✅ **Synchronisation Git automatique** : Clonage et mises à jour gérés par check-config.sh
### Déployer sur une nouvelle machine
1. Copiez tout le dossier `Serveur NationsGlory`
2. Configurez le fichier `.env`
3. Exécutez `./deploy.sh`
1. Clonez le repository parent :
```bash
git clone <url-du-repo-parent> NationsGlory
cd NationsGlory
```
2. Configurez les repositories :
```bash
cp repos.conf.example repos.conf
nano repos.conf # Configurez les URLs Git
```
3. Synchronisez et déployez :
```bash
./check-config.sh # Clone les repos si nécessaire
./deploy.sh
```
C'est tout ! 🎉
## 🔄 Mises à jour
### Mettre à jour les projets
Le script `check-config.sh` gère automatiquement les mises à jour :
```bash
./check-config.sh
```
Le script va :
- ✅ Vérifier si des mises à jour sont disponibles sur les repositories
- ✅ Vous avertir si vous avez des modifications locales non commitées
- ✅ Mettre à jour automatiquement si aucun conflit n'est détecté
### Workflow de mise à jour complet
```bash
# 1. Vérifier et mettre à jour les repositories
./check-config.sh
# 2. Arrêter les services
./stop.sh
# 3. Redémarrer avec les nouvelles versions
./deploy.sh
```
### Forcer une mise à jour manuelle
Si vous avez des modifications locales et voulez les abandonner :
```bash
cd NationsGlory_ServeurBuild_Red
git reset --hard origin/main
git pull
cd ../WebNationsGlory_ServeurBuild_Red
git reset --hard origin/main
git pull
```
## 🐛 Dépannage
### Le serveur Minecraft ne démarre pas

View File

@@ -3,6 +3,7 @@
#######################################
# Script de vérification de configuration
# Vérifie que tout est prêt pour le déploiement
# Clone ou met à jour les repositories si nécessaire
#######################################
# Ne pas utiliser set -e car on veut continuer malgré les erreurs
@@ -13,6 +14,7 @@ RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
ERRORS=0
@@ -36,16 +38,117 @@ log_error() {
((ERRORS++))
}
log_action() {
echo -e "${CYAN}[→]${NC} $1"
}
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
MC_SERVER_DIR="${SCRIPT_DIR}/NationsGlory_ServeurBuild_Red"
WEB_ADMIN_DIR="${SCRIPT_DIR}/WebNationsGlory_ServeurBuild_Red"
# Charger la configuration des repos
REPOS_CONF="${SCRIPT_DIR}/repos.conf"
if [ -f "$REPOS_CONF" ]; then
source "$REPOS_CONF"
fi
echo ""
log_info "═══════════════════════════════════════════════════════"
log_info " Vérification de Configuration - NationsGlory"
log_info "═══════════════════════════════════════════════════════"
echo ""
# Vérification Git
log_info "Vérification de Git..."
if command -v git &> /dev/null; then
log_success "Git installé: $(git --version | head -n1)"
else
log_error "Git n'est pas installé"
fi
echo ""
# Fonction pour cloner ou mettre à jour un repository
sync_repository() {
local repo_url="$1"
local target_dir="$2"
local repo_name="$3"
local branch="${4:-main}"
if [ -z "$repo_url" ] || [ "$repo_url" == "git@192.168.1.195:/path/to/"* ]; then
log_warning "URL du repository $repo_name non configurée dans repos.conf"
return 1
fi
if [ -d "$target_dir/.git" ]; then
log_info "Repository $repo_name existe, vérification des mises à jour..."
cd "$target_dir"
# Récupérer les informations du remote
git fetch origin &>/dev/null
# Vérifier s'il y a des changements
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse @{u} 2>/dev/null || echo "")
if [ -z "$REMOTE" ]; then
log_warning "$repo_name: Impossible de vérifier les mises à jour (pas de tracking branch)"
elif [ "$LOCAL" = "$REMOTE" ]; then
log_success "$repo_name est à jour"
else
log_action "Mise à jour de $repo_name disponible..."
# Vérifier s'il y a des modifications locales
if ! git diff-index --quiet HEAD --; then
log_warning "$repo_name a des modifications locales non commitées"
log_info "Pour mettre à jour, committez ou annulez vos modifications"
else
log_action "Mise à jour de $repo_name..."
if git pull origin "$branch" &>/dev/null; then
log_success "$repo_name mis à jour avec succès"
else
log_error "Échec de la mise à jour de $repo_name"
fi
fi
fi
cd "$SCRIPT_DIR"
elif [ -d "$target_dir" ]; then
log_warning "$target_dir existe mais n'est pas un repository Git"
log_info "Pour le convertir en repository Git, supprimez-le et relancez ce script"
else
log_action "Clonage de $repo_name depuis $repo_url..."
if git clone "$repo_url" "$target_dir" &>/dev/null; then
log_success "$repo_name cloné avec succès"
else
log_error "Échec du clonage de $repo_name"
log_info "Vérifiez l'URL dans repos.conf et vos accès Git"
fi
fi
}
# Synchronisation des repositories
log_info "Synchronisation des repositories..."
echo ""
log_info "→ Serveur Minecraft"
if [ -n "$MC_SERVER_REPO" ]; then
sync_repository "$MC_SERVER_REPO" "$MC_SERVER_DIR" "NationsGlory Serveur MC" "${DEFAULT_BRANCH:-main}"
else
log_warning "MC_SERVER_REPO non défini dans repos.conf"
fi
echo ""
log_info "→ Application Web Admin"
if [ -n "$WEB_ADMIN_REPO" ]; then
sync_repository "$WEB_ADMIN_REPO" "$WEB_ADMIN_DIR" "Web Admin" "${DEFAULT_BRANCH:-main}"
else
log_warning "WEB_ADMIN_REPO non défini dans repos.conf"
fi
echo ""
# Vérification Docker
log_info "Vérification de Docker..."
if command -v docker &> /dev/null; then

15
repos.conf Normal file
View File

@@ -0,0 +1,15 @@
# Configuration des repositories Git
# Modifiez ces URLs selon votre configuration
# URL du repository du serveur Minecraft
# Exemples :
# - Git local: git@192.168.1.195:/path/to/NationsGlory_ServeurBuild_Red.git
# - GitHub: https://github.com/user/NationsGlory_ServeurBuild_Red.git
# - GitLab: https://gitlab.com/user/NationsGlory_ServeurBuild_Red.git
MC_SERVER_REPO="git@192.168.1.195:/path/to/NationsGlory_ServeurBuild_Red.git"
# URL du repository de l'application web
WEB_ADMIN_REPO="git@192.168.1.195:/path/to/WebNationsGlory_ServeurBuild_Red.git"
# Branche par défaut
DEFAULT_BRANCH="main"

57
repos.conf.example Normal file
View File

@@ -0,0 +1,57 @@
# ═══════════════════════════════════════════════════════════════
# Configuration des repositories Git - Template
# ═══════════════════════════════════════════════════════════════
#
# Copiez ce fichier vers repos.conf et configurez vos URLs Git
# cp repos.conf.example repos.conf
#
# Le script check-config.sh utilisera ces URLs pour :
# - Cloner les repositories s'ils n'existent pas
# - Mettre à jour les repositories existants
#
# ═══════════════════════════════════════════════════════════════
# URL du repository du serveur Minecraft
# ───────────────────────────────────────────────────────────────
# Exemples selon votre hébergement :
#
# Git sur serveur local (SSH) :
# MC_SERVER_REPO="git@192.168.1.195:/srv/git/NationsGlory_ServeurBuild_Red.git"
#
# GitHub (HTTPS) :
# MC_SERVER_REPO="https://github.com/votre-username/NationsGlory_ServeurBuild_Red.git"
#
# GitHub (SSH) :
# MC_SERVER_REPO="git@github.com:votre-username/NationsGlory_ServeurBuild_Red.git"
#
# GitLab :
# MC_SERVER_REPO="https://gitlab.com/votre-username/NationsGlory_ServeurBuild_Red.git"
#
MC_SERVER_REPO="git@192.168.1.195:/path/to/NationsGlory_ServeurBuild_Red.git"
# URL du repository de l'application web
# ───────────────────────────────────────────────────────────────
WEB_ADMIN_REPO="git@192.168.1.195:/path/to/WebNationsGlory_ServeurBuild_Red.git"
# Branche par défaut
# ───────────────────────────────────────────────────────────────
# La branche à cloner/pull (généralement 'main' ou 'master')
DEFAULT_BRANCH="main"
# ═══════════════════════════════════════════════════════════════
# Notes :
# ───────────────────────────────────────────────────────────────
#
# 1. Pour un serveur Git local via SSH :
# - Format : git@IP:/chemin/absolu/vers/repo.git
# - Assurez-vous que le serveur Git est accessible
# - Les clés SSH doivent être configurées
#
# 2. Pour GitHub/GitLab :
# - HTTPS : Nécessite identifiants à chaque fois (ou credential helper)
# - SSH : Nécessite clé SSH configurée (recommandé)
#
# 3. Le script vérifiera automatiquement les mises à jour
# et vous avertira si des changements locaux non commités existent
#
# ═══════════════════════════════════════════════════════════════