#!/bin/bash # QZMusic-Web 一键安装脚本 # 从Gitea仓库获取并自动部署 # 使用方法: bash <(curl -sL http://171.80.3.149:4321/miao-moe/QZMusic-Web/raw/branch/master/install.sh) # 或者直接运行此脚本 set -e echo "==========================================" echo " QZMusic-Web 一键安装" echo "==========================================" echo "" # 配置 REPO_URL="http://171.80.3.149:4321/miao-moe/QZMusic-Web.git" INSTALL_DIR="/opt/QZMusic-Web" PORT=10096 # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否以root运行 if [ "$EUID" -ne 0 ]; then log_warn "建议使用 root 权限运行以获得最佳体验" fi # 检查Node.js if ! command -v node &> /dev/null; then log_error "Node.js 未安装!请先安装 Node.js" echo "安装 Node.js:" echo " Ubuntu/Debian: sudo apt-get install nodejs npm" echo " CentOS/RHEL: sudo yum install nodejs npm" echo " 或访问: https://nodejs.org/" exit 1 fi log_info "Node.js 版本: $(node -v)" log_info "npm 版本: $(npm -v)" echo "" # 检查是否已存在安装目录 if [ -d "$INSTALL_DIR" ]; then log_warn "检测到已存在的安装目录: $INSTALL_DIR" read -p "是否更新到最新版本?(y/n): " update_choice if [ "$update_choice" != "y" ] && [ "$update_choice" != "Y" ]; then log_info "取消安装" exit 0 fi log_info "正在更新到最新版本..." cd "$INSTALL_DIR" git pull origin master if [ $? -ne 0 ]; then log_error "更新失败!" exit 1 fi else # 创建安装目录 log_info "正在创建安装目录: $INSTALL_DIR" sudo mkdir -p "$INSTALL_DIR" # 克隆仓库 log_info "正在从仓库获取代码..." if ! git clone "$REPO_URL" "$INSTALL_DIR"; then log_error "克隆仓库失败!" exit 1 fi fi echo "" # 进入安装目录 cd "$INSTALL_DIR" # 安装依赖 log_info "正在安装依赖..." npm install --registry=https://registry.npmmirror.com if [ $? -ne 0 ]; then log_error "依赖安装失败!" exit 1 fi log_info "依赖安装成功!" echo "" # 构建项目 log_info "正在构建项目..." npm run build if [ $? -ne 0 ]; then log_error "构建失败!" exit 1 fi log_info "项目构建成功!" echo "" # 检查端口占用 if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then log_warn "端口 $PORT 已被占用,尝试停止现有进程..." PID=$(lsof -ti:$PORT) kill $PID 2>/dev/null || true sleep 2 fi echo "" echo "==========================================" echo " 🎉 安装完成!" echo "==========================================" echo "" echo "📂 安装目录: $INSTALL_DIR" echo "🌐 访问地址: http://localhost:$PORT" echo "" echo "启动服务:" echo " 开发模式: cd $INSTALL_DIR && npm run dev" echo " 生产模式: cd $INSTALL_DIR && npm run preview" echo "" echo "管理命令:" echo " 更新: cd $INSTALL_DIR && git pull" echo " 卸载: cd $INSTALL_DIR && npm run uninstall" echo ""