45 lines
1.8 KiB
Bash
45 lines
1.8 KiB
Bash
#!/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 "===================================================" |