start-app.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
# SPDX-License-Identifier: Apache-2.0
# Copyright 2024-present Scalytics, Inc. (https://www.scalytics.io)
BOLD="\033[1m"
RESET="\033[0m"
BLUE="\033[34m"
GREEN="\033[32m"
YELLOW="\033[33m"
RED="\033[31m"
PURPLE="\033[35m"
CYAN="\033[36m"
FRONTEND_DIR="frontend"
LOG_DIR="."
BACKEND_LOG="$LOG_DIR/backend.log"
FRONTEND_LOG="$LOG_DIR/frontend.log"
PYTHON_SERVICE_LOG="$LOG_DIR/python_service.log"
UVICORN_WORKER_ARGS=""
export PYTHON_DEEP_SEARCH_SCRAPE_CONCURRENCY=2
if [ "$1" == "--dev" ]; then
echo -e "${YELLOW}Development mode activated: Python service will run with 2 workers and scrape concurrency of 2.${RESET}"
UVICORN_WORKER_ARGS="--workers 2"
export PYTHON_DEEP_SEARCH_SCRAPE_CONCURRENCY=2
else
:
fi
check_directory() {
if [ ! -d "$1" ]; then
echo -e "${RED}Error: $1 directory not found${RESET}"
echo "Please make sure you run this script from the WMCP directory"
exit 1
fi
}
check_node_modules() {
if [ ! -d "$1/node_modules" ]; then
echo -e "${YELLOW}Warning: node_modules not found in $1. Running npm install...${RESET}"
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
npm install --prefix="$1"
fi
}
cleanup() {
echo -e "\n${YELLOW}Shutting down servers...${RESET}"
if [ -n "$BACKEND_PID" ]; then
echo -e "${BLUE}Stopping backend server (PID: $BACKEND_PID)${RESET}"
kill $BACKEND_PID 2>/dev/null
fi
if [ -n "$FRONTEND_PID" ]; then
echo -e "${GREEN}Stopping frontend server (PID: $FRONTEND_PID)${RESET}"
kill $FRONTEND_PID 2>/dev/null
fi
if [ -n "$PYTHON_SERVICE_PID" ]; then
echo -e "${CYAN}Stopping Python FastAPI service (PID: $PYTHON_SERVICE_PID)${RESET}"
kill $PYTHON_SERVICE_PID 2>/dev/null
fi
if [ -n "$LOG_MONITOR_PID" ]; then
kill $LOG_MONITOR_PID 2>/dev/null
fi
pkill -f "node.*$(pwd)" 2>/dev/null
echo -e "${BOLD}WMCP servers stopped${RESET}"
exit 0
}
trap cleanup SIGINT
echo -e "${YELLOW}Ensuring all previous server processes are stopped...${RESET}"
pkill -f "npm start --prefix=$(pwd)"
pkill -f "npm start --prefix=$FRONTEND_DIR"
pkill -f "uvicorn src.python_services.deep_search_service.main:app"
sleep 2
echo -e "${BOLD}=============================================================${RESET}"
echo -e "${BOLD} 🚀 Starting Scalytics Copilot Server${RESET}"
echo -e "${BOLD}=============================================================${RESET}"
echo
check_directory "$FRONTEND_DIR"
check_node_modules "."
check_node_modules "$FRONTEND_DIR"
echo -e "${CYAN}Using existing Tailwind CSS configuration...${RESET}"
echo "=== Backend Log $(date) ===" > $BACKEND_LOG
echo "=== Frontend Log $(date) ===" > $FRONTEND_LOG
echo "=== Python FastAPI Service Log $(date) ===" > $PYTHON_SERVICE_LOG
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
if command -v nvm &>/dev/null; then
nvm use 23.9.0 &>/dev/null || nvm use default &>/dev/null
fi
echo -e "${BLUE}Starting backend server...${RESET}"
npm start --prefix="$(pwd)" > $BACKEND_LOG 2>&1 &
BACKEND_PID=$!
sleep 3
if ! ps -p $BACKEND_PID > /dev/null; then
echo -e "${RED}Failed to start backend server. Check $BACKEND_LOG for details.${RESET}"
cat $BACKEND_LOG
exit 1
fi
echo -e "${BLUE}Backend server started (PID: $BACKEND_PID)${RESET}"
echo -e "${CYAN}Starting Python FastAPI service...${RESET}"
CERTIFI_PATH=$($(pwd)/venv/bin/python3 -m certifi)
SSL_CERT_FILE="$CERTIFI_PATH" $(pwd)/venv/bin/python3 -m uvicorn src.python_services.deep_search_service.main:app --host 0.0.0.0 --port 8001 --reload --log-level debug $UVICORN_WORKER_ARGS > $PYTHON_SERVICE_LOG 2>&1 &
PYTHON_SERVICE_PID=$!
sleep 15
if ! ps -p $PYTHON_SERVICE_PID > /dev/null; then
echo -e "${RED}Failed to start Python FastAPI service. Check $PYTHON_SERVICE_LOG for details.${RESET}"
cat $PYTHON_SERVICE_LOG
kill $BACKEND_PID
exit 1
fi
echo -e "${CYAN}Python FastAPI service started (PID: $PYTHON_SERVICE_PID)${RESET}"
echo -e "${GREEN}Starting frontend server in $FRONTEND_DIR...${RESET}"
npm start --prefix="$FRONTEND_DIR" > $FRONTEND_LOG 2>&1 &
FRONTEND_PID=$!
sleep 3
if ! ps -p $FRONTEND_PID > /dev/null; then
echo -e "${RED}Failed to start frontend server. Check $FRONTEND_LOG for details.${RESET}"
cat $FRONTEND_LOG
kill $BACKEND_PID
kill $PYTHON_SERVICE_PID
exit 1
fi
echo -e "${GREEN}Frontend server started (PID: $FRONTEND_PID)${RESET}"
echo -e "${BOLD}All three servers started successfully!${RESET}"
echo -e "${BLUE}Backend server running with PID: $BACKEND_PID${RESET}"
echo -e "${CYAN}Python FastAPI service running with PID: $PYTHON_SERVICE_PID (Port: 8001)${RESET}"
echo -e "${GREEN}Frontend server running with PID: $FRONTEND_PID${RESET}"
echo
echo -e "${BOLD}Access the application at:${RESET}"
echo -e " Frontend: ${GREEN}http://localhost:3001${RESET}"
echo -e " Backend API: ${BLUE}http://localhost:3000/api${RESET}"
echo
echo -e "${YELLOW}Press Ctrl+C to stop all servers${RESET}"
echo -e "${PURPLE}== ADMIN CREDENTIALS ===${RESET}"
echo -e "${PURPLE}Username: admin${RESET}"
echo -e "${PURPLE}Password: admin123${RESET}"
echo -e "${BOLD}=============================================================${RESET}"
echo
monitor_logs() {
BACKEND_PIPE=$(mktemp -u)_backend_pipe
FRONTEND_PIPE=$(mktemp -u)_frontend_pipe
PYTHON_SERVICE_PIPE=$(mktemp -u)_python_pipe
mkfifo $BACKEND_PIPE $FRONTEND_PIPE $PYTHON_SERVICE_PIPE
tail -f $BACKEND_LOG > $BACKEND_PIPE &
BACKEND_TAIL_PID=$!
tail -f $FRONTEND_LOG > $FRONTEND_PIPE &
FRONTEND_TAIL_PID=$!
tail -f $PYTHON_SERVICE_LOG > $PYTHON_SERVICE_PIPE &
PYTHON_TAIL_PID=$!
cat $BACKEND_PIPE | while read -r line; do echo -e "${BLUE}[Backend]${RESET} $line"; done &
cat $FRONTEND_PIPE | while read -r line; do echo -e "${GREEN}[Frontend]${RESET} $line"; done &
cat $PYTHON_SERVICE_PIPE | while read -r line; do echo -e "${CYAN}[PythonSvc]${RESET} $line"; done &
wait $BACKEND_TAIL_PID $FRONTEND_TAIL_PID $PYTHON_TAIL_PID
rm -f $BACKEND_PIPE $FRONTEND_PIPE $PYTHON_SERVICE_PIPE
}
monitor_logs &
LOG_MONITOR_PID=$!
wait $BACKEND_PID $PYTHON_SERVICE_PID $FRONTEND_PID
cleanup