diff --git a/GIT_SYNC.md b/GIT_SYNC.md new file mode 100644 index 0000000..e5879ad --- /dev/null +++ b/GIT_SYNC.md @@ -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 +``` + +### 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. diff --git a/README.md b/README.md index 75bf8ed..31e3852 100644 --- a/README.md +++ b/README.md @@ -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 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 diff --git a/check-config.sh b/check-config.sh index 830059e..6654ae2 100755 --- a/check-config.sh +++ b/check-config.sh @@ -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 diff --git a/repos.conf b/repos.conf new file mode 100644 index 0000000..e5e10fc --- /dev/null +++ b/repos.conf @@ -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" diff --git a/repos.conf.example b/repos.conf.example new file mode 100644 index 0000000..80c2744 --- /dev/null +++ b/repos.conf.example @@ -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 +# +# ═══════════════════════════════════════════════════════════════