Files
track/deploy.sh
duxingchen ccc5a23a77 deploy: Track 部署脚本改为免 sudo(与 MOM deploy_code.sh 一致)
- 去掉所有 sudo 与 ssh -t
- 前提:服务器 /opt/Track 属主改为 dxc(一次性 chown)
2026-09-01 18:26:53 +08:00

86 lines
3.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "==================================================="