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