
- 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.
314 lines
7.9 KiB
Bash
Executable File
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 "$@"
|