Some checks failed
publish-images / docker-build-and-push (push) Failing after 23s
219 lines
5.0 KiB
Bash
Executable File
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
|
|
|