70 lines
3.2 KiB
Bash
70 lines
3.2 KiB
Bash
#!/bin/bash
|
||
|
||
# ============================================
|
||
# 本机 → 服务器 rsync 回退部署(当服务器 git pull 超时/失败时使用)
|
||
# ============================================
|
||
# 使用方法(在项目根目录执行):
|
||
# export RSYNC_DEPLOY_PASSWORD='你的SSH密码' # 同 DEPLOY_QUICK.md 部署凭据
|
||
# bash backend/deploy/deploy-rsync-from-local.sh
|
||
# 或一行(密码同部署凭据):
|
||
# RSYNC_DEPLOY_PASSWORD='yangyichenYANGYICHENkaifa859' bash backend/deploy/deploy-rsync-from-local.sh
|
||
# ============================================
|
||
# 会做:rsync backend/ 到服务器(--delete),再在服务器执行 install/prisma/build/pm2 重启。
|
||
# ============================================
|
||
|
||
set -e
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
BACKEND_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
REPO_ROOT="$(cd "$BACKEND_ROOT/.." && pwd)"
|
||
|
||
SERVER_HOST="${RSYNC_DEPLOY_HOST:-120.55.112.195}"
|
||
SERVER_USER="${RSYNC_DEPLOY_USER:-root}"
|
||
SERVER_BACKEND="/var/www/wildgrowth-backend/backend"
|
||
|
||
if [ -z "$RSYNC_DEPLOY_PASSWORD" ]; then
|
||
echo "❌ 请设置 RSYNC_DEPLOY_PASSWORD(同 DEPLOY_QUICK.md 部署凭据密码)"
|
||
echo " export RSYNC_DEPLOY_PASSWORD='你的密码'"
|
||
echo " 或: RSYNC_DEPLOY_PASSWORD='...' bash backend/deploy/deploy-rsync-from-local.sh"
|
||
exit 1
|
||
fi
|
||
|
||
echo "═══════════════════════════════════════════════════════════"
|
||
echo " 📤 Rsync 回退部署:本机 backend/ → 服务器"
|
||
echo " 主机: $SERVER_USER@$SERVER_HOST"
|
||
echo "═══════════════════════════════════════════════════════════"
|
||
echo ""
|
||
|
||
# 1. rsync(--delete 保持服务器与本地一致,排除无需同步的目录)
|
||
echo "📂 步骤 1: rsync 同步(--delete)..."
|
||
export RSYNC_RSH="sshpass -p \"$RSYNC_DEPLOY_PASSWORD\" ssh -o StrictHostKeyChecking=no"
|
||
rsync -avz --delete \
|
||
--exclude=node_modules \
|
||
--exclude='.env*' \
|
||
--exclude=dist \
|
||
--exclude=.deploy-last \
|
||
--exclude=.git \
|
||
--exclude=public/uploads \
|
||
--exclude=logs \
|
||
"$BACKEND_ROOT/" "$SERVER_USER@$SERVER_HOST:$SERVER_BACKEND/"
|
||
unset RSYNC_RSH
|
||
|
||
echo "✅ 同步完成"
|
||
echo ""
|
||
|
||
# 2. 在服务器执行部署步骤(跳过 git pull)
|
||
echo "🔄 步骤 2: 在服务器执行 install / prisma / build / pm2 restart..."
|
||
if command -v sshpass >/dev/null 2>&1; then
|
||
sshpass -p "$RSYNC_DEPLOY_PASSWORD" ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_HOST" \
|
||
"cd $SERVER_BACKEND && SKIP_GIT_PULL=1 bash deploy/deploy-from-github.sh"
|
||
else
|
||
echo "⚠️ 未安装 sshpass,请手动 SSH 后执行:"
|
||
echo " cd $SERVER_BACKEND && SKIP_GIT_PULL=1 bash deploy/deploy-from-github.sh"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "═══════════════════════════════════════════════════════════"
|
||
echo " ✅ Rsync 回退部署完成"
|
||
echo "═══════════════════════════════════════════════════════════"
|