#!/bin/bash # Script de démarrage amélioré pour lecoffre_node # Utilise les healthchecks du docker-compose.yml pour une séquence optimisée set -e echo "🚀 Démarrage de lecoffre_node avec séquence optimisée" # Fonction pour attendre qu'un service soit prêt wait_for_service() { local service_name=$1 local health_url=$2 local timeout=${3:-300} echo "⏳ Attente de $service_name..." local start_time=$(date +%s) while [ $(($(date +%s) - start_time)) -lt $timeout ]; do if curl -f -s "$health_url" > /dev/null 2>&1; then echo "✅ $service_name est prêt" return 0 fi sleep 5 done echo "❌ Timeout: $service_name n'est pas prêt après ${timeout}s" return 1 } # Fonction pour vérifier l'état du scan check_scan_status() { local sdk_relay_url="http://127.0.0.1:8091" echo "🔍 Vérification de l'état du scan..." local response=$(curl -s "$sdk_relay_url" 2>/dev/null || echo "{}") local scan_complete=$(echo "$response" | grep -o '"scan_complete":[^,]*' | cut -d: -f2 | tr -d ' "') if [ "$scan_complete" = "true" ]; then echo "✅ Scan terminé avec succès" return 0 elif [ "$scan_complete" = "false" ]; then echo "⚠️ Scan en cours, mais service disponible" return 0 else echo "❓ État du scan inconnu" return 1 fi } # Démarrage simplifié utilisant les healthchecks du docker-compose.yml echo "📦 Démarrage de tous les services avec healthchecks..." docker compose up -d echo "⏳ Attente que tous les services soient prêts (utilise les healthchecks)..." echo " - sdk_relay: 60s start_period + healthcheck" echo " - ihm_client: 30s start_period + healthcheck" echo " - lecoffre-back: 30s start_period + healthcheck" echo " - lecoffre-front: 30s start_period + healthcheck" # Attendre que tous les services soient healthy echo "🔍 Vérification de l'état des services..." sleep 10 # Vérifier l'état du scan de sdk_relay check_scan_status # Étape 5: Vérification finale echo "🔍 Vérification finale de tous les services..." services=( "tor:9050" "bitcoin:8332" "blindbit:8000" "sdk_storage:8081" "sdk_relay:8091" "sdk_signer:8092" "ihm_client:3003" "lecoffre-back:8080" "lecoffre-front:3004" ) all_ready=true for service in "${services[@]}"; do name=$(echo $service | cut -d: -f1) port=$(echo $service | cut -d: -f2) if curl -f -s "http://127.0.0.1:$port" > /dev/null 2>&1; then echo "✅ $name est accessible" else echo "❌ $name n'est pas accessible" all_ready=false fi done if [ "$all_ready" = true ]; then echo "🎉 Tous les services sont prêts !" echo "📊 État des services:" docker compose ps else echo "⚠️ Certains services ne sont pas prêts" echo "📋 Logs des services problématiques:" docker compose logs --tail=20 exit 1 fi # Étape 6: Monitoring continu (optionnel) if [ "$1" = "--monitor" ]; then echo "📊 Démarrage du monitoring continu..." while true; do sleep 60 echo "🔄 Vérification périodique..." check_scan_status done fi