#!/bin/bash ####################################### # 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 # set -e # Couleurs 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 WARNINGS=0 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[✓]${NC} $1" } log_warning() { echo -e "${YELLOW}[⚠]${NC} $1" ((WARNINGS++)) } log_error() { echo -e "${RED}[✗]${NC} $1" ((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 log_success "Docker installé: $(docker --version | head -n1)" else log_error "Docker n'est pas installé" fi if docker compose version &> /dev/null 2>&1; then log_success "Docker Compose v2 installé" elif command -v docker-compose &> /dev/null; then log_success "Docker Compose v1 installé" else log_error "Docker Compose n'est pas installé" fi echo "" # Vérification des dossiers log_info "Vérification des dossiers..." if [ -d "$MC_SERVER_DIR" ]; then log_success "Dossier serveur MC trouvé" else log_error "Dossier serveur MC introuvable: $MC_SERVER_DIR" fi if [ -d "$WEB_ADMIN_DIR" ]; then log_success "Dossier application web trouvé" else log_error "Dossier application web introuvable: $WEB_ADMIN_DIR" fi echo "" # Vérification serveur Minecraft log_info "Vérification du serveur Minecraft..." if [ -f "$MC_SERVER_DIR/mcpc.jar" ]; then log_success "Fichier mcpc.jar trouvé" else log_error "Fichier mcpc.jar introuvable" fi if [ -f "$MC_SERVER_DIR/docker-compose.yml" ]; then log_success "docker-compose.yml trouvé" else log_error "docker-compose.yml introuvable dans le serveur MC" fi if [ -f "$MC_SERVER_DIR/.env" ]; then log_success "Fichier .env trouvé pour le serveur MC" # Vérifier RCON_PASSWORD if grep -q "^RCON_PASSWORD=minecraft$" "$MC_SERVER_DIR/.env" 2>/dev/null; then log_warning "RCON_PASSWORD utilise la valeur par défaut 'minecraft' - Changez-le pour la production!" else log_success "RCON_PASSWORD configuré" fi else log_warning "Fichier .env manquant pour le serveur MC" if [ -f "$MC_SERVER_DIR/.env.example" ]; then log_action "Création de .env depuis .env.example..." cp "$MC_SERVER_DIR/.env.example" "$MC_SERVER_DIR/.env" log_success "Fichier .env créé pour le serveur MC" fi fi echo "" # Vérification application web log_info "Vérification de l'application web..." if [ -f "$WEB_ADMIN_DIR/docker-compose.yml" ]; then log_success "docker-compose.yml trouvé" else log_error "docker-compose.yml introuvable dans l'application web" fi if [ -f "$WEB_ADMIN_DIR/.env" ]; then log_success "Fichier .env trouvé pour l'application web" # Vérifier SESSION_SECRET if grep -q "^SESSION_SECRET=.*changez.*production" "$WEB_ADMIN_DIR/.env" 2>/dev/null; then log_error "SESSION_SECRET utilise la valeur par défaut - CHANGEZ-LE IMMÉDIATEMENT!" log_info "Générez un secret avec: openssl rand -base64 32" elif grep -q "^SESSION_SECRET=your-secret-key-change-in-production" "$WEB_ADMIN_DIR/.env" 2>/dev/null; then log_error "SESSION_SECRET utilise la valeur par défaut - CHANGEZ-LE IMMÉDIATEMENT!" log_info "Générez un secret avec: openssl rand -base64 32" else log_success "SESSION_SECRET configuré" fi # Vérifier RCON_PASSWORD WEB_RCON_PASS=$(grep "^RCON_PASSWORD=" "$WEB_ADMIN_DIR/.env" 2>/dev/null | cut -d'=' -f2) MC_RCON_PASS=$(grep "^RCON_PASSWORD=" "$MC_SERVER_DIR/.env" 2>/dev/null | cut -d'=' -f2) if [ -n "$WEB_RCON_PASS" ] && [ -n "$MC_RCON_PASS" ]; then if [ "$WEB_RCON_PASS" = "$MC_RCON_PASS" ]; then log_success "RCON_PASSWORD identique dans les deux configurations" else log_error "RCON_PASSWORD différent entre le serveur MC et l'application web!" log_info "Serveur MC: $MC_RCON_PASS" log_info "App Web: $WEB_RCON_PASS" fi fi else log_warning "Fichier .env manquant pour l'application web" if [ -f "$WEB_ADMIN_DIR/.env.example" ]; then log_action "Création de .env depuis .env.example..." cp "$WEB_ADMIN_DIR/.env.example" "$WEB_ADMIN_DIR/.env" log_success "Fichier .env créé pour l'application web" log_warning "⚠️ IMPORTANT: Configurez SESSION_SECRET et RCON_PASSWORD dans .env" log_info "Générez SESSION_SECRET avec: openssl rand -base64 32" fi fi # Après création ou vérification du .env, vérifier MC_SERVER_PATH if [ -f "$WEB_ADMIN_DIR/.env" ]; then if grep -q "^MC_SERVER_PATH=" "$WEB_ADMIN_DIR/.env" 2>/dev/null; then MC_PATH=$(grep "^MC_SERVER_PATH=" "$WEB_ADMIN_DIR/.env" | cut -d'=' -f2) log_success "MC_SERVER_PATH configuré: $MC_PATH" else log_warning "MC_SERVER_PATH non défini (utilisera ../NationsGlory_ServeurBuild_Red par défaut)" fi fi if [ -d "$WEB_ADMIN_DIR/backend/node_modules" ]; then log_success "Dépendances Node.js installées" else log_warning "node_modules manquant - sera installé lors du build Docker" fi echo "" # Vérification des ports log_info "Vérification des ports..." check_port() { local port=$1 local service=$2 if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1 || ss -ltn | grep -q ":$port " 2>/dev/null; then log_warning "Port $port ($service) déjà utilisé" else log_success "Port $port ($service) disponible" fi } check_port 25565 "Minecraft" check_port 25575 "RCON" check_port 4001 "Web Admin" echo "" # Vérification des permissions log_info "Vérification des permissions..." if [ -x "$SCRIPT_DIR/deploy.sh" ]; then log_success "Script deploy.sh exécutable" else log_warning "Script deploy.sh non exécutable (chmod +x deploy.sh)" fi if [ -x "$SCRIPT_DIR/stop.sh" ]; then log_success "Script stop.sh exécutable" else log_warning "Script stop.sh non exécutable (chmod +x stop.sh)" fi echo "" # Résumé log_info "═══════════════════════════════════════════════════════" if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then log_success "✓ Toutes les vérifications sont passées!" log_info "Vous pouvez démarrer le déploiement avec: ./deploy.sh" elif [ $ERRORS -eq 0 ]; then log_success "Aucune erreur critique" log_warning "$WARNINGS avertissement(s) - Vérifiez les points ci-dessus" log_info "Vous pouvez démarrer le déploiement avec: ./deploy.sh" else log_error "$ERRORS erreur(s) trouvée(s)" log_warning "$WARNINGS avertissement(s)" log_info "Corrigez les erreurs avant de déployer" exit 1 fi log_info "═══════════════════════════════════════════════════════" echo ""