demo_base.sh 5.82 KB
#!/bin/bash

# Base配置演示流程脚本
# 用于演示店匠通用客户的搜索效果

set -e

cd "$(dirname "$0")/.."
source /home/tw/miniconda3/etc/profile.d/conda.sh
conda activate searchengine

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Base配置演示流程${NC}"
echo -e "${GREEN}========================================${NC}"

# 加载.env配置文件
if [ -f .env ]; then
    set -a
    source .env
    set +a
fi

# 配置参数(从环境变量或默认值)
TENANT_ID=${1:-"1"}
DB_HOST=${DB_HOST:-"120.79.247.228"}
DB_PORT=${DB_PORT:-"3316"}
DB_DATABASE=${DB_DATABASE:-"saas"}
DB_USERNAME=${DB_USERNAME:-"saas"}
DB_PASSWORD=${DB_PASSWORD:-"P89cZHS5d7dFyc9R"}
ES_HOST=${ES_HOST:-"http://localhost:9200"}
API_PORT=${API_PORT:-"6002"}
FRONTEND_PORT=${FRONTEND_PORT:-"6003"}

echo -e "\n${YELLOW}配置参数:${NC}"
echo "  Tenant ID: $TENANT_ID"
echo "  MySQL: $DB_HOST:$DB_PORT/$DB_DATABASE"
echo "  Elasticsearch: $ES_HOST"
echo "  API Port: $API_PORT"
echo "  Frontend Port: $FRONTEND_PORT"

# Step 1: 生成测试数据
echo -e "\n${YELLOW}Step 1/5: 生成测试数据${NC}"
if [ ! -f "test_data_base.sql" ]; then
    echo "生成100条SPU测试数据..."
    python scripts/generate_test_data.py \
        --num-spus 100 \
        --tenant-id "$TENANT_ID" \
        --start-spu-id 1 \
        --start-sku-id 1 \
        --output test_data_base.sql
    echo -e "${GREEN}✓ 测试数据已生成: test_data_base.sql${NC}"
else
    echo -e "${YELLOW}⚠ 测试数据文件已存在,跳过生成${NC}"
fi

# Step 2: 导入测试数据到MySQL
echo -e "\n${YELLOW}Step 2/5: 导入测试数据到MySQL${NC}"
if [ -z "$DB_PASSWORD" ]; then
    echo -e "${RED}ERROR: DB_PASSWORD未设置,请检查.env文件或环境变量${NC}"
    exit 1
fi

python scripts/import_test_data.py \
    --db-host "$DB_HOST" \
    --db-port "$DB_PORT" \
    --db-database "$DB_DATABASE" \
    --db-username "$DB_USERNAME" \
    --db-password "$DB_PASSWORD" \
    --sql-file test_data_base.sql \
    --tenant-id "$TENANT_ID"

echo -e "${GREEN}✓ 测试数据已导入MySQL${NC}"

# Step 3: 导入数据到Elasticsearch
echo -e "\n${YELLOW}Step 3/5: 导入数据到Elasticsearch${NC}"
python scripts/ingest_shoplazza.py \
    --db-host "$DB_HOST" \
    --db-port "$DB_PORT" \
    --db-database "$DB_DATABASE" \
    --db-username "$DB_USERNAME" \
    --db-password "$DB_PASSWORD" \
    --tenant-id "$TENANT_ID" \
    --config base \
    --es-host "$ES_HOST" \
    --recreate \
    --batch-size 500

echo -e "${GREEN}✓ 数据已导入Elasticsearch${NC}"

# Step 4: 启动后端服务
echo -e "\n${YELLOW}Step 4/5: 启动后端服务${NC}"
echo "后端服务将在后台运行..."

# 创建logs目录
mkdir -p logs

# 启动后端(后台运行)
nohup python api/app.py \
    --host 0.0.0.0 \
    --port "$API_PORT" \
    --customer base \
    --es-host "$ES_HOST" > logs/backend_base.log 2>&1 &

BACKEND_PID=$!
echo $BACKEND_PID > logs/backend_base.pid
echo -e "${GREEN}后端服务已启动 (PID: $BACKEND_PID)${NC}"
echo -e "${GREEN}日志文件: logs/backend_base.log${NC}"

# 等待后端启动
echo -e "${YELLOW}等待后端服务启动...${NC}"
MAX_RETRIES=15
RETRY_COUNT=0
BACKEND_READY=false

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
    sleep 2
    if curl -s "http://localhost:$API_PORT/health" > /dev/null 2>&1; then
        BACKEND_READY=true
        break
    fi
    RETRY_COUNT=$((RETRY_COUNT + 1))
    echo -e "${YELLOW}  等待中... ($RETRY_COUNT/$MAX_RETRIES)${NC}"
done

if [ "$BACKEND_READY" = true ]; then
    echo -e "${GREEN}✓ 后端服务运行正常${NC}"
else
    echo -e "${YELLOW}⚠ 后端服务可能还在启动中,请稍后访问${NC}"
fi

# Step 5: 启动前端服务
echo -e "\n${YELLOW}Step 5/5: 启动前端服务${NC}"
echo "前端服务将在后台运行..."

# 创建base配置的前端JS文件
echo "创建base配置前端文件..."
python scripts/create_base_frontend.py --tenant-id "$TENANT_ID" --api-port "$API_PORT"
echo -e "${GREEN}✓ 前端文件已创建${NC}"

# 启动前端(后台运行)
export PORT="$FRONTEND_PORT"
nohup python scripts/frontend_server.py > logs/frontend_base.log 2>&1 &

FRONTEND_PID=$!
echo $FRONTEND_PID > logs/frontend_base.pid
echo -e "${GREEN}前端服务已启动 (PID: $FRONTEND_PID)${NC}"
echo -e "${GREEN}日志文件: logs/frontend_base.log${NC}"

# 等待前端启动
echo -e "${YELLOW}等待前端服务启动...${NC}"
MAX_RETRIES=10
RETRY_COUNT=0
FRONTEND_READY=false

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
    sleep 2
    if curl -s "http://localhost:$FRONTEND_PORT/" > /dev/null 2>&1; then
        FRONTEND_READY=true
        break
    fi
    RETRY_COUNT=$((RETRY_COUNT + 1))
    echo -e "${YELLOW}  等待中... ($RETRY_COUNT/$MAX_RETRIES)${NC}"
done

if [ "$FRONTEND_READY" = true ]; then
    echo -e "${GREEN}✓ 前端服务运行正常${NC}"
else
    echo -e "${YELLOW}⚠ 前端服务可能还在启动中,请稍后访问${NC}"
fi

echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN}演示环境启动完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "访问地址:"
echo -e "  ${GREEN}前端界面: http://localhost:$FRONTEND_PORT/base${NC} (或 http://localhost:$FRONTEND_PORT/base.html)"
echo -e "  ${GREEN}后端API: http://localhost:$API_PORT${NC}"
echo -e "  ${GREEN}API文档: http://localhost:$API_PORT/docs${NC}"
echo ""
echo -e "配置信息:"
echo -e "  Tenant ID: $TENANT_ID"
echo -e "  Customer Config: base"
echo ""
echo -e "日志文件:"
echo -e "  后端: logs/backend_base.log"
echo -e "  前端: logs/frontend_base.log"
echo ""
echo -e "停止服务:"
echo -e "  所有服务: ./scripts/stop_base.sh"
echo -e "  单独停止后端: kill \$(cat logs/backend_base.pid)"
echo -e "  单独停止前端: kill \$(cat logs/frontend_base.pid)"
echo ""