feat: 重构安装脚本,根目录一键全量,backend目录独立后端脚本

This commit is contained in:
Hermes Agent
2026-05-13 12:49:36 +08:00
parent 812e2a9fd8
commit fcf52846a7
2 changed files with 14 additions and 99 deletions
+12 -77
View File
@@ -1,48 +1,36 @@
#!/bin/bash #!/bin/bash
# KVM Manager 一键安装脚本 (前端 + 后端) # KVM Manager 后端一键安装脚本 (后端)
set -e set -e
# 颜色定义
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' NC='\033[0m'
echo -e "${GREEN}======================================" echo -e "${GREEN}======================================"
echo -e " KVM Manager 一键安装脚本" echo -e " KVM Manager 后端一键安装"
echo -e "======================================${NC}\n" echo -e "======================================${NC}\n"
# 检测是否为 root
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}[错误] 请使用 root 用户运行此脚本${NC}" echo -e "${RED}[错误] 请使用 root 用户运行此脚本${NC}"
echo -e "${YELLOW}提示: sudo bash $0${NC}" echo -e "${YELLOW}提示: sudo bash $0${NC}"
exit 1 exit 1
fi fi
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$SCRIPT_DIR/backend"
FRONTEND_DIR="$SCRIPT_DIR/frontend"
# 检测操作系统
if [[ -f /etc/debian_version ]]; then if [[ -f /etc/debian_version ]]; then
echo -e "${GREEN}[检测] Debian/Ubuntu 系统${NC}"
PKG_MANAGER="apt-get" PKG_MANAGER="apt-get"
elif [[ -f /etc/redhat-release ]]; then elif [[ -f /etc/redhat-release ]]; then
echo -e "${GREEN}[检测] RedHat/CentOS 系统${NC}"
PKG_MANAGER="yum" PKG_MANAGER="yum"
elif [[ -f /etc/arch-release ]]; then elif [[ -f /etc/arch-release ]]; then
echo -e "${GREEN}[检测] Arch Linux 系统${NC}"
PKG_MANAGER="pacman" PKG_MANAGER="pacman"
else else
echo -e "${RED}[错误] 不支持的操作系统${NC}" echo -e "${RED}[错误] 不支持的操作系统${NC}"
exit 1 exit 1
fi fi
# ============================================================ echo -e "${YELLOW}[1/4] 安装系统依赖...${NC}"
# 后端安装
# ============================================================
echo -e "${YELLOW}[1/5] 安装后端系统依赖...${NC}"
if [[ "$PKG_MANAGER" == "apt-get" ]]; then if [[ "$PKG_MANAGER" == "apt-get" ]]; then
apt-get update apt-get update
apt-get install -y libvirt-dev pkg-config python3-dev python3-venv apt-get install -y libvirt-dev pkg-config python3-dev python3-venv
@@ -52,8 +40,7 @@ elif [[ "$PKG_MANAGER" == "pacman" ]]; then
pacman -Sy --noconfirm libvirt python python-pip pacman -Sy --noconfirm libvirt python python-pip
fi fi
# 检查 libvirtd 是否运行 echo -e "${YELLOW}[2/4] 检查 libvirtd 服务...${NC}"
echo -e "${YELLOW}[2/5] 检查 libvirtd 服务...${NC}"
if systemctl is-active --quiet libvirtd; then if systemctl is-active --quiet libvirtd; then
echo -e "${GREEN} ✓ libvirtd 运行中${NC}" echo -e "${GREEN} ✓ libvirtd 运行中${NC}"
else else
@@ -62,9 +49,8 @@ else
systemctl enable libvirtd systemctl enable libvirtd
fi fi
# 创建/重建虚拟环境 echo -e "${YELLOW}[3/4] 配置 Python 环境...${NC}"
echo -e "${YELLOW}[3/5] 配置后端 Python 环境...${NC}" cd "$SCRIPT_DIR"
cd "$BACKEND_DIR"
if [[ -d "venv" ]]; then if [[ -d "venv" ]]; then
echo -e " 删除旧 venv..." echo -e " 删除旧 venv..."
@@ -73,16 +59,10 @@ fi
python3 -m venv venv python3 -m venv venv
source venv/bin/activate source venv/bin/activate
# 升级 pip
echo -e " 升级 pip..."
pip install --upgrade pip pip install --upgrade pip
# 安装 Python 依赖
echo -e " 安装 Python 依赖..."
pip install -r requirements.txt pip install -r requirements.txt
# 验证 libvirt 模块 echo -e "${YELLOW}[4/4] 验证安装...${NC}"
python -c " python -c "
import libvirt import libvirt
print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 1000000}') print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 1000000}')
@@ -91,61 +71,16 @@ print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 100
exit 1 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 ""
echo -e "${GREEN}======================================" echo -e "${GREEN}======================================"
echo -e " 安装完成!" echo -e " 安装完成!"
echo -e "======================================${NC}" echo -e "======================================${NC}"
echo "" echo ""
echo -e "${YELLOW}启动后端 (端口 8004):${NC}" echo -e "${YELLOW}启动服务:${NC}"
echo -e " cd $BACKEND_DIR" echo -e " cd $SCRIPT_DIR"
echo -e " source venv/bin/activate" 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 -e " nohup python -m uvicorn app.main:app --host 0.0.0.0 --port 8004 > app.log 2>&1 &"
echo "" 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 ""
+2 -22
View File
@@ -2,7 +2,6 @@
# KVM Manager 一键安装脚本 (前端 + 后端) # KVM Manager 一键安装脚本 (前端 + 后端)
set -e set -e
# 颜色定义
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
@@ -12,19 +11,16 @@ echo -e "${GREEN}======================================"
echo -e " KVM Manager 一键安装脚本" echo -e " KVM Manager 一键安装脚本"
echo -e "======================================${NC}\n" echo -e "======================================${NC}\n"
# 检测是否为 root
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}[错误] 请使用 root 用户运行此脚本${NC}" echo -e "${RED}[错误] 请使用 root 用户运行此脚本${NC}"
echo -e "${YELLOW}提示: sudo bash $0${NC}" echo -e "${YELLOW}提示: sudo bash $0${NC}"
exit 1 exit 1
fi fi
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$SCRIPT_DIR/backend" BACKEND_DIR="$SCRIPT_DIR/backend"
FRONTEND_DIR="$SCRIPT_DIR/frontend" FRONTEND_DIR="$SCRIPT_DIR/frontend"
# 检测操作系统
if [[ -f /etc/debian_version ]]; then if [[ -f /etc/debian_version ]]; then
echo -e "${GREEN}[检测] Debian/Ubuntu 系统${NC}" echo -e "${GREEN}[检测] Debian/Ubuntu 系统${NC}"
PKG_MANAGER="apt-get" PKG_MANAGER="apt-get"
@@ -40,7 +36,7 @@ else
fi fi
# ============================================================ # ============================================================
# 后端安装 # 后端
# ============================================================ # ============================================================
echo -e "${YELLOW}[1/5] 安装后端系统依赖...${NC}" echo -e "${YELLOW}[1/5] 安装后端系统依赖...${NC}"
if [[ "$PKG_MANAGER" == "apt-get" ]]; then if [[ "$PKG_MANAGER" == "apt-get" ]]; then
@@ -52,7 +48,6 @@ elif [[ "$PKG_MANAGER" == "pacman" ]]; then
pacman -Sy --noconfirm libvirt python python-pip pacman -Sy --noconfirm libvirt python python-pip
fi fi
# 检查 libvirtd 是否运行
echo -e "${YELLOW}[2/5] 检查 libvirtd 服务...${NC}" echo -e "${YELLOW}[2/5] 检查 libvirtd 服务...${NC}"
if systemctl is-active --quiet libvirtd; then if systemctl is-active --quiet libvirtd; then
echo -e "${GREEN} ✓ libvirtd 运行中${NC}" echo -e "${GREEN} ✓ libvirtd 运行中${NC}"
@@ -62,7 +57,6 @@ else
systemctl enable libvirtd systemctl enable libvirtd
fi fi
# 创建/重建虚拟环境
echo -e "${YELLOW}[3/5] 配置后端 Python 环境...${NC}" echo -e "${YELLOW}[3/5] 配置后端 Python 环境...${NC}"
cd "$BACKEND_DIR" cd "$BACKEND_DIR"
@@ -73,16 +67,9 @@ fi
python3 -m venv venv python3 -m venv venv
source venv/bin/activate source venv/bin/activate
# 升级 pip
echo -e " 升级 pip..."
pip install --upgrade pip pip install --upgrade pip
# 安装 Python 依赖
echo -e " 安装 Python 依赖..."
pip install -r requirements.txt pip install -r requirements.txt
# 验证 libvirt 模块
python -c " python -c "
import libvirt import libvirt
print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 1000000}') print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 1000000}')
@@ -92,11 +79,10 @@ print(f' ✓ libvirt 模块加载成功, 版本: {libvirt.getVersion() // 100
} }
# ============================================================ # ============================================================
# 前端安装 # 前端
# ============================================================ # ============================================================
echo -e "${YELLOW}[4/5] 配置前端...${NC}" echo -e "${YELLOW}[4/5] 配置前端...${NC}"
# 检测 node/npm
if ! command -v node &> /dev/null; then if ! command -v node &> /dev/null; then
echo -e " 安装 Node.js..." echo -e " 安装 Node.js..."
if [[ "$PKG_MANAGER" == "apt-get" ]]; then if [[ "$PKG_MANAGER" == "apt-get" ]]; then
@@ -111,13 +97,7 @@ fi
echo -e " Node.js: $(node -v), npm: $(npm -v)" echo -e " Node.js: $(node -v), npm: $(npm -v)"
cd "$FRONTEND_DIR" cd "$FRONTEND_DIR"
# 安装依赖
echo -e " 安装 npm 依赖..."
npm install npm install
# 编译
echo -e " 编译前端..."
npm run build npm run build
echo -e "${YELLOW}[5/5] 验证前端...${NC}" echo -e "${YELLOW}[5/5] 验证前端...${NC}"