#!/bin/bash echo "🚀 DĂ©marrage du SystĂšme Notarial 4NK" echo "======================================" echo # 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 pour afficher les messages colorĂ©s print_status() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # VĂ©rification des prĂ©requis check_prerequisites() { print_status "VĂ©rification des prĂ©requis..." # Python if ! command -v python3 &> /dev/null; then print_error "Python 3 n'est pas installĂ©" exit 1 fi # Docker if ! command -v docker &> /dev/null; then print_error "Docker n'est pas installĂ©" exit 1 fi # Docker Compose if ! command -v docker-compose &> /dev/null; then print_error "Docker Compose n'est pas installĂ©" exit 1 fi # Tesseract if ! command -v tesseract &> /dev/null; then print_warning "Tesseract OCR n'est pas installĂ©" print_status "Installation de Tesseract..." sudo apt-get update sudo apt-get install -y tesseract-ocr tesseract-ocr-fra fi print_success "PrĂ©requis vĂ©rifiĂ©s" } # Configuration de l'environnement setup_environment() { print_status "Configuration de l'environnement..." # CrĂ©ation de l'environnement virtuel si nĂ©cessaire if [ ! -d "venv" ]; then print_status "CrĂ©ation de l'environnement virtuel Python..." python3 -m venv venv fi # Activation de l'environnement virtuel source venv/bin/activate # Installation des dĂ©pendances Python print_status "Installation des dĂ©pendances Python..." pip install --upgrade pip pip install -r docker/host-api/requirements.txt # Configuration des variables d'environnement if [ ! -f "infra/.env" ]; then print_status "CrĂ©ation du fichier de configuration..." cp infra/.env.example infra/.env print_warning "Veuillez Ă©diter infra/.env avec vos paramĂštres" fi print_success "Environnement configurĂ©" } # DĂ©marrage des services Docker start_docker_services() { print_status "DĂ©marrage des services Docker..." cd infra # Pull des images print_status "TĂ©lĂ©chargement des images Docker..." docker-compose pull # DĂ©marrage des services de base print_status "DĂ©marrage des services de base..." docker-compose up -d postgres redis minio ollama anythingsqlite # Attente que les services soient prĂȘts print_status "Attente que les services soient prĂȘts..." sleep 10 # VĂ©rification des services print_status "VĂ©rification des services..." # PostgreSQL if docker-compose exec -T postgres pg_isready -U notariat &> /dev/null; then print_success "PostgreSQL est prĂȘt" else print_error "PostgreSQL n'est pas accessible" fi # Redis if docker-compose exec -T redis redis-cli ping &> /dev/null; then print_success "Redis est prĂȘt" else print_error "Redis n'est pas accessible" fi # MinIO if curl -s http://localhost:9000/minio/health/live &> /dev/null; then print_success "MinIO est prĂȘt" else print_warning "MinIO n'est pas accessible (normal si pas encore dĂ©marrĂ©)" fi # Ollama if curl -s http://localhost:11434/api/tags &> /dev/null; then print_success "Ollama est prĂȘt" else print_warning "Ollama n'est pas accessible" fi cd .. } # Configuration d'Ollama setup_ollama() { print_status "Configuration d'Ollama..." # Attente qu'Ollama soit prĂȘt sleep 5 # TĂ©lĂ©chargement des modĂšles print_status "TĂ©lĂ©chargement des modĂšles LLM..." # Llama 3 8B print_status "TĂ©lĂ©chargement de Llama 3 8B..." curl -s http://localhost:11434/api/pull -d '{"name":"llama3:8b"}' & # Mistral 7B print_status "TĂ©lĂ©chargement de Mistral 7B..." curl -s http://localhost:11434/api/pull -d '{"name":"mistral:7b"}' & print_warning "Les modĂšles LLM sont en cours de tĂ©lĂ©chargement en arriĂšre-plan" print_warning "Cela peut prendre plusieurs minutes selon votre connexion" } # DĂ©marrage de l'API start_api() { print_status "DĂ©marrage de l'API Notariale..." cd services/host_api # DĂ©marrage en arriĂšre-plan nohup uvicorn app:app --host 0.0.0.0 --port 8000 --reload > ../../logs/api.log 2>&1 & API_PID=$! echo $API_PID > ../../logs/api.pid # Attente que l'API soit prĂȘte print_status "Attente que l'API soit prĂȘte..." sleep 5 # Test de l'API if curl -s http://localhost:8000/api/health &> /dev/null; then print_success "API Notariale dĂ©marrĂ©e sur http://localhost:8000" else print_error "L'API n'est pas accessible" fi cd ../.. } # DĂ©marrage de l'interface web start_web_interface() { print_status "DĂ©marrage de l'interface web..." cd services/web_interface # DĂ©marrage en arriĂšre-plan nohup python start_web.py 8080 > ../../logs/web.log 2>&1 & WEB_PID=$! echo $WEB_PID > ../../logs/web.pid # Attente que l'interface soit prĂȘte sleep 3 if curl -s http://localhost:8080 &> /dev/null; then print_success "Interface web dĂ©marrĂ©e sur http://localhost:8080" else print_error "L'interface web n'est pas accessible" fi cd ../.. } # CrĂ©ation des rĂ©pertoires de logs create_log_directories() { print_status "CrĂ©ation des rĂ©pertoires de logs..." mkdir -p logs print_success "RĂ©pertoires de logs créés" } # Affichage du statut final show_final_status() { echo echo "🎉 SystĂšme Notarial 4NK dĂ©marrĂ© avec succĂšs!" echo "=============================================" echo echo "📊 Services disponibles:" echo " ‱ API Notariale: http://localhost:8000" echo " ‱ Interface Web: http://localhost:8080" echo " ‱ Documentation API: http://localhost:8000/docs" echo " ‱ MinIO Console: http://localhost:9001" echo " ‱ Ollama: http://localhost:11434" echo echo "📁 Fichiers de logs:" echo " ‱ API: logs/api.log" echo " ‱ Interface Web: logs/web.log" echo echo "🔧 Commandes utiles:" echo " ‱ ArrĂȘter le systĂšme: ./stop_notary_system.sh" echo " ‱ Voir les logs: tail -f logs/api.log" echo " ‱ RedĂ©marrer l'API: kill \$(cat logs/api.pid) && ./start_notary_system.sh" echo echo "📖 Documentation: docs/API-NOTARIALE.md" echo } # Fonction principale main() { echo "DĂ©marrage du systĂšme Ă  $(date)" echo # VĂ©rification des prĂ©requis check_prerequisites # Configuration de l'environnement setup_environment # CrĂ©ation des rĂ©pertoires create_log_directories # DĂ©marrage des services Docker start_docker_services # Configuration d'Ollama setup_ollama # DĂ©marrage de l'API start_api # DĂ©marrage de l'interface web start_web_interface # Affichage du statut final show_final_status } # Gestion des signaux cleanup() { echo print_warning "ArrĂȘt du systĂšme..." # ArrĂȘt de l'API if [ -f "logs/api.pid" ]; then API_PID=$(cat logs/api.pid) if kill -0 $API_PID 2>/dev/null; then kill $API_PID print_status "API arrĂȘtĂ©e" fi fi # ArrĂȘt de l'interface web if [ -f "logs/web.pid" ]; then WEB_PID=$(cat logs/web.pid) if kill -0 $WEB_PID 2>/dev/null; then kill $WEB_PID print_status "Interface web arrĂȘtĂ©e" fi fi # ArrĂȘt des services Docker cd infra docker-compose down cd .. print_success "SystĂšme arrĂȘtĂ©" exit 0 } # Capture des signaux d'arrĂȘt trap cleanup SIGINT SIGTERM # ExĂ©cution du script principal main "$@"