|
|
@@ -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 ""
|