Ctrl K
ComunidadGuías…

start-all.sh

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash

# Master Startup Script - Starts All Services with tmux
# Services: Redis (background), Celery Worker, Backend API, Frontend, Landing
# Layout: 4 panes

set -e

SESSION_NAME="rereflect"
PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"

echo "=========================================="
echo "  Customer Feedback Analyzer"
echo "  Starting All Services"
echo "=========================================="
echo ""

# Check if we're in the right directory
if [ ! -d "$PROJECT_ROOT/services/backend-api" ] || [ ! -d "$PROJECT_ROOT/services/frontend-web" ]; then
    echo "❌ Error: Please run this script from the project root directory"
    echo "Current directory: $(pwd)"
    exit 1
fi

# Check for tmux
if ! command -v tmux &> /dev/null; then
    echo "❌ tmux is not installed!"
    echo ""
    echo "Please install tmux:"
    echo "  Ubuntu/Debian: sudo apt install tmux"
    echo "  macOS: brew install tmux"
    echo ""
    exit 1
fi

# Check for Redis
if ! command -v redis-server &> /dev/null; then
    echo "❌ Redis is not installed!"
    echo ""
    echo "Please install Redis:"
    echo "  Ubuntu/Debian: sudo apt install redis-server"
    echo "  macOS: brew install redis"
    echo ""
    exit 1
fi

# Kill existing session if it exists
tmux kill-session -t $SESSION_NAME 2>/dev/null || true

# Start Redis in background if not already running
if ! redis-cli ping > /dev/null 2>&1; then
    echo "🔴 Starting Redis in background..."
    redis-server --daemonize yes
    sleep 1
    if redis-cli ping > /dev/null 2>&1; then
        echo "✅ Redis started"
    else
        echo "❌ Failed to start Redis"
        exit 1
    fi
else
    echo "✅ Redis already running"
fi

echo ""
echo "Starting services in tmux session: $SESSION_NAME"
echo ""

# Create new tmux session (top-left pane - Worker)
tmux new-session -d -s $SESSION_NAME -c "$PROJECT_ROOT/services/worker-service"
# Panes: {0=worker}

# Split horizontally: creates right pane (API)
tmux split-window -h -t $SESSION_NAME:0.0 -c "$PROJECT_ROOT/services/backend-api"
# Panes: {0=worker(left), 1=api(right)}

# Split left pane vertically: creates bottom-left (Landing)
tmux split-window -v -t $SESSION_NAME:0.0 -c "$PROJECT_ROOT/services/landing-web"
# Panes: {0=worker(top-left), 1=landing(bottom-left), 2=api(right)}
# NOTE: old pane 1 (api) shifted to pane 2

# Split right pane (now pane 2) vertically: creates bottom-right (Frontend)
tmux split-window -v -t $SESSION_NAME:0.2 -c "$PROJECT_ROOT/services/frontend-web"
# Panes: {0=worker(top-left), 1=landing(bottom-left), 2=api(top-right), 3=frontend(bottom-right)}

# Start Celery Worker in top-left pane (0)
tmux send-keys -t $SESSION_NAME:0.0 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.0 "echo '  ⚙️  CELERY WORKER + REDIS'" Enter
tmux send-keys -t $SESSION_NAME:0.0 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.0 "[ ! -d venv ] && python3 -m venv venv; source venv/bin/activate && python3 -m pip install -q -r requirements.txt && python3 -m celery -A src.celery_app worker --beat --loglevel=info" Enter

# Wait for worker to initialize
sleep 2

# Start Backend API in top-right pane (2)
tmux send-keys -t $SESSION_NAME:0.2 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.2 "echo '  🚀 BACKEND API (port 8000)'" Enter
tmux send-keys -t $SESSION_NAME:0.2 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.2 "[ ! -d venv ] && python3 -m venv venv; source venv/bin/activate && python3 -m pip install -q -r requirements.txt && python3 -m uvicorn src.api.main:app --host 0.0.0.0 --port 8000 --reload" Enter

# Start Landing Page in bottom-left pane (1)
tmux send-keys -t $SESSION_NAME:0.1 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.1 "echo '  🏠 LANDING PAGE (port 3001)'" Enter
tmux send-keys -t $SESSION_NAME:0.1 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.1 "pnpm install --silent && pnpm dev" Enter

# Start Frontend in bottom-right pane (3)
tmux send-keys -t $SESSION_NAME:0.3 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.3 "echo '  🌐 FRONTEND APP (port 3000)'" Enter
tmux send-keys -t $SESSION_NAME:0.3 "echo '═══════════════════════════════════════'" Enter
tmux send-keys -t $SESSION_NAME:0.3 "pnpm install --silent && pnpm dev" Enter

# Select the API pane as the active one
tmux select-pane -t $SESSION_NAME:0.2

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  ✅ All services starting in tmux session!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "  Layout:"
echo "  ┌─────────────────┬─────────────────┐"
echo "  │  ⚙️  Worker      │  🚀 API         │"
echo "  │  (Celery+Beat)  │  (port 8000)    │"
echo "  ├─────────────────┼─────────────────┤"
echo "  │  🏠 Landing     │  🌐 Frontend    │"
echo "  │  (port 3001)    │  (port 3000)    │"
echo "  └─────────────────┴─────────────────┘"
echo ""
echo "  Services:"
echo "    Redis:    localhost:6379 (background)"
echo "    API:      http://localhost:8000"
echo "    Docs:     http://localhost:8000/docs"
echo "    Landing:  http://localhost:3001"
echo "    Frontend: http://localhost:3000"
echo ""
echo "  tmux commands:"
echo "    Attach:      tmux attach -t $SESSION_NAME"
echo "    Switch pane: Ctrl+b then arrow keys"
echo "    Detach:      Ctrl+b then d"
echo "    Stop all:    ./stop-all.sh"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# Attach to tmux session
tmux attach -t $SESSION_NAME