#!/bin/bash # Script de gestion principal pour 4NK_IA_back set -euo pipefail # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonction d'affichage des messages log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Fonction d'aide show_help() { cat << EOF 🔧 Gestionnaire 4NK_IA_back Usage: $0 [options] COMMANDES PRINCIPALES: up [profile] DĂ©marrer les services (production|development|test) down ArrĂȘter tous les services restart [profile] RedĂ©marrer les services status Afficher le statut des services logs [service] Afficher les logs des services shell [service] Ouvrir un shell dans un conteneur clean Nettoyer les conteneurs et volumes setup-dns Configurer dnsmasq pour les noms .local PROFILS DISPONIBLES: production Services de production (dĂ©faut) development Services de dĂ©veloppement avec volumes montĂ©s test Services de test isolĂ©s EXEMPLES: $0 up # DĂ©marrer en production $0 up development # DĂ©marrer en dĂ©veloppement $0 logs api # Voir les logs de l'API $0 shell postgres # Ouvrir un shell PostgreSQL $0 clean # Nettoyer tout EOF } # Fonction pour dĂ©marrer les services start_services() { local profile=${1:-production} log_info "DĂ©marrage des services avec le profil: $profile" case $profile in production|development|test) docker-compose --profile "$profile" up -d ;; *) log_error "Profil invalide: $profile. Utilisez: production, development, ou test" exit 1 ;; esac log_success "Services dĂ©marrĂ©s avec le profil: $profile" log_info "VĂ©rification du statut..." docker-compose ps } # Fonction pour arrĂȘter les services stop_services() { log_info "ArrĂȘt des services..." docker-compose down log_success "Services arrĂȘtĂ©s" } # Fonction pour redĂ©marrer les services restart_services() { local profile=${1:-production} log_info "RedĂ©marrage des services avec le profil: $profile" stop_services start_services "$profile" } # Fonction pour afficher le statut show_status() { log_info "Statut des services:" docker-compose ps echo "" log_info "RĂ©seaux Docker:" docker network ls | grep 4nk_ia echo "" log_info "Volumes Docker:" docker volume ls | grep 4nk_ia } # Fonction pour afficher les logs show_logs() { local service=${1:-} if [[ -n "$service" ]]; then log_info "Logs du service: $service" docker-compose logs -f "$service" else log_info "Logs de tous les services:" docker-compose logs -f fi } # Fonction pour ouvrir un shell open_shell() { local service=${1:-host-api} log_info "Ouverture d'un shell dans le service: $service" docker-compose exec "$service" /bin/bash } # Fonction de nettoyage clean_all() { log_warning "Cette action va supprimer tous les conteneurs, rĂ©seaux et volumes 4NK_IA_back" read -p "Êtes-vous sĂ»r ? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then log_info "Nettoyage en cours..." docker-compose down -v --remove-orphans docker system prune -f log_success "Nettoyage terminĂ©" else log_info "Nettoyage annulĂ©" fi } # Fonction pour configurer dnsmasq setup_dns() { log_info "Configuration de dnsmasq pour les noms .local" if [[ -f "./infra/setup-dnsmasq.sh" ]]; then sudo ./infra/setup-dnsmasq.sh else log_error "Script setup-dnsmasq.sh non trouvĂ©" exit 1 fi } # Fonction pour tester l'API test_api() { log_info "Test de l'API..." # Attendre que l'API soit prĂȘte log_info "Attente du dĂ©marrage de l'API..." sleep 10 # Test de santĂ© if curl -s http://localhost:8001/api/health > /dev/null; then log_success "API accessible sur http://localhost:8001" curl -s http://localhost:8001/api/health | jq . else log_error "API non accessible" return 1 fi } # Gestion des arguments case "${1:-help}" in up) start_services "${2:-production}" ;; down) stop_services ;; restart) restart_services "${2:-production}" ;; status) show_status ;; logs) show_logs "${2:-}" ;; shell) open_shell "${2:-host-api}" ;; clean) clean_all ;; setup-dns) setup_dns ;; test) test_api ;; help|--help|-h) show_help ;; *) log_error "Commande inconnue: $1" echo "" show_help exit 1 ;; esac