#!/bin/bash # PTT Live - Script de démarrage unifié # Lance le serveur et le client en mode production set -e # Couleurs GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # Détection IP réseau get_network_ip() { if [[ "$OSTYPE" == "darwin"* ]]; then # macOS ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1 elif [[ "$OSTYPE" == "linux-gnu"* ]]; then # Linux hostname -I | awk '{print $1}' else echo "localhost" fi } NETWORK_IP=$(get_network_ip) echo -e "${BLUE}==================================" echo "🚀 PTT Live - Démarrage" echo "==================================${NC}" echo "" echo -e "${GREEN}📡 IP réseau détectée : ${NETWORK_IP}${NC}" echo "" # Vérifier que les dépendances sont installées if [ ! -d "server/node_modules" ]; then echo -e "${RED}❌ Dépendances serveur manquantes${NC}" echo " Exécutez d'abord : ./install/macos.sh (ou linux.sh)" exit 1 fi if [ ! -d "client/node_modules" ]; then echo -e "${RED}❌ Dépendances client manquantes${NC}" echo " Exécutez d'abord : ./install/macos.sh (ou linux.sh)" exit 1 fi # Créer fichier PID pour cleanup PID_FILE="/tmp/ptt-live.pid" # Fonction cleanup cleanup() { echo "" echo -e "${YELLOW}⏹ Arrêt PTT Live...${NC}" if [ -f "$PID_FILE" ]; then while read -r pid; do if ps -p "$pid" > /dev/null 2>&1; then kill "$pid" 2>/dev/null || true fi done < "$PID_FILE" rm -f "$PID_FILE" fi echo -e "${GREEN}✓ Arrêté${NC}" exit 0 } trap cleanup SIGINT SIGTERM EXIT # Afficher le QR code AVANT de lancer le serveur if [ "$1" == "--dev" ]; then ./show-qr.sh --dev else ./show-qr.sh fi # Démarrer le serveur (silencieux, logs dans fichier) echo -e "${BLUE}🔧 Démarrage serveur...${NC}" echo "" cd server # En mode production (pas --dev), activer HTTPS if [ "$1" != "--dev" ]; then export ENABLE_HTTPS=true fi # Lancer le serveur en background silencieux npm start > ../server.log 2>&1 & SERVER_PID=$! echo "$SERVER_PID" > "$PID_FILE" cd .. # Attendre que le serveur soit prêt echo "" echo -e "${YELLOW}⏳ Attente démarrage serveur...${NC}" # Déterminer le protocole selon le mode if [ "$1" != "--dev" ]; then HEALTH_URL="https://localhost:3000/health" else HEALTH_URL="http://localhost:3000/health" fi for i in {1..30}; do if curl -kssf "$HEALTH_URL" > /dev/null 2>&1; then echo -e "${GREEN}✓ Serveur prêt${NC}" break fi if [ $i -eq 30 ]; then echo -e "${RED}❌ Timeout : le serveur n'a pas démarré${NC}" echo " Consultez server.log pour plus de détails" exit 1 fi sleep 1 done echo "" # Build client si pas déjà fait ou mode dev if [ "$1" == "--dev" ]; then echo -e "${BLUE}🎨 Démarrage client (dev)...${NC}" cd client npm run dev & CLIENT_PID=$! echo "$CLIENT_PID" >> "$PID_FILE" cd .. echo -e "${GREEN}✓ Client dev démarré${NC}" echo "" echo -e "${GREEN}==================================" echo "✅ PTT Live démarré (mode dev)" echo "==================================${NC}" echo "" echo -e "${BLUE}🌐 ACCÈS CLIENT (HTTPS) :${NC}" echo -e "${GREEN} 👉 Local : https://localhost:5173${NC}" echo -e "${GREEN} 👉 Réseau : https://${NETWORK_IP}:5173${NC}" echo "" echo -e "${YELLOW}⚠️ Acceptez le certificat auto-signé dans votre navigateur${NC}" echo -e "${YELLOW} (Cliquez sur 'Avancé' puis 'Continuer')${NC}" echo "" echo "📊 API serveur (HTTP uniquement) : http://localhost:3000" echo "🎛️ Interface admin : https://localhost:5173/admin" echo "" echo "📝 Logs serveur : tail -f server.log" echo "" echo -e "${YELLOW}Appuyez sur Ctrl+C pour arrêter${NC}" echo "" # Attendre indéfiniment wait else # Mode production : build et serve echo -e "${BLUE}🎨 Build client production...${NC}" cd client if [ ! -d "dist" ] || [ "$1" == "--rebuild" ]; then npm run build echo -e "${GREEN}✓ Client buildé${NC}" else echo -e "${YELLOW}⚠️ Build existant utilisé (--rebuild pour forcer)${NC}" fi cd .. echo "" echo -e "${GREEN}==================================" echo "✅ PTT Live démarré (production)" echo "==================================${NC}" echo "" echo -e "${BLUE}🌐 ACCÈS CLIENT (HTTPS) :${NC}" echo -e "${GREEN} 👉 Local : https://localhost:3000${NC}" echo -e "${GREEN} 👉 Réseau : https://${NETWORK_IP}:3000${NC}" echo "" echo -e "${YELLOW}⚠️ Acceptez le certificat auto-signé dans votre navigateur${NC}" echo -e "${YELLOW} (Cliquez sur 'Avancé' puis 'Continuer')${NC}" echo "" echo "🎛️ Interface admin : https://localhost:3000/admin" echo "📊 API serveur : https://localhost:3000/api" echo "" echo "📝 Logs serveur : tail -f server.log" echo "" echo -e "${YELLOW}Appuyez sur Ctrl+C pour arrêter${NC}" echo "" # Attendre indéfiniment wait fi