label_web_deploy.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/bin/bash
  2. ###############################################################################
  3. # 脚本名称:label_web_deploy.sh
  4. # 功能描述:部署前端应用到 Nginx,包含备份旧版本、替换新版本、清理临时文件
  5. # 使用说明:
  6. # 1. 修改下方的【配置区域】变量以匹配实际服务器路径
  7. # 2. 确保服务器已安装 zip 和 unzip 工具 (yum install zip unzip -y)
  8. # 3. 赋予执行权限:chmod +x label_web_deploy.sh
  9. # 4. 执行脚本:./label_web_deploy.sh
  10. ###############################################################################
  11. # ======================= 【配置区域】 =======================
  12. # 部署临时目录 (存放待部署的 lq_label_dist.zip)
  13. put_tmp_directory="/home/lq/lq_workspace/LQLabelServer/deploy_tmp"
  14. # Nginx 部署目录 (网站根目录)
  15. nginx_html_directory="/home/lq/nginx/html_app"
  16. # 备份目录 (存放旧版本压缩包)
  17. nginx_html_bak="/home/lq/lq_workspace/deploy_workspace/deploy_bak/LQLabelServer"
  18. # 目标文件夹名称 (nginx 部署目录下需要备份和覆盖的文件夹名)
  19. TARGET_FOLDER_NAME="lq_label"
  20. # ======================= 【脚本逻辑】 =======================
  21. # 1. 定义时间变量 (格式:yyyy-MM-dd_HH-MM-SS,避免冒号导致文件名问题)
  22. TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
  23. # 2. 定义备份文件统一名称 (修正了需求中文件名不一致的问题,确保能正确删除)
  24. BACKUP_ZIP_NAME="lq_label_bak_${TIMESTAMP}.zip"
  25. # 颜色定义
  26. RED='\033[0;31m'
  27. GREEN='\033[0;32m'
  28. YELLOW='\033[1;33m'
  29. NC='\033[0m' # No Color
  30. echo -e "${YELLOW}=========================================${NC}"
  31. echo -e "${YELLOW}开始打包前端应用,时间:${TIMESTAMP}${NC}"
  32. echo -e "${YELLOW}=========================================${NC}"
  33. ./web_label_build_zip.sh
  34. # --- 前置检查 ---
  35. if [ ! -d "$put_tmp_directory" ]; then
  36. echo -e "${RED}错误:部署临时目录不存在:$put_tmp_directory${NC}"
  37. exit 1
  38. fi
  39. if [ ! -f "${put_tmp_directory}/lq_label_dist.zip" ]; then
  40. echo -e "${RED}错误:未找到待部署包:${put_tmp_directory}/lq_label_dist.zip${NC}"
  41. exit 1
  42. fi
  43. if [ ! -d "$nginx_html_directory" ]; then
  44. echo -e "${RED}错误:Nginx 部署目录不存在:$nginx_html_directory${NC}"
  45. exit 1
  46. fi
  47. echo -e "${YELLOW}=========================================${NC}"
  48. echo -e "${YELLOW}开始部署前端应用,时间:${TIMESTAMP}${NC}"
  49. echo -e "${YELLOW}=========================================${NC}"
  50. # 创建备份目录(如果不存在)
  51. mkdir -p "$nginx_html_bak"
  52. # --- 2.1 备份现有版本 ---
  53. # 进入 Nginx 目录
  54. cd "$nginx_html_directory" || exit 1
  55. # 检查是否存在需要备份的文件夹
  56. if [ -d "$TARGET_FOLDER_NAME" ]; then
  57. echo -e "${GREEN}[2.1] 正在压缩备份 ${TARGET_FOLDER_NAME} ...${NC}"
  58. # 使用 zip 递归压缩,文件名统一使用 BACKUP_ZIP_NAME
  59. zip -r "$BACKUP_ZIP_NAME" "$TARGET_FOLDER_NAME"
  60. if [ $? -ne 0 ]; then
  61. echo -e "${RED}错误:压缩备份失败${NC}"
  62. exit 1
  63. fi
  64. else
  65. echo -e "${YELLOW}[2.1] 警告:未找到 ${TARGET_FOLDER_NAME} 目录,跳过备份压缩${NC}"
  66. # 即使没有旧版本,也创建一个空标记或继续,这里选择继续
  67. touch "$BACKUP_ZIP_NAME" # 创建一个空文件占位,防止后续脚本报错,或者干脆不创建
  68. BACKUP_ZIP_NAME="" # 标记无需后续处理
  69. fi
  70. # --- 2.2 将压缩好的文件 Copy 到备份目录 ---
  71. if [ -n "$BACKUP_ZIP_NAME" ] && [ -f "$BACKUP_ZIP_NAME" ]; then
  72. echo -e "${GREEN}[2.2] 正在将备份文件复制到 ${nginx_html_bak} ...${NC}"
  73. # 需求中 2.2 文件名略有不同,这里为了逻辑通顺,保持原名复制,或按需重命名
  74. # 这里执行复制操作
  75. cp "$BACKUP_ZIP_NAME" "$nginx_html_bak/"
  76. if [ $? -ne 0 ]; then
  77. echo -e "${RED}错误:复制备份文件失败${NC}"
  78. exit 1
  79. fi
  80. fi
  81. # --- 2.3 删除工作目录下压缩的文件 ---
  82. if [ -n "$BACKUP_ZIP_NAME" ] && [ -f "$BACKUP_ZIP_NAME" ]; then
  83. echo -e "${GREEN}[2.3] 正在清理工作目录下的备份压缩包 ...${NC}"
  84. rm -f "$BACKUP_ZIP_NAME"
  85. fi
  86. # --- 2.4 Copy 部署临时目录下 lq_label_dist.zip 到 nginx 部署目录下 ---
  87. echo -e "${GREEN}[2.4] 正在上传新版本包到部署目录 ...${NC}"
  88. cp "${put_tmp_directory}/lq_label_dist.zip" "$nginx_html_directory/"
  89. if [ $? -ne 0 ]; then
  90. echo -e "${RED}错误:复制新版本包失败${NC}"
  91. exit 1
  92. fi
  93. # --- 2.5 使用 unzip 解压缩,完成后删除 lq_label_dist.zip ---
  94. echo -e "${GREEN}[2.5] 正在解压缩新版本并清理 ...${NC}"
  95. cd "$nginx_html_directory" || exit 1
  96. # -o 表示覆盖现有文件而不提示
  97. unzip -o lq_label_dist.zip
  98. if [ $? -ne 0 ]; then
  99. echo -e "${RED}错误:解压缩失败${NC}"
  100. exit 1
  101. fi
  102. # 删除部署包
  103. rm -f lq_label_dist.zip
  104. echo -e "${GREEN}=========================================${NC}"
  105. echo -e "${GREEN}部署完成!${NC}"
  106. echo -e "${GREEN}=========================================${NC}"