#!/bin/bash # Script de maintenance LeCoffre Node # Nettoyage, optimisation et vérifications de santé set -e # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Fonction pour afficher un message avec timestamp print_message() { echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1" } # Fonction pour afficher le menu show_menu() { echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} LeCoffre Node - Maintenance Menu${NC}" echo -e "${BLUE}========================================${NC}" echo echo -e "${CYAN}1.${NC} Validation complète du déploiement" echo -e "${CYAN}2.${NC} Sauvegarde des données" echo -e "${CYAN}3.${NC} Nettoyage des logs anciens" echo -e "${CYAN}4.${NC} Nettoyage des images Docker inutilisées" echo -e "${CYAN}5.${NC} Vérification de l'espace disque" echo -e "${CYAN}6.${NC} Redémarrage des services" echo -e "${CYAN}7.${NC} Mise à jour des images" echo -e "${CYAN}8.${NC} Collecte des logs" echo -e "${CYAN}9.${NC} Vérification de la santé des services" echo -e "${CYAN}0.${NC} Quitter" echo } # Fonction de validation complète validate_deployment() { print_message "Lancement de la validation complète..." ./scripts/validate-deployment.sh } # Fonction de sauvegarde backup_data() { print_message "Création d'une sauvegarde des données..." ./scripts/backup-data.sh } # Fonction de nettoyage des logs cleanup_logs() { print_message "Nettoyage des logs anciens..." # Supprimer les logs de plus de 30 jours find ./logs -name "*.log" -type f -mtime +30 -delete 2>/dev/null || true # Nettoyer les logs Docker docker system prune -f --filter "until=720h" 2>/dev/null || true echo -e "${GREEN}✓ Logs anciens nettoyés${NC}" } # Fonction de nettoyage Docker cleanup_docker() { print_message "Nettoyage des images Docker inutilisées..." # Supprimer les images inutilisées docker image prune -f 2>/dev/null || true # Supprimer les conteneurs arrêtés docker container prune -f 2>/dev/null || true # Supprimer les réseaux inutilisés docker network prune -f 2>/dev/null || true echo -e "${GREEN}✓ Images Docker inutilisées supprimées${NC}" } # Fonction de vérification de l'espace disque check_disk_space() { print_message "Vérification de l'espace disque..." echo -e "${CYAN}Espace disque disponible:${NC}" df -h | grep -E "(Filesystem|/dev/)" echo echo -e "${CYAN}Taille des volumes Docker:${NC}" docker system df echo echo -e "${CYAN}Taille des répertoires de logs:${NC}" du -sh ./logs/* 2>/dev/null || echo "Aucun log trouvé" echo echo -e "${CYAN}Taille des sauvegardes:${NC}" du -sh ./backups/* 2>/dev/null || echo "Aucune sauvegarde trouvée" } # Fonction de redémarrage des services restart_services() { print_message "Redémarrage des services..." echo -e "${YELLOW}Arrêt des services...${NC}" docker compose --env-file /home/debian/4NK_env/.env.master down echo -e "${YELLOW}Démarrage des services...${NC}" ./scripts/start.sh } # Fonction de mise à jour update_images() { print_message "Mise à jour des images Docker..." ./scripts/update-images.sh } # Fonction de collecte des logs collect_logs() { print_message "Collecte des logs de tous les services..." ./scripts/collect-logs.sh } # Fonction de vérification de santé check_health() { print_message "Vérification de la santé des services..." echo -e "${CYAN}Statut des conteneurs:${NC}" docker compose --env-file /home/debian/4NK_env/.env.master ps echo echo -e "${CYAN}Utilisation des ressources:${NC}" docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}" } # Boucle principale while true; do show_menu echo -n -e "${YELLOW}Choisissez une option (0-9): ${NC}" read -r choice case $choice in 1) validate_deployment ;; 2) backup_data ;; 3) cleanup_logs ;; 4) cleanup_docker ;; 5) check_disk_space ;; 6) restart_services ;; 7) update_images ;; 8) collect_logs ;; 9) check_health ;; 0) echo -e "${GREEN}Au revoir!${NC}" exit 0 ;; *) echo -e "${RED}Option invalide. Veuillez choisir entre 0 et 9.${NC}" ;; esac echo echo -e "${YELLOW}Appuyez sur Entrée pour continuer...${NC}" read -r clear done