From 98da20cab41e857df26c17ce4e5ed5e58d726973 Mon Sep 17 00:00:00 2001 From: QZMusic Date: Thu, 4 Jun 2026 14:05:06 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=92=8C=E5=8D=B8=E8=BD=BD=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E4=BB=8E=E4=BB=93=E5=BA=93=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 49 +++++++++++++++++- install.sh | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- uninstall.sh | 111 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 299 insertions(+), 3 deletions(-) create mode 100755 install.sh create mode 100755 uninstall.sh diff --git a/README.md b/README.md index 239592d..e1255f7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,21 @@ QZMusic 网页版,基于 Vue 3 + TypeScript + Vite 构建的音乐播放器。 ## 快速开始 -### 一键部署(推荐) +### 一键安装(推荐) + +直接从 Gitea 仓库一键安装部署: + +```bash +# 方式1:使用 curl 直接执行 +bash <(curl -sL http://171.80.3.149:4321/miao-moe/QZMusic-Web/raw/branch/master/install.sh) + +# 方式2:克隆后执行 +git clone http://171.80.3.149:4321/miao-moe/QZMusic-Web.git +cd QZMusic-Web +bash install.sh +``` + +### 一键部署(本地开发) ```bash # 使用一键部署脚本 @@ -32,6 +46,26 @@ npm run start ./start.sh ``` +## 一键卸载 + +完全删除所有 QZMusic 部署文件和配置: + +```bash +# 方式1:使用 curl 直接执行 +bash <(curl -sL http://171.80.3.149:4321/miao-moe/QZMusic-Web/raw/branch/master/uninstall.sh) + +# 方式2:在安装目录执行 +cd /opt/QZMusic-Web +bash uninstall.sh +``` + +卸载将删除: +- 安装目录(`/opt/QZMusic-Web`) +- 端口 10096 上的所有进程 +- Systemd 服务(如有) +- npm 全局包(如有) +- 相关缓存文件 + ## 开发 ### 安装依赖 @@ -62,13 +96,24 @@ npm run preview ## 脚本说明 +### 本地脚本 + | 命令 | 说明 | |------|------| | `npm run dev` | 启动开发服务器(端口 10096) | | `npm run build` | 构建生产版本 | | `npm run preview` | 预览生产构建(端口 10096) | | `npm run deploy` | 一键部署(安装依赖 + 构建) | -| `npm run start` | 一键启动(自动安装依赖 + 启动开发服务器) | +| `npm run start` | 一键启动(自动安装依赖 + 启动) | +| `npm run install-app` | 一键安装(从仓库安装到 /opt) | +| `npm run uninstall` | 一键卸载(删除所有部署文件) | + +### 一键命令(远程执行) + +| 命令 | 说明 | +|------|------| +| `bash <(curl ... install.sh)` | 从仓库一键安装部署 | +| `bash <(curl ... uninstall.sh)` | 从仓库一键卸载所有部署 | ## 项目结构 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..3586491 --- /dev/null +++ b/install.sh @@ -0,0 +1,138 @@ +#!/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 "" diff --git a/package.json b/package.json index 43297fa..26ad77d 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "build": "vue-tsc && vite build", "preview": "vite preview --port 10096 --host", "deploy": "./deploy.sh", - "start": "./start.sh" + "start": "./start.sh", + "install-app": "./install.sh", + "uninstall": "./uninstall.sh" }, "dependencies": { "@applemusic-like-lyrics/core": "^0.2.0", diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..0da0788 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# QZMusic-Web 卸载脚本 +# 完全删除所有QZMusic部署文件和配置 + +set -e + +echo "==========================================" +echo " QZMusic-Web 卸载工具" +echo "==========================================" +echo "" + +# 配置 +INSTALL_DIR="/opt/QZMusic-Web" +PORT=10096 +SERVICE_NAME="qzmusic-web" + +# 颜色定义 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 确认卸载 +echo "⚠️ 即将卸载 QZMusic-Web" +echo "" +read -p "确定要删除所有相关文件吗?(yes/no): " confirm + +if [ "$confirm" != "yes" ]; then + log_info "取消卸载" + exit 0 +fi + +echo "" + +# 停止服务 +log_info "正在停止服务..." + +# 停止开发服务器 +PID=$(lsof -ti:$PORT 2>/dev/null || true) +if [ -n "$PID" ]; then + log_info "停止进程 (PID: $PID)..." + kill $PID 2>/dev/null || true + sleep 1 +fi + +# 停止Systemd服务(如果存在) +if systemctl is-active --quiet $SERVICE_NAME 2>/dev/null; then + log_info "停止 Systemd 服务..." + sudo systemctl stop $SERVICE_NAME + sudo systemctl disable $SERVICE_NAME +fi + +# 删除Systemd服务文件 +if [ -f "/etc/systemd/system/$SERVICE_NAME.service" ]; then + log_info "删除 Systemd 服务文件..." + sudo rm -f /etc/systemd/system/$SERVICE_NAME.service + sudo systemctl daemon-reload +fi + +echo "" + +# 删除安装目录 +if [ -d "$INSTALL_DIR" ]; then + log_info "删除安装目录: $INSTALL_DIR" + sudo rm -rf "$INSTALL_DIR" +fi + +# 删除npm全局链接(如果有) +if npm list -g --depth=0 2>/dev/null | grep -q "qzmusic-web"; then + log_info "删除 npm 全局包..." + sudo npm uninstall -g qzmusic-web 2>/dev/null || true +fi + +# 删除相关缓存 +log_info "清理缓存..." + +# 删除npm缓存 +if [ -d "$HOME/.npm/_cacache" ]; then + npm cache clean --force 2>/dev/null || true +fi + +# 删除可能的临时文件 +sudo rm -rf /tmp/QZMusic* 2>/dev/null || true +sudo rm -rf /var/tmp/QZMusic* 2>/dev/null || true + +echo "" +echo "==========================================" +echo " ✅ 卸载完成!" +echo "==========================================" +echo "" +echo "已删除:" +echo " - 安装目录: $INSTALL_DIR" +echo " - 服务端口: $PORT" +echo " - 相关缓存" +echo "" +echo "如需重新安装,请运行:" +echo " bash <(curl -sL http://171.80.3.149:4321/miao-moe/QZMusic-Web/raw/branch/master/install.sh)" +echo ""