4NK_IA_back/start_notary_system.sh
ncantu 447357d41a feat: Implémentation complète du système notarial 4NK avec IA
- API FastAPI complète pour le traitement de documents notariaux
- Pipeline OCR avec correction lexicale notariale
- Classification automatique des documents (règles + LLM)
- Extraction d'entités (identités, adresses, biens, montants)
- Intégration de 6 APIs externes (Cadastre, Géorisques, BODACC, etc.)
- Système de vérification et score de vraisemblance
- Analyse contextuelle via LLM (Ollama)
- Interface web moderne avec drag & drop
- Tests complets et documentation exhaustive
- Scripts de déploiement automatisés

Types de documents supportés:
- Acte de vente, donation, succession
- CNI avec détection du pays
- Contrats divers

Fonctionnalités:
- Upload et traitement asynchrone
- Vérifications externes automatiques
- Score de vraisemblance (0-1)
- Recommandations personnalisées
- Tableaux de bord et statistiques

Prêt pour la production avec démarrage en une commande.
2025-09-09 03:48:56 +02:00

314 lines
7.9 KiB
Bash
Executable File

#!/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 "$@"