
Séparation des scripts de génération et amélioration de l'architecture - Séparé generate_grafana_dashboards.sh en 3 scripts distincts : * generate_grafana_dashboards.sh (dashboards uniquement) * generate_promtail_config.sh (configuration Promtail) * generate_logrotate_configs.sh (configurations Logrotate) - Supprimé generate_docker_compose.sh et generate_docker_variables.sh - Centralisé la génération des variables dans generate_variables.sh - Mis à jour generate.sh pour une architecture en 5 étapes - Corrigé les chemins de sortie et les références de variables - Ajouté la gestion d'erreurs pour les fichiers .env problématiques - Généré toutes les configurations Nginx, Grafana, Promtail et Logrotate - Amélioré la modularité et la maintenabilité du code
320 lines
12 KiB
Bash
Executable File
320 lines
12 KiB
Bash
Executable File
#!/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 "$@"
|