4NK_IA_back/ops/bootstrap.sh
Nicolas Cantu 5ad559a263 feat: Intégration Celery et amélioration infrastructure
- Ajout de l'intégration Celery pour les tâches asynchrones
- Création des tâches spécialisées (OCR, classification, extraction, indexation, vérification)
- Configuration des queues Celery avec Redis
- Création du fichier d'environnement complet (.env.example et .env)
- Script bootstrap automatisé pour l'initialisation
- Amélioration du worker avec orchestration des pipelines
- Ajout des dépendances Celery et Kombu

Fonctionnalités ajoutées:
- Pipeline de traitement asynchrone avec Celery
- Tâches de traitement en lot
- Monitoring et health checks
- Configuration d'environnement centralisée
- Script d'initialisation automatisé
2025-09-10 18:26:53 +02:00

242 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Script de bootstrap pour l'infrastructure Notariat Pipeline
# Ce script initialise tous les services nécessaires
echo "🚀 Démarrage du bootstrap Notariat Pipeline..."
# Vérification des prérequis
check_prerequisites() {
echo "📋 Vérification des prérequis..."
if ! command -v docker &> /dev/null; then
echo "❌ Docker n'est pas installé. Veuillez installer Docker d'abord."
exit 1
fi
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
echo "❌ Docker Compose n'est pas installé. Veuillez installer Docker Compose d'abord."
exit 1
fi
echo "✅ Prérequis vérifiés"
}
# Configuration de l'environnement
setup_environment() {
echo "⚙️ Configuration de l'environnement..."
cd "$(dirname "$0")/../infra"
# Copie du fichier d'environnement s'il n'existe pas
if [ ! -f .env ]; then
if [ -f .env.example ]; then
cp .env.example .env
echo "📝 Fichier .env créé à partir de .env.example"
echo "⚠️ Veuillez modifier le fichier .env avec vos valeurs de production"
else
echo "❌ Fichier .env.example non trouvé"
exit 1
fi
else
echo "✅ Fichier .env existe déjà"
fi
}
# Téléchargement des images Docker
pull_images() {
echo "📥 Téléchargement des images Docker..."
# Téléchargement des images principales
docker compose pull postgres redis minio neo4j opensearch ollama prometheus grafana
# Téléchargement de l'image AnythingLLM
docker pull mintplexlabs/anythingllm:latest
echo "✅ Images téléchargées"
}
# Démarrage des services de base
start_base_services() {
echo "🏗️ Démarrage des services de base..."
# Démarrage des services essentiels
docker compose up -d postgres redis minio opensearch neo4j ollama
echo "⏳ Attente du démarrage des services (30 secondes)..."
sleep 30
echo "✅ Services de base démarrés"
}
# Configuration de MinIO
setup_minio() {
echo "🗄️ Configuration de MinIO..."
# Attendre que MinIO soit prêt
echo "⏳ Attente de MinIO..."
sleep 10
# Installation de mc (MinIO Client) si nécessaire
if ! command -v mc &> /dev/null; then
echo "📦 Installation de MinIO Client..."
if command -v apt-get &> /dev/null; then
# Debian/Ubuntu
wget -O /tmp/mc https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x /tmp/mc
sudo mv /tmp/mc /usr/local/bin/
elif command -v yum &> /dev/null; then
# CentOS/RHEL
wget -O /tmp/mc https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x /tmp/mc
sudo mv /tmp/mc /usr/local/bin/
else
echo "⚠️ Impossible d'installer mc automatiquement. Veuillez l'installer manuellement."
fi
fi
# Configuration de l'alias MinIO
if command -v mc &> /dev/null; then
mc alias set local http://127.0.0.1:9000 minio minio_pwd || true
mc mb -p local/ingest || true
echo "✅ Bucket MinIO 'ingest' créé"
else
echo "⚠️ mc non disponible, création manuelle du bucket nécessaire"
fi
}
# Configuration d'Ollama
setup_ollama() {
echo "🤖 Configuration d'Ollama..."
# Attendre qu'Ollama soit prêt
echo "⏳ Attente d'Ollama..."
sleep 15
# Téléchargement des modèles
echo "📥 Téléchargement du modèle llama3:8b..."
curl -s http://127.0.0.1:11434/api/pull -d '{"name":"llama3:8b"}' || echo "⚠️ Erreur lors du téléchargement de llama3:8b"
echo "📥 Téléchargement du modèle mistral:7b..."
curl -s http://127.0.0.1:11434/api/pull -d '{"name":"mistral:7b"}' || echo "⚠️ Erreur lors du téléchargement de mistral:7b"
echo "✅ Modèles Ollama configurés"
}
# Démarrage des services applicatifs
start_application_services() {
echo "🚀 Démarrage des services applicatifs..."
# Démarrage d'AnythingLLM
docker compose up -d anythingsqlite
# Attendre qu'AnythingLLM soit prêt
echo "⏳ Attente d'AnythingLLM..."
sleep 20
# Démarrage de l'API et des workers
docker compose up -d host-api worker
# Démarrage des services de monitoring
docker compose up -d prometheus grafana
echo "✅ Services applicatifs démarrés"
}
# Configuration des workspaces AnythingLLM
setup_anythingllm_workspaces() {
echo "🏢 Configuration des workspaces AnythingLLM..."
# Attendre qu'AnythingLLM soit complètement prêt
sleep 30
# Création des workspaces
echo "📁 Création du workspace 'workspace_normes'..."
curl -s -X POST "http://127.0.0.1:3001/api/workspaces" \
-H "Content-Type: application/json" \
-d '{"name":"workspace_normes"}' || echo "⚠️ Erreur lors de la création du workspace normes"
echo "📁 Création du workspace 'workspace_trames'..."
curl -s -X POST "http://127.0.0.1:3001/api/workspaces" \
-H "Content-Type: application/json" \
-d '{"name":"workspace_trames"}' || echo "⚠️ Erreur lors de la création du workspace trames"
echo "📁 Création du workspace 'workspace_actes'..."
curl -s -X POST "http://127.0.0.1:3001/api/workspaces" \
-H "Content-Type: application/json" \
-d '{"name":"workspace_actes"}' || echo "⚠️ Erreur lors de la création du workspace actes"
echo "✅ Workspaces AnythingLLM configurés"
}
# Vérification finale
final_check() {
echo "🔍 Vérification finale des services..."
# Vérification de l'API
if curl -s http://127.0.0.1:8000/api/health > /dev/null; then
echo "✅ API accessible sur http://127.0.0.1:8000"
else
echo "⚠️ API non accessible"
fi
# Vérification d'AnythingLLM
if curl -s http://127.0.0.1:3001 > /dev/null; then
echo "✅ AnythingLLM accessible sur http://127.0.0.1:3001"
else
echo "⚠️ AnythingLLM non accessible"
fi
# Vérification de Grafana
if curl -s http://127.0.0.1:3000 > /dev/null; then
echo "✅ Grafana accessible sur http://127.0.0.1:3000"
else
echo "⚠️ Grafana non accessible"
fi
# Affichage du statut des conteneurs
echo "📊 Statut des conteneurs:"
docker compose ps
}
# Fonction principale
main() {
echo "🎯 Bootstrap Notariat Pipeline v1.1.0"
echo "======================================"
check_prerequisites
setup_environment
pull_images
start_base_services
setup_minio
setup_ollama
start_application_services
setup_anythingllm_workspaces
final_check
echo ""
echo "🎉 Bootstrap terminé avec succès!"
echo ""
echo "📋 Services disponibles:"
echo " • API Notariale: http://localhost:8000"
echo " • Documentation API: http://localhost:8000/docs"
echo " • AnythingLLM: http://localhost:3001"
echo " • Grafana: http://localhost:3000"
echo " • MinIO Console: http://localhost:9001"
echo " • Ollama: http://localhost:11434"
echo ""
echo "🔧 Commandes utiles:"
echo " • Voir les logs: docker compose logs -f"
echo " • Arrêter: docker compose down"
echo " • Redémarrer: docker compose restart"
echo ""
echo "⚠️ N'oubliez pas de:"
echo " • Modifier les mots de passe dans infra/.env"
echo " • Configurer les certificats TLS pour la production"
echo " • Importer les données initiales (trames, normes)"
}
# Exécution du script
main "$@"