4NK_IA_back/manage.sh
Nicolas Cantu f50481cc38
Some checks failed
publish-images / docker-build-and-push (push) Failing after 23s
chore(ci): ajout workflow publish + nettoyage services + conf hosts
2025-09-11 16:49:23 +02:00

219 lines
5.0 KiB
Bash
Executable File

#!/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 <command> [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