#!/bin/bash ############################################################################### # 脚本名称:label_web_deploy.sh # 功能描述:部署前端应用到 Nginx,包含备份旧版本、替换新版本、清理临时文件 # 使用说明: # 1. 修改下方的【配置区域】变量以匹配实际服务器路径 # 2. 确保服务器已安装 zip 和 unzip 工具 (yum install zip unzip -y) # 3. 赋予执行权限:chmod +x label_web_deploy.sh # 4. 执行脚本:./label_web_deploy.sh ############################################################################### # ======================= 【配置区域】 ======================= # 部署临时目录 (存放待部署的 lq_label_dist.zip) put_tmp_directory="/home/lq/lq_workspace/LQLabelServer/deploy_tmp" # Nginx 部署目录 (网站根目录) nginx_html_directory="/home/lq/nginx/html_app" # 备份目录 (存放旧版本压缩包) nginx_html_bak="/home/lq/lq_workspace/deploy_workspace/deploy_bak/LQLabelServer" # 目标文件夹名称 (nginx 部署目录下需要备份和覆盖的文件夹名) TARGET_FOLDER_NAME="lq_label" # ======================= 【脚本逻辑】 ======================= # 1. 定义时间变量 (格式:yyyy-MM-dd_HH-MM-SS,避免冒号导致文件名问题) TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") # 2. 定义备份文件统一名称 (修正了需求中文件名不一致的问题,确保能正确删除) BACKUP_ZIP_NAME="lq_label_bak_${TIMESTAMP}.zip" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${YELLOW}=========================================${NC}" echo -e "${YELLOW}开始打包前端应用,时间:${TIMESTAMP}${NC}" echo -e "${YELLOW}=========================================${NC}" ./web_label_build_zip.sh # --- 前置检查 --- if [ ! -d "$put_tmp_directory" ]; then echo -e "${RED}错误:部署临时目录不存在:$put_tmp_directory${NC}" exit 1 fi if [ ! -f "${put_tmp_directory}/lq_label_dist.zip" ]; then echo -e "${RED}错误:未找到待部署包:${put_tmp_directory}/lq_label_dist.zip${NC}" exit 1 fi if [ ! -d "$nginx_html_directory" ]; then echo -e "${RED}错误:Nginx 部署目录不存在:$nginx_html_directory${NC}" exit 1 fi echo -e "${YELLOW}=========================================${NC}" echo -e "${YELLOW}开始部署前端应用,时间:${TIMESTAMP}${NC}" echo -e "${YELLOW}=========================================${NC}" # 创建备份目录(如果不存在) mkdir -p "$nginx_html_bak" # --- 2.1 备份现有版本 --- # 进入 Nginx 目录 cd "$nginx_html_directory" || exit 1 # 检查是否存在需要备份的文件夹 if [ -d "$TARGET_FOLDER_NAME" ]; then echo -e "${GREEN}[2.1] 正在压缩备份 ${TARGET_FOLDER_NAME} ...${NC}" # 使用 zip 递归压缩,文件名统一使用 BACKUP_ZIP_NAME zip -r "$BACKUP_ZIP_NAME" "$TARGET_FOLDER_NAME" if [ $? -ne 0 ]; then echo -e "${RED}错误:压缩备份失败${NC}" exit 1 fi else echo -e "${YELLOW}[2.1] 警告:未找到 ${TARGET_FOLDER_NAME} 目录,跳过备份压缩${NC}" # 即使没有旧版本,也创建一个空标记或继续,这里选择继续 touch "$BACKUP_ZIP_NAME" # 创建一个空文件占位,防止后续脚本报错,或者干脆不创建 BACKUP_ZIP_NAME="" # 标记无需后续处理 fi # --- 2.2 将压缩好的文件 Copy 到备份目录 --- if [ -n "$BACKUP_ZIP_NAME" ] && [ -f "$BACKUP_ZIP_NAME" ]; then echo -e "${GREEN}[2.2] 正在将备份文件复制到 ${nginx_html_bak} ...${NC}" # 需求中 2.2 文件名略有不同,这里为了逻辑通顺,保持原名复制,或按需重命名 # 这里执行复制操作 cp "$BACKUP_ZIP_NAME" "$nginx_html_bak/" if [ $? -ne 0 ]; then echo -e "${RED}错误:复制备份文件失败${NC}" exit 1 fi fi # --- 2.3 删除工作目录下压缩的文件 --- if [ -n "$BACKUP_ZIP_NAME" ] && [ -f "$BACKUP_ZIP_NAME" ]; then echo -e "${GREEN}[2.3] 正在清理工作目录下的备份压缩包 ...${NC}" rm -f "$BACKUP_ZIP_NAME" fi # --- 2.4 Copy 部署临时目录下 lq_label_dist.zip 到 nginx 部署目录下 --- echo -e "${GREEN}[2.4] 正在上传新版本包到部署目录 ...${NC}" cp "${put_tmp_directory}/lq_label_dist.zip" "$nginx_html_directory/" if [ $? -ne 0 ]; then echo -e "${RED}错误:复制新版本包失败${NC}" exit 1 fi # --- 2.5 使用 unzip 解压缩,完成后删除 lq_label_dist.zip --- echo -e "${GREEN}[2.5] 正在解压缩新版本并清理 ...${NC}" cd "$nginx_html_directory" || exit 1 # -o 表示覆盖现有文件而不提示 unzip -o lq_label_dist.zip if [ $? -ne 0 ]; then echo -e "${RED}错误:解压缩失败${NC}" exit 1 fi # 删除部署包 rm -f lq_label_dist.zip echo -e "${GREEN}=========================================${NC}" echo -e "${GREEN}部署完成!${NC}" echo -e "${GREEN}=========================================${NC}"