#!/bin/bash # One-click startup script for SearchEngine # This script starts everything you need # Don't exit on error - we want to continue even if some checks fail # set -e cd "$(dirname "$0")" GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}SearchEngine一键启动脚本${NC}" echo -e "${GREEN}========================================${NC}" # Step 1: Setup environment echo -e "\n${YELLOW}Step 1/4: 设置环境${NC}" ./setup.sh # Step 2: Check if data is already ingested echo -e "\n${YELLOW}Step 2/4: 检查数据${NC}" source /home/tw/miniconda3/etc/profile.d/conda.sh conda activate searchengine # Check if index exists INDEX_EXISTS=$(python -c " from config.env_config import get_es_config from utils.es_client import ESClient from config import ConfigLoader es_config = get_es_config() es_client = ESClient(hosts=[es_config['host']], username=es_config.get('username'), password=es_config.get('password')) config_loader = ConfigLoader('config/schema') config = config_loader.load_customer_config('customer1') if es_client.index_exists(config.es_index_name): doc_count = es_client.count(config.es_index_name) print(f'{doc_count}') else: print('0') " 2>/dev/null || echo "0") if [ "$INDEX_EXISTS" = "0" ]; then echo -e "${YELLOW}索引不存在,开始导入数据...${NC}" echo -e "${YELLOW}注意: 首次导入会下载模型文件,可能需要10-30分钟${NC}" echo -e "${YELLOW}导入1000条数据进行快速测试(跳过embedding以加快速度)${NC}" ./scripts/ingest.sh 1000 true else echo -e "${GREEN}数据已存在,包含 $INDEX_EXISTS 条文档${NC}" fi # Step 3: Start backend in background echo -e "\n${YELLOW}Step 3/4: 启动后端服务${NC}" echo -e "${YELLOW}后端服务将在后台运行...${NC}" nohup ./scripts/start_backend.sh > logs/backend.log 2>&1 & BACKEND_PID=$! echo $BACKEND_PID > logs/backend.pid echo -e "${GREEN}后端服务已启动 (PID: $BACKEND_PID)${NC}" echo -e "${GREEN}日志文件: logs/backend.log${NC}" # Wait for backend to start echo -e "${YELLOW}等待后端服务启动...${NC}" MAX_RETRIES=12 RETRY_COUNT=0 BACKEND_READY=false while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do sleep 2 if curl -s http://localhost:6002/ > /dev/null 2>&1; then BACKEND_READY=true break fi RETRY_COUNT=$((RETRY_COUNT + 1)) echo -e "${YELLOW} 等待中... ($RETRY_COUNT/$MAX_RETRIES)${NC}" done # Check if backend is running if [ "$BACKEND_READY" = true ]; then echo -e "${GREEN}✓ 后端服务运行正常${NC}" # Try health check, but don't fail if it's not ready yet if curl -s http://localhost:6002/admin/health > /dev/null 2>&1; then echo -e "${GREEN}✓ 健康检查通过${NC}" else echo -e "${YELLOW}⚠ 健康检查未通过,但服务已启动${NC}" fi else echo -e "${RED}✗ 后端服务启动失败,请检查日志: logs/backend.log${NC}" echo -e "${YELLOW}提示: 后端服务可能需要更多时间启动,或者检查端口是否被占用${NC}" # Don't exit - let user decide whether to continue fi # Step 4: Start frontend echo -e "\n${YELLOW}Step 4/4: 启动前端服务${NC}" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}所有服务启动完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "访问地址:" echo -e " ${GREEN}前端界面: http://localhost:6003${NC}" echo -e " ${GREEN}后端API: http://localhost:6002${NC}" echo -e " ${GREEN}API文档: http://localhost:6002/docs${NC}" echo "" echo -e "日志文件:" echo -e " 后端: logs/backend.log" echo "" echo -e "停止服务:" echo -e " 后端: kill \$(cat logs/backend.pid)" echo -e " 前端: Ctrl+C" echo "" echo -e "${YELLOW}正在启动前端服务...${NC}" echo -e "${YELLOW}按 Ctrl+C 停止前端服务${NC}" echo "" ./scripts/start_frontend.sh