#!/bin/bash # ============================================================ # Track 生产流转系统 — 增量部署脚本(免 sudo,与 MOM deploy_code.sh 一致) # 服务器: 172.16.0.198 # 路径: /opt/Track (需属主 dxc,见 README 一次性 chown) # 仅更新代码,不覆盖数据库 # ============================================================ set -e SERVER="dxc@172.16.0.198" REMOTE_DIR="/opt/Track" TIMESTAMP=$(date +%Y%m%d_%H%M) REMOTE_BACKUP_DIR="$REMOTE_DIR/backups/$TIMESTAMP" echo "===================================================" echo "🚀 Track 增量部署 — 仅更新代码" echo "===================================================" # 1. 远端备份 echo "[1/4] 服务器备份旧代码..." ssh $SERVER "mkdir -p $REMOTE_BACKUP_DIR && \ cd $REMOTE_DIR && \ echo '>> 备份当前代码...' && \ # ★ 必须排除大目录:否则会把 backend/venv(140M)+frontend/node_modules(519M)一起打包,备份极慢 tar -czf $REMOTE_BACKUP_DIR/code_backup.tar.gz \ --exclude='backend/venv' \ --exclude='backend/.venv' \ --exclude='backend/__pycache__' \ --exclude='backend/.env' \ --exclude='backend/uploads' \ --exclude='frontend/node_modules' \ --exclude='frontend/dist' \ backend frontend docker-compose.prod.yml 2>/dev/null || true && \ echo '>> 保留最近 3 个备份...' && \ cd $REMOTE_DIR/backups && \ sh -c 'ls -dt */ 2>/dev/null | tail -n +4 | xargs -I {} rm -rf {} || true'" if [ $? -ne 0 ]; then echo "❌ 备份失败,终止!"; exit 1; fi # 2. 本地打包 echo "[2/4] 本地打包代码..." tar -czf deploy.tar.gz \ --exclude="backend/venv" \ --exclude="backend/.venv" \ --exclude="backend/__pycache__" \ --exclude="backend/*.pyc" \ --exclude="backend/.env" \ --exclude="frontend/node_modules" \ --exclude="frontend/dist" \ --exclude=".git" \ --exclude=".idea" \ --exclude=".vscode" \ --exclude="track-uniapp/node_modules" \ --exclude="track-uniapp/dist" \ --exclude="track-uniapp/unpackage" \ backend frontend docker-compose.prod.yml FILESIZE=$(stat -c%s "deploy.tar.gz" 2>/dev/null || stat -f%z "deploy.tar.gz") echo ">> 打包完成: $((FILESIZE / 1024 / 1024)) MB" # 3. 上传 echo "[3/4] 上传到服务器..." scp deploy.tar.gz $SERVER:/tmp/deploy.tar.gz if [ $? -ne 0 ]; then echo "❌ 上传失败!"; rm -f deploy.tar.gz; exit 1; fi # 4. 替换重启 echo "[4/4] 服务器替换并重启..." ssh $SERVER "cd $REMOTE_DIR && \ echo '>> 移除旧备份...' && \ rm -rf backend_old frontend_old && \ echo '>> 保留当前为 old...' && \ (mv backend backend_old 2>/dev/null || true) && \ (mv frontend frontend_old 2>/dev/null || true) && \ echo '>> 解压新代码...' && \ mv /tmp/deploy.tar.gz . && \ tar -xzf deploy.tar.gz && \ echo '>> 重启 Docker...' && \ docker compose -f docker-compose.prod.yml up -d --build && \ rm deploy.tar.gz && \ echo '>> ✅ 部署完成!'" rm -f deploy.tar.gz echo "===================================================" echo "✅ 增量部署完成!访问 http://172.16.0.198:8010" echo "==================================================="