#!/bin/bash # === 配置项 === SERVER="dxc@172.16.0.198" REMOTE_DIR="/opt/inventory-app" TIMESTAMP=$(date +%Y%m%d_%H%M) # 核心魔法:只定义你要发布的具体文件列表! FILES_TO_DEPLOY=( "inventory-backend/app/api/v1/inbound/base.py" "inventory-backend/app/services/inbound/base_service.py" "inventory-web/src/api/material_base.ts" "inventory-web/src/components/SpecHelper/index.vue" "inventory-web/src/layout/index.vue" ) echo "===================================================" echo "🚀 开始【局部补丁】部署 (仅覆盖特定的 ${#FILES_TO_DEPLOY[@]} 个文件)" echo "===================================================" # 1. 本地精准打包 echo "[1/3] 正在提取指定文件并打包..." # tar 打包时会自动保留文件的原有目录结构 tar -czf patch.tar.gz "${FILES_TO_DEPLOY[@]}" if [ $? -ne 0 ]; then echo "❌ 打包失败,请检查文件列表中的路径是否正确!"; exit 1; fi # 2. 传输到生产环境的 /tmp 目录 echo "[2/3] 正在传输补丁包到服务器..." scp patch.tar.gz $SERVER:/tmp/patch.tar.gz # 3. 服务器执行覆盖与重启 echo "[3/3] 正在服务器上覆盖指定文件并热更新 (可能需要输入密码)..." # 注意:这里直接在 $REMOTE_DIR 解压,tar 会按照原路径精准覆盖那 5 个文件,绝对不碰别的! ssh -t $SERVER "cd $REMOTE_DIR && \ sudo tar -xzf /tmp/patch.tar.gz && \ sudo docker compose -f docker-compose.prod.yml build backend frontend && \ sudo docker compose -f docker-compose.prod.yml up -d backend frontend && \ sudo rm /tmp/patch.tar.gz" # 清理本地临时压缩包 rm patch.tar.gz echo "===================================================" echo "✅ 局部部署完成!请刷新服务器网页查看最新规格连号助手。" echo "==================================================="