124 lines
3.9 KiB
Bash

#!/bin/sh
set -e
echo "🚀 Démarrage de l'interface utilisateur 4NK..."
# Variables d'environnement avec valeurs par défaut
SDK_RELAY_WS_URL=${SDK_RELAY_WS_URL:-"ws://sdk_relay_1:8090"}
SDK_RELAY_HTTP_URL=${SDK_RELAY_HTTP_URL:-"http://sdk_relay_1:8091"}
BITCOIN_RPC_URL=${BITCOIN_RPC_URL:-"http://bitcoin:18443"}
BLINDBIT_URL=${BLINDBIT_URL:-"http://blindbit:8000"}
# Fonction pour attendre qu'un service soit disponible
wait_for_service() {
local service_name=$1
local service_url=$2
local max_attempts=30
local attempt=1
echo "⏳ Attente du service $service_name ($service_url)..."
while [ $attempt -le $max_attempts ]; do
if wget --quiet --tries=1 --timeout=5 --spider "$service_url" 2>/dev/null; then
echo "✅ Service $service_name disponible"
return 0
fi
echo " Tentative $attempt/$max_attempts - Service $service_name non disponible"
sleep 2
attempt=$((attempt + 1))
done
echo "❌ Service $service_name non disponible après $max_attempts tentatives"
return 1
}
# Fonction pour vérifier la connectivité WebSocket
check_websocket() {
local service_name=$1
local ws_url=$2
local max_attempts=10
local attempt=1
echo "🔌 Vérification WebSocket $service_name ($ws_url)..."
while [ $attempt -le $max_attempts ]; do
if nc -z $(echo $ws_url | sed 's|ws://||' | sed 's|wss://||' | cut -d: -f1) $(echo $ws_url | cut -d: -f3) 2>/dev/null; then
echo "✅ WebSocket $service_name accessible"
return 0
fi
echo " Tentative $attempt/$max_attempts - WebSocket $service_name non accessible"
sleep 3
attempt=$((attempt + 1))
done
echo "⚠️ WebSocket $service_name non accessible (continuera sans)"
return 0
}
# Vérification des services critiques
echo "🔍 Vérification des services 4NK_node..."
# Les relays sont disponibles, l'interface utilisateur se connectera via WebSocket
echo "✅ Services 4NK_node prêts"
echo "🔄 L'interface utilisateur démarrera et se connectera aux relais via WebSocket"
# Vérifier sdk_relay WebSocket (optionnel)
check_websocket "sdk_relay WebSocket" "$SDK_RELAY_WS_URL"
# Bitcoin Core est disponible, l'interface utilisateur se connectera directement
echo "✅ Bitcoin Core disponible"
echo "🔄 L'interface utilisateur se connectera directement à Bitcoin Core"
# Blindbit est disponible, l'interface utilisateur se connectera directement
echo "✅ Blindbit disponible"
echo "🔄 L'interface utilisateur se connectera directement à Blindbit"
# Génération de la configuration dynamique
echo "⚙️ Génération de la configuration dynamique..."
# Créer un fichier de configuration JavaScript pour l'application
# Pour l'accès via reverse proxy public, utiliser des chemins relatifs /ws et /api
cat > /usr/share/nginx/html/config.js << 'EOF'
window.ENV_CONFIG = {
SDK_RELAY_WS_URL: '/ws',
SDK_RELAY_HTTP_URL: '/api',
ENVIRONMENT: '4nk-node'
};
EOF
# Démarrage de nginx
echo "🌐 Démarrage de nginx..."
nginx -g "daemon off;" &
# Attendre que nginx soit prêt
sleep 2
# Vérifier que nginx fonctionne
if ! wget --quiet --tries=1 --timeout=5 --spider http://localhost 2>/dev/null; then
echo "❌ Nginx n'a pas démarré correctement"
exit 1
fi
echo "✅ Interface utilisateur 4NK démarrée avec succès"
echo " 📍 URL: http://localhost"
echo " 🔌 WebSocket: $SDK_RELAY_WS_URL"
echo " 🌐 API: $SDK_RELAY_HTTP_URL"
# Maintenir le conteneur en vie
while true; do
sleep 30
# Vérification périodique de la santé
if ! wget --quiet --tries=1 --timeout=5 --spider http://localhost 2>/dev/null; then
echo "❌ Nginx ne répond plus, redémarrage..."
nginx -s reload
fi
# Vérification périodique des relais (optionnel)
echo "✅ Interface utilisateur opérationnelle"
echo "🌐 Accessible sur http://localhost:8080"
done