lecoffre_node/scripts/startup-sequence.sh
Nicolas Cantu d403bd0a02 ci: docker_tag=ext - Améliorations de la séquence de démarrage
- Healthcheck amélioré pour sdk_relay (vérifie l'API de santé)
- Variables d'environnement pour le scan (SDK_RELAY_SCAN_TIMEOUT=300, SDK_RELAY_STARTUP_MODE=async)
- Dépendances et healthchecks pour tous les services
- Script de démarrage optimisé utilisant les healthchecks intégrés
- Suppression du blindbit-proxy inutile
- Documentation des améliorations
2025-09-20 09:17:02 +00:00

116 lines
3.2 KiB
Bash
Executable File

#!/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