- 修改后端目录从 reading-platform-backend 改为 reading-platform-java - 修改后端端口从 3000 改为 8080 - 修改启动命令从 npm run start:dev 改为 mvn spring-boot:run - 添加 JAVA_HOME 自动检测和设置(默认使用 /f/Java/jdk-17) - 修改日志文件从 reading-platform-backend.log 改为 reading-platform-java.log - 修改健康检查接口为 /actuator/health - 增加启动等待超时时间到 60 秒(Java 启动较慢) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
134 lines
3.7 KiB
Bash
Executable File
134 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 统一启动脚本 - 启动前后端服务
|
||
|
||
# 获取脚本所在目录
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
BACKEND_DIR="$SCRIPT_DIR/reading-platform-java"
|
||
FRONTEND_DIR="$SCRIPT_DIR/reading-platform-frontend"
|
||
|
||
echo "======================================"
|
||
echo " 幼儿阅读教学服务平台"
|
||
echo " 统一启动脚本"
|
||
echo "======================================"
|
||
echo ""
|
||
|
||
# 函数:检查端口是否被占用
|
||
check_port() {
|
||
local port=$1
|
||
local name=$2
|
||
if lsof -ti:$port > /dev/null 2>&1; then
|
||
echo "⚠️ 端口 $port 已被占用 ($name)"
|
||
read -p "是否停止并重启?(y/n) " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
lsof -ti:$port | xargs kill -9 2>/dev/null
|
||
echo "✅ 已停止占用端口 $port 的进程"
|
||
return 0
|
||
else
|
||
return 1
|
||
fi
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
# 检查并停止占用端口的进程
|
||
check_port 8080 "后端"
|
||
if [ $? -eq 1 ]; then
|
||
echo "❌ 后端启动取消"
|
||
exit 1
|
||
fi
|
||
|
||
check_port 5173 "前端"
|
||
if [ $? -eq 1 ]; then
|
||
echo "❌ 前端启动取消"
|
||
exit 1
|
||
fi
|
||
|
||
# 启动后端
|
||
echo ""
|
||
echo "📦 [1/2] 启动后端服务 (Spring Boot)..."
|
||
cd "$BACKEND_DIR" || exit 1
|
||
echo "📂 后端目录:$(pwd)"
|
||
|
||
# 检查 JAVA_HOME 是否设置
|
||
if [ -z "$JAVA_HOME" ]; then
|
||
echo "⚠️ 未设置 JAVA_HOME,尝试使用默认 JDK 17 路径..."
|
||
if [ -d "/f/Java/jdk-17" ]; then
|
||
export JAVA_HOME="/f/Java/jdk-17"
|
||
echo "✅ 设置 JAVA_HOME=$JAVA_HOME"
|
||
else
|
||
echo "⚠️ 请确保已安装 JDK 17 并设置 JAVA_HOME"
|
||
fi
|
||
fi
|
||
|
||
echo "☕ Java 版本:$(java -version 2>&1 | head -n 1)"
|
||
|
||
# 后台启动后端 (Maven)
|
||
nohup mvn spring-boot:run -Dspring-boot.run.forked > /tmp/reading-platform-java.log 2>&1 &
|
||
BACKEND_PID=$!
|
||
echo "✅ 后端启动成功 (PID: $BACKEND_PID)"
|
||
echo "📄 日志文件:/tmp/reading-platform-java.log"
|
||
|
||
# 等待后端启动
|
||
echo "⏳ 等待后端服务启动..."
|
||
for i in {1..60}; do
|
||
if curl -s http://localhost:8080/actuator/health > /dev/null 2>&1; then
|
||
echo "✅ 后端服务就绪"
|
||
break
|
||
fi
|
||
if [ $i -eq 60 ]; then
|
||
echo "❌ 后端服务启动超时"
|
||
echo "📄 请查看日志:tail -f /tmp/reading-platform-java.log"
|
||
exit 1
|
||
fi
|
||
sleep 2
|
||
done
|
||
|
||
# 启动前端
|
||
echo ""
|
||
echo "📦 [2/2] 启动前端服务..."
|
||
cd "$FRONTEND_DIR" || exit 1
|
||
echo "📂 前端目录:$(pwd)"
|
||
|
||
if [ ! -d "node_modules" ]; then
|
||
echo "📦 正在安装前端依赖..."
|
||
npm install
|
||
fi
|
||
|
||
# 后台启动前端
|
||
nohup npm run dev > /tmp/reading-platform-frontend.log 2>&1 &
|
||
FRONTEND_PID=$!
|
||
echo "✅ 前端启动成功 (PID: $FRONTEND_PID)"
|
||
echo "📄 日志文件:/tmp/reading-platform-frontend.log"
|
||
|
||
# 等待前端启动
|
||
echo "⏳ 等待前端服务启动..."
|
||
for i in {1..30}; do
|
||
if curl -s http://localhost:5173 > /dev/null 2>&1; then
|
||
echo "✅ 前端服务就绪"
|
||
break
|
||
fi
|
||
if [ $i -eq 30 ]; then
|
||
echo "⚠️ 前端服务可能需要更多时间启动"
|
||
echo "📄 请查看日志:tail -f /tmp/reading-platform-frontend.log"
|
||
break
|
||
fi
|
||
sleep 1
|
||
done
|
||
|
||
echo ""
|
||
echo "======================================"
|
||
echo " ✅ 所有服务启动成功!"
|
||
echo "======================================"
|
||
echo ""
|
||
echo "📍 后端 API: http://localhost:8080"
|
||
echo "📍 前端页面: http://localhost:5173"
|
||
echo "📍 API 文档: http://localhost:8080/api/v1"
|
||
echo ""
|
||
echo "📊 查看后端日志:tail -f /tmp/reading-platform-java.log"
|
||
echo "📊 查看前端日志:tail -f /tmp/reading-platform-frontend.log"
|
||
echo ""
|
||
echo "🛑 停止所有服务:pkill -f 'spring-boot:run' && pkill -f 'vite'"
|
||
echo ""
|