From 8aa7551d0a58766c74860bacd81f22c9a9869a1a Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Sun, 18 May 2025 23:45:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E8=84=9A=E6=9C=AC=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=9E=84=E5=BB=BA=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在部署脚本中引入全局变量,增加前端构建的检查逻辑,避免不必要的重新构建。同时优化了错误处理流程,提升脚本的健壮性和可维护性。 --- start.sh | 65 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/start.sh b/start.sh index 933b62a8..6b585c96 100644 --- a/start.sh +++ b/start.sh @@ -1,16 +1,21 @@ #!/bin/bash +# 设置全局变量 +PROJECT_NAME="fastapi_vue3_admin" +WORK_DIR="/home" +GIT_REPO="https://gitee.com/tao__tao/fastapi_vue3_admin.git" + # 第一步:设置工作目录 echo "🔍 第一步:设置工作目录" -echo "⏳ 正在切换到工作目录 /home ..." -cd /home || { echo "❌ 无法切换到 /home 目录"; exit 1; } +echo "⏳ 正在切换到工作目录 ${WORK_DIR} ..." +cd "${WORK_DIR}" || { echo "❌ 无法切换到 ${WORK_DIR} 目录"; exit 1; } # 第二步:清理旧项目文件夹(如果存在) echo -e "\n🔍 第二步:清理旧项目文件夹(如存在)" -echo "⏳ 正在检查是否存在旧项目 fastapi_vue3_admin/ ..." -if [ -d "fastapi_vue3_admin/" ]; then - echo "🗑️ 正在删除旧项目文件夹 fastapi_vue3_admin/ ..." - rm -rf fastapi_vue3_admin/ +echo "⏳ 正在检查是否存在旧项目 ${PROJECT_NAME}/ ..." +if [ -d "${PROJECT_NAME}/" ]; then + echo "🗑️ 正在删除旧项目文件夹 ${PROJECT_NAME}/ ..." + rm -rf "${PROJECT_NAME}/" || { echo "❌ 删除旧项目文件夹失败"; exit 1; } echo "✅ 旧项目文件夹已成功删除。" else echo "✨ 未找到旧项目文件夹,跳过删除步骤。" @@ -19,32 +24,44 @@ fi # 第三步:克隆项目仓库 echo -e "\n🔍 第三步:克隆项目代码库" echo "📥 正在克隆项目代码库 ..." -git clone https://gitee.com/tao__tao/fastapi_vue3_admin.git -if [ $? -eq 0 ]; then - echo "✅ 项目克隆成功。" -else - echo "❌ 项目克隆失败" - exit 1 -fi +git clone "${GIT_REPO}" || { echo "❌ 项目克隆失败"; exit 1; } +echo "✅ 项目克隆成功。" # 第四步:进入项目根目录 echo -e "\n🔍 第四步:进入项目根目录" -echo "📁 正在进入项目目录 fastapi_vue3_admin ..." -cd fastapi_vue3_admin || { echo "❌ 无法进入项目目录"; exit 1; } +echo "📁 正在进入项目目录 ${PROJECT_NAME} ..." +cd "${PROJECT_NAME}" || { echo "❌ 无法进入项目目录"; exit 1; } # 第五步:停止并删除正在运行的容器 echo -e "\n🔍 第五步:停止并删除现有容器" echo "🛑 正在停止并删除现有容器 ..." -docker compose kill -docker compose rm -f +docker compose kill || { echo "⚠️ 停止容器失败,可能没有运行的容器"; } +docker compose rm -f || { echo "⚠️ 删除容器失败,可能没有容器可删除"; } echo "✅ 容器已停止并删除。" -# 第六步:重新构建并启动服务 -echo -e "\n🔍 第六步:构建镜像并启动容器" -echo "🏗️ 正在构建镜像并启动容器 ..." -docker compose build -docker compose up -d -echo "🚀 服务已成功构建并启动。" +# 第六步:打包前端项目 +echo -e "\n🔍 第六步: 打包前端工程" +echo "📦 正在检查前端是否需要重新构建..." + +# 检查是否需要重新构建 +if [ ! -d "frontend/dist" ] || [ "$(git diff --name-only HEAD~1 HEAD)" ]; then + echo "🔧 检测到代码变更,正在安装前端依赖并构建..." + cd frontend || { echo "❌ 无法进入前端目录"; exit 1; } + npm install || { echo "❌ 前端依赖安装失败"; exit 1; } + npm run build || { echo "❌ 前端工程打包失败"; exit 1; } + echo "✅ 前端工程打包成功。" + cd .. || { echo "❌ 无法返回项目根目录"; exit 1; } + + echo "🏗️ 正在构建镜像..." + docker compose build || { echo "❌ 镜像构建失败"; exit 1; } +else + echo "✨ 代码未变更,跳过构建步骤。" +fi + +docker compose up -d || { echo "❌ 容器启动失败"; exit 1; } +echo "🚀 服务已成功启动。" # 部署完成提示 -echo -e "\n🎉 部署流程已完成!" \ No newline at end of file +echo -e "\n🎉 部署流程已完成!" +echo "前端访问地址: http://8.137.99.5:80" +echo "后端API文档: http://8.137.99.5:8001/api/v1/docs" \ No newline at end of file