paper-burner/start.sh

152 lines
4.2 KiB
Bash

#!/bin/bash
# Paper Burner X - 启动脚本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
BACKEND_PORT=3456
FRONTEND_PORT=5173
PID_DIR="$PROJECT_DIR/.pids"
echo -e "${BLUE}"
echo "======================================"
echo " Paper Burner X - 启动脚本"
echo "======================================"
echo -e "${NC}"
# 创建 PID 和日志目录
mkdir -p "$PID_DIR"
mkdir -p "$PROJECT_DIR/logs"
# 函数:根据端口查找并杀死进程
kill_port() {
local port=$1
local pids=$(lsof -t -i:$port 2>/dev/null)
if [ -n "$pids" ]; then
echo -e "${YELLOW}→ 发现端口 $port 被占用,正在终止进程...${NC}"
for pid in $pids; do
kill -9 $pid 2>/dev/null && echo -e " ${GREEN}已终止进程 $pid${NC}"
done
sleep 1
fi
}
# 函数:根据 PID 文件杀死进程
kill_pid_file() {
local pid_file=$1
local service_name=$2
if [ -f "$pid_file" ]; then
local pid=$(cat "$pid_file")
if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then
echo -e "${YELLOW}→ 终止 $service_name (PID: $pid)...${NC}"
kill -9 $pid 2>/dev/null
echo -e " ${GREEN}已终止${NC}"
fi
rm -f "$pid_file"
fi
}
# 1. 清除之前的进程
echo -e "${YELLOW}[1/3] 清除之前的进程...${NC}"
# 通过 PID 文件清理
kill_pid_file "$PID_DIR/backend.pid" "后端服务"
kill_pid_file "$PID_DIR/frontend.pid" "前端服务"
# 通过端口清理(确保彻底)
kill_port $BACKEND_PORT
kill_port $FRONTEND_PORT
echo -e "${GREEN}✓ 进程清理完成${NC}"
echo ""
# 2. 启动后端
echo -e "${YELLOW}[2/3] 启动后端服务 (端口 $BACKEND_PORT)...${NC}"
cd "$PROJECT_DIR/local-proxy"
# 检查 node_modules
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}→ 安装后端依赖...${NC}"
npm install
fi
# 后台启动后端(输出同时显示在控制台和日志文件)
npm start 2>&1 | tee "$PROJECT_DIR/logs/backend.log" &
BACKEND_PID=$!
echo $BACKEND_PID > "$PID_DIR/backend.pid"
echo -e "${GREEN}✓ 后端已启动 (PID: $BACKEND_PID)${NC}"
echo -e " 日志: $PROJECT_DIR/logs/backend.log"
echo ""
# 3. 启动前端
echo -e "${YELLOW}[3/3] 启动前端服务 (Vite 开发服务器, 端口 $FRONTEND_PORT)...${NC}"
cd "$PROJECT_DIR"
# 检查 node_modules
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}→ 安装前端依赖...${NC}"
npm install
fi
# 后台启动 Vite 开发服务器
npm run dev:fe 2>&1 | tee "$PROJECT_DIR/logs/frontend.log" &
FRONTEND_PID=$!
echo $FRONTEND_PID > "$PID_DIR/frontend.pid"
echo -e "${GREEN}✓ 前端已启动 (PID: $FRONTEND_PID)${NC}"
echo -e " 日志: $PROJECT_DIR/logs/frontend.log"
echo ""
# 等待服务启动
sleep 2
# 检查服务状态
echo -e "${YELLOW}→ 检查服务状态...${NC}"
BACKEND_OK=false
FRONTEND_OK=false
# 检查后端
if curl -s "http://localhost:$BACKEND_PORT/api/health" > /dev/null 2>&1; then
BACKEND_OK=true
echo -e " ${GREEN}✓ 后端服务正常${NC}"
else
echo -e " ${RED}✗ 后端服务启动中...${NC}"
fi
# 检查前端
if curl -s "http://localhost:$FRONTEND_PORT" > /dev/null 2>&1; then
FRONTEND_OK=true
echo -e " ${GREEN}✓ 前端服务正常${NC}"
else
echo -e " ${RED}✗ 前端服务启动中...${NC}"
fi
echo ""
echo -e "${GREEN}"
echo "======================================"
echo " 启动完成!"
echo "======================================"
echo -e "${NC}"
echo ""
echo -e "${BLUE}访问地址:${NC}"
echo -e " 前端: ${GREEN}http://localhost:$FRONTEND_PORT?mode=backend&token=your_token${NC}"
echo -e " 后端: ${GREEN}http://localhost:$BACKEND_PORT${NC}"
echo -e " 健康检查: ${GREEN}http://localhost:$BACKEND_PORT/api/health${NC}"
echo ""
echo -e "${BLUE}说明:${NC}"
echo -e " Vite 代理已配置,/api/* 自动转发到后端"
echo -e " 添加 ${YELLOW}?mode=backend${NC} 参数启用后端模式"
echo ""
echo -e "${BLUE}日志文件:${NC}"
echo -e " 后端: $PROJECT_DIR/logs/backend.log"
echo -e " 前端: $PROJECT_DIR/logs/frontend.log"
echo ""
echo -e "${BLUE}停止服务:${NC}"
echo -e " 运行: ${YELLOW}./stop.sh${NC} 或手动终止进程"
echo ""