117 lines
4.1 KiB
Bash
117 lines
4.1 KiB
Bash
#!/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}"
|