diff --git a/backend/install.sh b/backend/install.sh index 29cef48..40d457d 100755 --- a/backend/install.sh +++ b/backend/install.sh @@ -1,5 +1,5 @@ #!/bin/bash -# KVM Manager 一键安装脚本 +# KVM Manager 一键安装脚本 (前端 + 后端) set -e # 颜色定义 @@ -19,6 +19,11 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi +# 获取脚本所在目录 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BACKEND_DIR="$SCRIPT_DIR/backend" +FRONTEND_DIR="$SCRIPT_DIR/frontend" + # 检测操作系统 if [[ -f /etc/debian_version ]]; then echo -e "${GREEN}[检测] Debian/Ubuntu 系统${NC}" @@ -34,11 +39,10 @@ else exit 1 fi -# 获取脚本所在目录 -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BACKEND_DIR="$SCRIPT_DIR" - -echo -e "${YELLOW}[1/4] 安装系统依赖...${NC}" +# ============================================================ +# 后端安装 +# ============================================================ +echo -e "${YELLOW}[1/5] 安装后端系统依赖...${NC}" if [[ "$PKG_MANAGER" == "apt-get" ]]; then apt-get update apt-get install -y libvirt-dev pkg-config python3-dev python3-venv @@ -49,7 +53,7 @@ elif [[ "$PKG_MANAGER" == "pacman" ]]; then fi # 检查 libvirtd 是否运行 -echo -e "${YELLOW}[2/4] 检查 libvirtd 服务...${NC}" +echo -e "${YELLOW}[2/5] 检查 libvirtd 服务...${NC}" if systemctl is-active --quiet libvirtd; then echo -e "${GREEN} ✓ libvirtd 运行中${NC}" else @@ -59,7 +63,7 @@ else fi # 创建/重建虚拟环境 -echo -e "${YELLOW}[3/4] 配置 Python 虚拟环境...${NC}" +echo -e "${YELLOW}[3/5] 配置后端 Python 环境...${NC}" cd "$BACKEND_DIR" if [[ -d "venv" ]]; then @@ -79,7 +83,6 @@ echo -e " 安装 Python 依赖..." pip install -r requirements.txt # 验证 libvirt 模块 -echo -e "${YELLOW}[4/4] 验证安装...${NC}" python -c " import libvirt print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 1000000}') @@ -88,16 +91,61 @@ print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 100 exit 1 } +# ============================================================ +# 前端安装 +# ============================================================ +echo -e "${YELLOW}[4/5] 配置前端...${NC}" + +# 检测 node/npm +if ! command -v node &> /dev/null; then + echo -e " 安装 Node.js..." + if [[ "$PKG_MANAGER" == "apt-get" ]]; then + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - + apt-get install -y nodejs + elif [[ "$PKG_MANAGER" == "yum" ]]; then + curl -fsSL https://rpm.nodesource.com/setup_20.x | bash - + yum install -y nodejs + fi +fi + +echo -e " Node.js: $(node -v), npm: $(npm -v)" + +cd "$FRONTEND_DIR" + +# 安装依赖 +echo -e " 安装 npm 依赖..." +npm install + +# 编译 +echo -e " 编译前端..." +npm run build + +echo -e "${YELLOW}[5/5] 验证前端...${NC}" +if [[ -d "dist" ]]; then + echo -e "${GREEN} ✓ 前端编译成功, dist/ 已生成${NC}" +else + echo -e "${RED}[错误] 前端编译失败${NC}" + exit 1 +fi + echo "" echo -e "${GREEN}======================================" echo -e " 安装完成!" echo -e "======================================${NC}" echo "" -echo -e "${YELLOW}启动服务:${NC}" +echo -e "${YELLOW}启动后端 (端口 8004):${NC}" echo -e " cd $BACKEND_DIR" echo -e " source venv/bin/activate" -echo -e " python -m uvicorn app.main:app --host 0.0.0.0 --port 8004" -echo "" -echo -e "${YELLOW}或使用后台运行:${NC}" echo -e " nohup python -m uvicorn app.main:app --host 0.0.0.0 --port 8004 > app.log 2>&1 &" echo "" +echo -e "${YELLOW}启动前端 (端口 8006):${NC}" +echo -e " cd $FRONTEND_DIR" +echo -e " nohup python serve.py > serve.log 2>&1 &" +echo "" +echo -e "${YELLOW}访问地址:${NC}" +echo -e " http://<服务器IP>:8006" +echo "" +echo -e "${YELLOW}一键启动全部服务:${NC}" +echo -e " cd $BACKEND_DIR && source venv/bin/activate && nohup python -m uvicorn app.main:app --host 0.0.0.0 --port 8004 > app.log 2>&1 &" +echo -e " cd $FRONTEND_DIR && nohup python serve.py > serve.log 2>&1 &" +echo ""