Files

117 lines
4.1 KiB
Bash
Raw Permalink Normal View History

2026-05-10 10:56:52 +08:00
#!/bin/bash
# chongming 开发环境一键启动脚本 (远程执行版)
# 用法: 上传到虚拟机 /tmp/ 后执行,会自动定位到项目根目录
# 项目路径: ~/workspace/chongming
set -e
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "${GREEN}==> 初始化 chongming 开发环境${NC}"
# 1. 定位项目根目录
PROJECT_DIR=~/workspace/chongming
if [ ! -d "$PROJECT_DIR" ]; then
echo -e "${RED}错误:项目目录不存在: $PROJECT_DIR${NC}"
echo -e "${YELLOW}请先在虚拟机中创建项目目录并拉取代码:${NC}"
echo " mkdir -p ~/workspace && cd ~/workspace"
echo " git clone <仓库地址> chongming"
exit 1
fi
cd "$PROJECT_DIR"
echo -e "${GREEN}✔ 切换到项目目录: $(pwd)${NC}"
# 确认 pyproject.toml 存在(防御性检查)
if [ ! -f "pyproject.toml" ]; then
echo -e "${RED}错误:项目目录中未找到 pyproject.toml:$(pwd)${NC}"
exit 1
fi
# 2. 加载 nvm(SSH 非交互式 shell 需要手动加载)
export NVM_DIR="$HOME/.nvm"
if [ -s "$NVM_DIR/nvm.sh" ]; then
. "$NVM_DIR/nvm.sh" 2>/dev/null
fi
# 3. 检查 Node.js (版本要求 >=20.19)
if ! command -v node &> /dev/null; then
echo -e "${RED}错误:未找到 node,请安装 Node.js >= 20.19${NC}"
echo "推荐使用 nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash"
exit 1
fi
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 20 ]; then
echo -e "${RED}错误:Node.js 版本过低 (当前 $(node -v)),需要 >=20.19${NC}"
exit 1
fi
echo -e "${GREEN}✔ Node.js $(node -v)${NC}"
# 4. 安装/检查 uv (项目推荐)
# SSH 非交互式 shell 的 PATH 可能不含 ~/.local/bin,手动添加
export PATH="$HOME/.local/bin:$PATH"
if ! command -v uv &> /dev/null; then
echo -e "${YELLOW}未找到 uv,正在自动安装...${NC}"
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
if ! command -v uv &> /dev/null; then
echo -e "${RED}uv 安装失败,请手动安装:https://docs.astral.sh/uv/${NC}"
exit 1
fi
echo -e "${GREEN}uv 安装成功${NC}"
fi
# 5. 安装后端依赖
echo -e "${GREEN}==> 安装后端依赖 (uv sync)${NC}"
cd ~/workspace/chongming
uv sync
# 6. 安装前端依赖
echo -e "${GREEN}==> 安装前端依赖 (npm install)${NC}"
cd ~/workspace/chongming/src/chongming-web
npm install
cd ../..
# 7. 启动后端服务(后台运行,使用 nohup 防止 SSH 断开后被 SIGHUP 杀死)
echo -e "${GREEN}==> 启动后端服务 (uv run serve)${NC}"
mkdir -p ~/workspace/chongming/logs
nohup uv run serve > ~/workspace/chongming/logs/backend.log 2>&1 &
BACKEND_PID=$!
# 等待后端完全启动(健康检查)
echo "等待后端服务就绪(约3秒)..."
sleep 10
# 可选:检查端口8000是否监听
if ! ss -tln | grep -q ':8000'; then
echo -e "${YELLOW}警告:后端可能尚未完全启动,请稍后手动检查${NC}"
fi
# 8. 生成前端 API 客户端(需要后端运行)
echo -e "${GREEN}==> 生成前端 API 客户端 (npm run openapi)${NC}"
cd src/chongming-web
npm run openapi || echo -e "${YELLOW}注意:生成 openapi 失败,请确认后端已运行在 http://localhost:8000${NC}"
cd ../..
# 9. 启动前端开发服务器(后台运行,使用 nohup 防止 SSH 断开后被 SIGHUP 杀死)
echo -e "${GREEN}==> 启动前端开发服务器 (npm run dev)${NC}"
cd src/chongming-web
nohup npm run dev > ~/workspace/chongming/logs/frontend.log 2>&1 &
FRONTEND_PID=$!
cd ../..
echo -e "前端地址: ${GREEN}http://localhost:5173${NC}"
echo -e "后端地址: ${GREEN}http://localhost:8000${NC}"
echo -e "后端日志: ~/workspace/chongming/logs/backend.log"
echo -e "前端日志: ~/workspace/chongming/logs/frontend.log"
echo -e "后端 PID: $BACKEND_PID"
echo -e "前端 PID: $FRONTEND_PID"
# 记录 PID 到文件,方便后续停止服务
echo -e "$BACKEND_PID\n$FRONTEND_PID" > ~/workspace/chongming/.dev_pids
echo -e "${GREEN}✅ 开发环境已全部启动,脚本将退出,服务在后台持续运行${NC}"
echo -e "${YELLOW}要停止服务,请执行: kill \$(cat ~/workspace/chongming/.dev_pids)${NC}"