#!/bin/bash # Script principal de génération pour l'écosystème _4NK Vault # Orchestre l'exécution des scripts de génération dans l'ordre approprié # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Compteurs SCRIPTS_EXECUTED=0 SCRIPTS_FAILED=0 TOTAL_SCRIPTS=3 # Fonction pour afficher les messages avec couleurs print_header() { local message="$1" echo -e "${BLUE}================================${NC}" echo -e "${BLUE}$message${NC}" echo -e "${BLUE}================================${NC}" } print_step() { local step="$1" local description="$2" echo -e "\n${CYAN}📋 ÉTAPE $step${NC}: $description" echo -e "${CYAN}$(printf '=%.0s' {1..50})${NC}" } print_success() { local message="$1" echo -e "${GREEN}✅ SUCCÈS${NC}: $message" } print_error() { local message="$1" echo -e "${RED}❌ ERREUR${NC}: $message" } print_warning() { local message="$1" echo -e "${YELLOW}⚠️ ATTENTION${NC}: $message" } print_info() { local message="$1" echo -e "${PURPLE}ℹ️ INFO${NC}: $message" } # Fonction pour exécuter un script avec gestion d'erreur execute_script() { local script_name="$1" local script_path="$2" local description="$3" echo -e "\n${YELLOW}🚀 Exécution de $script_name...${NC}" echo -e "${YELLOW}Description: $description${NC}" echo "" # Vérifier que le script existe if [ ! -f "$script_path" ]; then print_error "Script $script_name non trouvé: $script_path" SCRIPTS_FAILED=$((SCRIPTS_FAILED + 1)) return 1 fi # Vérifier que le script est exécutable if [ ! -x "$script_path" ]; then print_warning "Script $script_name n'est pas exécutable, tentative de correction..." chmod +x "$script_path" fi # Exécuter le script echo -e "${BLUE}Commande: $script_path${NC}" echo "" if "$script_path"; then print_success "$script_name exécuté avec succès" SCRIPTS_EXECUTED=$((SCRIPTS_EXECUTED + 1)) return 0 else print_error "$script_name a échoué (code de sortie: $?)" SCRIPTS_FAILED=$((SCRIPTS_FAILED + 1)) return 1 fi } # Fonction pour vérifier les prérequis check_prerequisites() { echo -e "${BLUE}🔍 Vérification des prérequis...${NC}" # Vérifier que nous sommes dans le bon répertoire if [ ! -f "generate_variables.sh" ]; then print_error "Script generate_variables.sh non trouvé. Assurez-vous d'être dans le répertoire storage/dev" exit 1 fi if [ ! -f "generate_grafana_dashboards.sh" ]; then print_error "Script generate_grafana_dashboards.sh non trouvé" exit 1 fi if [ ! -f "generate_promtail_config.sh" ]; then print_error "Script generate_promtail_config.sh non trouvé" exit 1 fi if [ ! -f "generate_logrotate_configs.sh" ]; then print_error "Script generate_logrotate_configs.sh non trouvé" exit 1 fi if [ ! -f "generate_nginx_configs.sh" ]; then print_error "Script generate_nginx_configs.sh non trouvé" exit 1 fi # Vérifier la variable HOST if [ -z "${HOST:-}" ]; then print_warning "Variable HOST non définie, utilisation de la valeur par défaut" export HOST="dev4._4NKweb.com" print_info "HOST défini à: $HOST" else print_info "HOST détecté: $HOST" fi # Vérifier la variable SERVICES if [ -z "${SERVICES:-}" ] || [ ${#SERVICES[@]} -eq 0 ]; then print_warning "Variable SERVICES non définie" print_info "Les scripts peuvent échouer si SERVICES n'est pas défini dans .env" else print_info "SERVICES détecté: ${#SERVICES[@]} services (${SERVICES[*]})" fi print_success "Prérequis vérifiés" } # Fonction pour afficher le résumé final show_summary() { echo -e "\n${PURPLE}📊 RÉSUMÉ DE LA GÉNÉRATION${NC}" echo -e "${PURPLE}=============================${NC}" echo -e "Scripts exécutés avec succès: ${GREEN}$SCRIPTS_EXECUTED/$TOTAL_SCRIPTS${NC}" echo -e "Scripts échoués: ${RED}$SCRIPTS_FAILED/$TOTAL_SCRIPTS${NC}" if [ $SCRIPTS_FAILED -eq 0 ]; then echo -e "\n${GREEN}🎉 TOUS LES SCRIPTS ONT ÉTÉ EXÉCUTÉS AVEC SUCCÈS !${NC}" echo -e "\n${CYAN}📁 Fichiers générés:${NC}" echo -e " • ${GREEN}docker-compose.yml.auto${NC} - Configuration Docker" echo -e " • ${GREEN}.env.auto${NC} - Variables d'environnement" echo -e " • ${GREEN}_4NK_modules/grafana/dashboards/${NC} - Dashboards Grafana" echo -e " • ${GREEN}_4NK_modules/promtail/promtail.yml${NC} - Configuration Promtail" echo -e " • ${GREEN}logrotade/${NC} - Configurations Logrotate" echo -e " • ${GREEN}nginx/${NC} - Configurations Nginx" echo -e "\n${CYAN}🚀 Prochaines étapes recommandées:${NC}" echo -e " 1. Vérifiez les fichiers générés" echo -e " 2. Déployez avec Docker Compose si nécessaire" echo -e " 3. Testez les configurations Nginx" echo -e " 4. Déployez les configurations Nginx si validées" else echo -e "\n${RED}⚠️ CERTAINS SCRIPTS ONT ÉCHOUÉ${NC}" echo -e "\n${YELLOW}🔧 Actions recommandées:${NC}" echo -e " 1. Vérifiez les variables d'environnement dans .env" echo -e " 2. Vérifiez les erreurs ci-dessus" echo -e " 3. Relancez le script après correction" echo -e " 4. Consultez la documentation des scripts individuels" fi echo -e "\n${BLUE}📚 Documentation disponible:${NC}" echo -e " • generate_variables.sh - Génération des variables et docker-compose" echo -e " • generate_grafana_dashboards.sh - Génération des dashboards" echo -e " • generate_promtail_config.sh - Génération de la config Promtail" echo -e " • generate_logrotate_configs.sh - Génération des configs Logrotate" echo -e " • generate_nginx_configs.sh - Génération des configs Nginx" echo -e " • README.md - Documentation générale du projet" } # Fonction pour afficher l'aide show_help() { echo -e "${BLUE}🚀 GÉNÉRATEUR PRINCIPAL _4NK VAULT${NC}" echo -e "${BLUE}===================================${NC}" echo "" echo -e "${CYAN}Description:${NC}" echo " Script principal qui orchestre la génération de toutes les configurations" echo " nécessaires pour l'écosystème _4NK Vault." echo "" echo -e "${CYAN}Scripts exécutés dans l'ordre:${NC}" echo " 1. generate_variables.sh - Génère .env.auto et docker-compose.yml.auto" echo " 2. generate_grafana_dashboards.sh - Génère les dashboards Grafana" echo " 3. generate_promtail_config.sh - Génère la configuration Promtail" echo " 4. generate_logrotate_configs.sh - Génère les configurations Logrotate" echo " 5. generate_nginx_configs.sh - Génère les configurations Nginx" echo "" echo -e "${CYAN}Utilisation:${NC}" echo " ./generate.sh [options]" echo "" echo -e "${CYAN}Options:${NC}" echo " -h, --help Affiche cette aide" echo "" echo -e "${CYAN}Variables d'environnement:${NC}" echo " HOST Domaine principal (ex: dev4._4NKweb.com)" echo " SERVICES Tableau des services à configurer" echo "" echo -e "${CYAN}Exemple:${NC}" echo " # Charger les variables d'environnement" echo " source .env" echo " # Exécuter la génération" echo " ./generate.sh" echo "" echo -e "${CYAN}Fichiers requis:${NC}" echo " • .env - Variables d'environnement" echo " • generate_variables.sh - Script de génération des variables et docker-compose" echo " • generate_grafana_dashboards.sh - Script de génération Grafana" echo " • generate_promtail_config.sh - Script de génération Promtail" echo " • generate_logrotate_configs.sh - Script de génération Logrotate" echo " • generate_nginx_configs.sh - Script de génération Nginx" } # Fonction principale main() { # Gestion des arguments while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; *) print_error "Option inconnue: $1" echo "Utilisez -h ou --help pour voir l'aide" exit 1 ;; esac done # Affichage de l'en-tête print_header "🚀 GÉNÉRATEUR PRINCIPAL _4NK VAULT" echo -e "${BLUE}Orchestration des scripts de génération${NC}" echo -e "${BLUE}Hôte: ${HOST:-"non défini"}${NC}" echo -e "${BLUE}Timestamp: $(date)${NC}" # Vérification des prérequis check_prerequisites # ÉTAPE 1: Génération des variables et docker-compose print_step "1/3" "Génération des variables et docker-compose" if execute_script "generate_variables.sh" "./generate_variables.sh" "Génère .env.auto et docker-compose.yml.auto"; then print_success "Variables et docker-compose générés avec succès" print_info "Fichiers créés:" [ -f ".env.auto" ] && echo " • .env.auto" [ -f "docker-compose.yml.auto" ] && echo " • docker-compose.yml.auto" else print_error "Échec de la génération des variables et docker-compose" fi # ÉTAPE 2: Génération des dashboards Grafana print_step "2/5" "Génération des dashboards Grafana" if execute_script "generate_grafana_dashboards.sh" "./generate_grafana_dashboards.sh" "Génère les dashboards Grafana"; then print_success "Dashboards Grafana générés avec succès" print_info "Fichiers créés:" [ -d "_4NK_modules/grafana/dashboards" ] && echo " • _4NK_modules/grafana/dashboards/ (dashboards)" else print_error "Échec de la génération des dashboards Grafana" fi # ÉTAPE 3: Génération de la configuration Promtail print_step "3/5" "Génération de la configuration Promtail" if execute_script "generate_promtail_config.sh" "./generate_promtail_config.sh" "Génère la configuration Promtail"; then print_success "Configuration Promtail générée avec succès" print_info "Fichiers créés:" [ -f "_4NK_modules/promtail/promtail.yml" ] && echo " • _4NK_modules/promtail/promtail.yml" else print_error "Échec de la génération de la configuration Promtail" fi # ÉTAPE 4: Génération des configurations Logrotate print_step "4/5" "Génération des configurations Logrotate" if execute_script "generate_logrotate_configs.sh" "./generate_logrotate_configs.sh" "Génère les configurations Logrotate"; then print_success "Configurations Logrotate générées avec succès" print_info "Fichiers créés:" [ -d "logrotade" ] && echo " • logrotade/ (configurations logrotate)" else print_error "Échec de la génération des configurations Logrotate" fi # ÉTAPE 5: Génération des configurations Nginx print_step "5/5" "Génération des configurations Nginx" if execute_script "generate_nginx_configs.sh" "./generate_nginx_configs.sh" "Génère toutes les configurations Nginx (upstreams, internes, HTTPS)"; then print_success "Configurations Nginx générées avec succès" print_info "Fichiers créés:" [ -f "nginx/upstreams.conf" ] && echo " • nginx/upstreams.conf" [ -f "nginx/app-internal-ports.conf" ] && echo " • nginx/app-internal-ports.conf" [ -d "nginx/https-configs" ] && echo " • nginx/https-configs/ (configurations HTTPS)" [ -f "nginx/nginx_${HOST:-dev4._4NKweb.com}-https.conf" ] && echo " • nginx/nginx_${HOST:-dev4._4NKweb.com}-https.conf" [ -f "nginx/proxy_headers.conf" ] && echo " • nginx/proxy_headers.conf" else print_error "Échec de la génération des configurations Nginx" fi # Affichage du résumé final show_summary # Code de sortie basé sur le succès if [ $SCRIPTS_FAILED -eq 0 ]; then exit 0 else exit 1 fi } # Exécution du script principal main "$@"