start_all.sh
4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/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 0: Stop existing services first
echo -e "\n${YELLOW}Step 0/5: 停止现有服务${NC}"
if [ -f "./scripts/stop.sh" ]; then
./scripts/stop.sh
sleep 2 # Wait for services to fully stop
else
echo -e "${YELLOW}停止脚本不存在,手动检查端口...${NC}"
# Kill any existing processes on our ports
fuser -k 6002/tcp 2>/dev/null || true
fuser -k 6003/tcp 2>/dev/null || true
sleep 2
fi
# Step 1: Setup environment
echo -e "\n${YELLOW}Step 1/5: 设置环境${NC}"
./setup.sh
# Step 2: Check if data is already ingested
echo -e "\n${YELLOW}Step 2/5: 检查数据${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/5: 启动后端服务${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/5: 启动前端服务${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