feat: add aiprovider service foundation
This commit is contained in:
82
planet.sh
82
planet.sh
@@ -14,11 +14,22 @@ NC='\033[0m'
|
||||
BACKEND_MAX_RETRIES="${BACKEND_MAX_RETRIES:-3}"
|
||||
BACKEND_HEALTH_CHECK_ATTEMPTS="${BACKEND_HEALTH_CHECK_ATTEMPTS:-10}"
|
||||
BACKEND_HEALTH_CHECK_INTERVAL="${BACKEND_HEALTH_CHECK_INTERVAL:-2}"
|
||||
AI_PROVIDER_HEALTH_CHECK_ATTEMPTS="${AI_PROVIDER_HEALTH_CHECK_ATTEMPTS:-10}"
|
||||
AI_PROVIDER_HEALTH_CHECK_INTERVAL="${AI_PROVIDER_HEALTH_CHECK_INTERVAL:-2}"
|
||||
FRONTEND_MAX_RETRIES="${FRONTEND_MAX_RETRIES:-3}"
|
||||
FRONTEND_HEALTH_CHECK_ATTEMPTS="${FRONTEND_HEALTH_CHECK_ATTEMPTS:-10}"
|
||||
FRONTEND_HEALTH_CHECK_INTERVAL="${FRONTEND_HEALTH_CHECK_INTERVAL:-2}"
|
||||
DEFAULT_BACKEND_PORT="${DEFAULT_BACKEND_PORT:-8000}"
|
||||
DEFAULT_FRONTEND_PORT="${DEFAULT_FRONTEND_PORT:-3000}"
|
||||
DEFAULT_AI_PROVIDER_PORT="${DEFAULT_AI_PROVIDER_PORT:-8010}"
|
||||
|
||||
compose_up() {
|
||||
if docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
else
|
||||
docker-compose "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
ensure_uv_backend_deps() {
|
||||
echo -e "${BLUE}📦 检查后端 uv 环境...${NC}"
|
||||
@@ -104,6 +115,18 @@ start_backend_with_retry() {
|
||||
return 1
|
||||
}
|
||||
|
||||
start_ai_provider_service() {
|
||||
local ai_provider_port="${1:-$DEFAULT_AI_PROVIDER_PORT}"
|
||||
|
||||
echo -e "${BLUE}🧠 启动 AI Provider...${NC}"
|
||||
docker start planet_aiprovider 2>/dev/null || compose_up up -d aiprovider
|
||||
|
||||
if ! wait_for_http "http://localhost:${ai_provider_port}/health" "$AI_PROVIDER_HEALTH_CHECK_ATTEMPTS" "$AI_PROVIDER_HEALTH_CHECK_INTERVAL" "AI Provider"; then
|
||||
echo -e "${RED}❌ AI Provider 启动失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
start_frontend_with_retry() {
|
||||
local frontend_port="$1"
|
||||
local retry=1
|
||||
@@ -166,8 +189,10 @@ kill_port_if_requested() {
|
||||
parse_service_args() {
|
||||
BACKEND_PORT="$DEFAULT_BACKEND_PORT"
|
||||
FRONTEND_PORT="$DEFAULT_FRONTEND_PORT"
|
||||
AI_PROVIDER_PORT="$DEFAULT_AI_PROVIDER_PORT"
|
||||
BACKEND_PORT_REQUESTED=0
|
||||
FRONTEND_PORT_REQUESTED=0
|
||||
AI_PROVIDER_REQUESTED=0
|
||||
DATABASE_REQUESTED=0
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
@@ -190,6 +215,15 @@ parse_service_args() {
|
||||
shift 1
|
||||
fi
|
||||
;;
|
||||
-a|--ai-provider-port)
|
||||
AI_PROVIDER_REQUESTED=1
|
||||
if [ -n "$2" ] && [[ "$2" =~ ^[0-9]+$ ]]; then
|
||||
AI_PROVIDER_PORT="$2"
|
||||
shift 2
|
||||
else
|
||||
shift 1
|
||||
fi
|
||||
;;
|
||||
-d|--database)
|
||||
DATABASE_REQUESTED=1
|
||||
shift 1
|
||||
@@ -203,6 +237,7 @@ parse_service_args() {
|
||||
|
||||
validate_port "$BACKEND_PORT"
|
||||
validate_port "$FRONTEND_PORT"
|
||||
validate_port "$AI_PROVIDER_PORT"
|
||||
}
|
||||
|
||||
cleanup_exit_containers() {
|
||||
@@ -219,6 +254,10 @@ stop_backend_service() {
|
||||
pkill -f "uvicorn" 2>/dev/null || true
|
||||
}
|
||||
|
||||
stop_ai_provider_service() {
|
||||
docker stop planet_aiprovider 2>/dev/null || true
|
||||
}
|
||||
|
||||
stop_frontend_service() {
|
||||
pkill -f "vite" 2>/dev/null || true
|
||||
pkill -f "bun run dev" 2>/dev/null || true
|
||||
@@ -226,18 +265,21 @@ stop_frontend_service() {
|
||||
|
||||
restart_database_service() {
|
||||
echo -e "${BLUE}🗄️ 重启数据库...${NC}"
|
||||
docker restart planet_postgres planet_redis 2>/dev/null || docker-compose up -d postgres redis
|
||||
docker restart planet_postgres planet_redis 2>/dev/null || compose_up up -d postgres redis
|
||||
sleep 3
|
||||
}
|
||||
|
||||
start_backend_service() {
|
||||
local backend_port="$1"
|
||||
local backend_port_requested="$2"
|
||||
local ai_provider_port="${3:-$DEFAULT_AI_PROVIDER_PORT}"
|
||||
|
||||
echo -e "${BLUE}🗄️ 启动数据库...${NC}"
|
||||
docker start planet_postgres planet_redis 2>/dev/null || docker-compose up -d postgres redis
|
||||
docker start planet_postgres planet_redis 2>/dev/null || compose_up up -d postgres redis
|
||||
sleep 3
|
||||
|
||||
start_ai_provider_service "$ai_provider_port"
|
||||
|
||||
if [ "$backend_port_requested" -eq 1 ]; then
|
||||
kill_port_if_requested "$backend_port" "后端"
|
||||
fi
|
||||
@@ -280,7 +322,7 @@ create_user() {
|
||||
ensure_uv_backend_deps
|
||||
|
||||
echo -e "${BLUE}🗄️ 启动数据库...${NC}"
|
||||
docker start planet_postgres 2>/dev/null || docker-compose up -d postgres
|
||||
docker start planet_postgres 2>/dev/null || compose_up up -d postgres
|
||||
sleep 2
|
||||
|
||||
echo -e "${BLUE}👤 创建用户${NC}"
|
||||
@@ -379,18 +421,20 @@ start() {
|
||||
|
||||
echo -e "${BLUE}🚀 启动智能星球计划...${NC}"
|
||||
|
||||
start_backend_service "$BACKEND_PORT" "$BACKEND_PORT_REQUESTED"
|
||||
start_backend_service "$BACKEND_PORT" "$BACKEND_PORT_REQUESTED" "$AI_PROVIDER_PORT"
|
||||
start_frontend_service "$FRONTEND_PORT" "$FRONTEND_PORT_REQUESTED"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ 启动完成!${NC}"
|
||||
echo " 前端: http://localhost:${FRONTEND_PORT}"
|
||||
echo " 后端: http://localhost:${BACKEND_PORT}"
|
||||
echo " AI Provider: http://localhost:${AI_PROVIDER_PORT}"
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -e "${YELLOW}🛑 停止服务...${NC}"
|
||||
stop_backend_service
|
||||
stop_ai_provider_service
|
||||
stop_frontend_service
|
||||
docker stop planet_postgres planet_redis 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ 已停止${NC}"
|
||||
@@ -400,7 +444,7 @@ restart() {
|
||||
parse_service_args "$@"
|
||||
cleanup_exit_containers
|
||||
|
||||
if [ "$BACKEND_PORT_REQUESTED" -eq 0 ] && [ "$FRONTEND_PORT_REQUESTED" -eq 0 ] && [ "$DATABASE_REQUESTED" -eq 0 ]; then
|
||||
if [ "$BACKEND_PORT_REQUESTED" -eq 0 ] && [ "$FRONTEND_PORT_REQUESTED" -eq 0 ] && [ "$AI_PROVIDER_REQUESTED" -eq 0 ] && [ "$DATABASE_REQUESTED" -eq 0 ]; then
|
||||
stop
|
||||
sleep 1
|
||||
start
|
||||
@@ -413,10 +457,16 @@ restart() {
|
||||
restart_database_service
|
||||
fi
|
||||
|
||||
if [ "$AI_PROVIDER_REQUESTED" -eq 1 ]; then
|
||||
stop_ai_provider_service
|
||||
sleep 1
|
||||
start_ai_provider_service "$AI_PROVIDER_PORT"
|
||||
fi
|
||||
|
||||
if [ "$BACKEND_PORT_REQUESTED" -eq 1 ]; then
|
||||
stop_backend_service
|
||||
sleep 1
|
||||
start_backend_service "$BACKEND_PORT" 1
|
||||
start_backend_service "$BACKEND_PORT" 1 "$AI_PROVIDER_PORT"
|
||||
fi
|
||||
|
||||
if [ "$FRONTEND_PORT_REQUESTED" -eq 1 ]; then
|
||||
@@ -430,6 +480,9 @@ restart() {
|
||||
if [ "$DATABASE_REQUESTED" -eq 1 ]; then
|
||||
echo " 数据库: planet_postgres, planet_redis"
|
||||
fi
|
||||
if [ "$AI_PROVIDER_REQUESTED" -eq 1 ]; then
|
||||
echo " AI Provider: http://localhost:${AI_PROVIDER_PORT}"
|
||||
fi
|
||||
if [ "$BACKEND_PORT_REQUESTED" -eq 1 ]; then
|
||||
echo " 后端: http://localhost:${BACKEND_PORT}"
|
||||
fi
|
||||
@@ -450,6 +503,12 @@ health() {
|
||||
echo -e " 后端: ${RED}❌ 未运行${NC}"
|
||||
fi
|
||||
|
||||
if curl -s "http://localhost:${DEFAULT_AI_PROVIDER_PORT}/health" > /dev/null 2>&1; then
|
||||
echo -e " AI Provider: ${GREEN}✅ 运行中${NC}"
|
||||
else
|
||||
echo -e " AI Provider: ${RED}❌ 未运行${NC}"
|
||||
fi
|
||||
|
||||
if curl -s http://localhost:3000 > /dev/null 2>&1; then
|
||||
echo -e " 前端: ${GREEN}✅ 运行中${NC}"
|
||||
else
|
||||
@@ -467,10 +526,16 @@ log() {
|
||||
echo "📝 后端日志 (Ctrl+C 退出):"
|
||||
tail -f /tmp/planet_backend.log
|
||||
;;
|
||||
-a|--ai-provider)
|
||||
echo "📝 AI Provider 日志 (Ctrl+C 退出):"
|
||||
docker logs -f planet_aiprovider
|
||||
;;
|
||||
*)
|
||||
echo "📝 最近日志:"
|
||||
echo "--- 后端 ---"
|
||||
tail -20 /tmp/planet_backend.log 2>/dev/null || echo "无日志"
|
||||
echo "--- AI Provider ---"
|
||||
docker logs --tail 20 planet_aiprovider 2>/dev/null || echo "无日志"
|
||||
echo "--- 前端 ---"
|
||||
tail -20 /tmp/planet_frontend.log 2>/dev/null || echo "无日志"
|
||||
;;
|
||||
@@ -502,13 +567,14 @@ case "$1" in
|
||||
echo "用法: ./planet.sh {start|stop|restart|createuser|health|log}"
|
||||
echo ""
|
||||
echo "命令:"
|
||||
echo " start 启动服务,可选: -b <后端端口> -f <前端端口>"
|
||||
echo " start 启动服务,可选: -b <后端端口> -f <前端端口> -a <AI Provider 端口>"
|
||||
echo " stop 停止服务"
|
||||
echo " restart 重启服务,可选: -b [后端端口] -f [前端端口] -d"
|
||||
echo " restart 重启服务,可选: -b [后端端口] -f [前端端口] -a [AI Provider 端口] -d"
|
||||
echo " createuser 交互创建用户"
|
||||
echo " health 检查健康状态"
|
||||
echo " log 查看日志"
|
||||
echo " log -f 查看前端日志"
|
||||
echo " log -b 查看后端日志"
|
||||
echo " log -a 查看 AI Provider 日志"
|
||||
;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user