- Crée .env depuis .env.example si fichier absent - Avertit utilisateur pour configuration SESSION_SECRET - Facilite déploiement sur nouvelle machine
335 lines
11 KiB
Bash
Executable File
335 lines
11 KiB
Bash
Executable File
#!/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 ""
|