73 lines
3.3 KiB
Bash
73 lines
3.3 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# =============================================================================
|
|||
|
|
# erp-frontend-vue 前端部署脚本
|
|||
|
|
# 用法:在项目根目录 mom-system-2026/ 下执行 bash deploy/deploy-erp-frontend.sh
|
|||
|
|
# =============================================================================
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# ── 配置 ─────────────────────────────────────────────────────────────────────
|
|||
|
|
SERVER_USER="root"
|
|||
|
|
SERVER_HOST="118.31.75.148"
|
|||
|
|
SERVER_PORT=22
|
|||
|
|
REMOTE_DIR="/www/wwwroot/mymom.suzhouyuqi.com"
|
|||
|
|
BACKUP_DIR="${REMOTE_DIR}/backup"
|
|||
|
|
KEEP_BACKUPS=5
|
|||
|
|
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|||
|
|
FRONTEND_DIR="${PROJECT_ROOT}/erp-frontend-vue"
|
|||
|
|
DIST_DIR="${FRONTEND_DIR}/dist"
|
|||
|
|
|
|||
|
|
SSH="ssh -p ${SERVER_PORT} ${SERVER_USER}@${SERVER_HOST}"
|
|||
|
|
|
|||
|
|
export PATH="$HOME/.nvm/versions/node/v22.22.0/bin:$PATH"
|
|||
|
|
|
|||
|
|
# ── 工具函数 ──────────────────────────────────────────────────────────────────
|
|||
|
|
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
|
|||
|
|
info() { log "INFO $*"; }
|
|||
|
|
ok() { log "OK $*"; }
|
|||
|
|
err() { log "ERROR $*" >&2; exit 1; }
|
|||
|
|
|
|||
|
|
# ── 步骤 1:本地构建 ───────────────────────────────────────────────────────────
|
|||
|
|
info "Step 1/3 — Build erp-frontend-vue (production)"
|
|||
|
|
cd "${FRONTEND_DIR}"
|
|||
|
|
npm run build
|
|||
|
|
[ -d "${DIST_DIR}" ] || err "构建产物目录不存在: ${DIST_DIR}"
|
|||
|
|
ok "Build OK → ${DIST_DIR}"
|
|||
|
|
|
|||
|
|
# ── 步骤 2:远程备份旧版本 ─────────────────────────────────────────────────────
|
|||
|
|
info "Step 2/3 — Backup current deployment on remote server"
|
|||
|
|
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
|
|||
|
|
$SSH bash -s << EOF
|
|||
|
|
set -e
|
|||
|
|
mkdir -p "${BACKUP_DIR}"
|
|||
|
|
# 将当前站点目录(排除 backup/ 自身)打包为 tar.gz
|
|||
|
|
cd "${REMOTE_DIR}"
|
|||
|
|
FILES=\$(ls | grep -v '^backup$' || true)
|
|||
|
|
if [ -n "\$FILES" ]; then
|
|||
|
|
tar -czf "${BACKUP_DIR}/dist_${TIMESTAMP}.tar.gz" \$FILES
|
|||
|
|
echo " Backed up → ${BACKUP_DIR}/dist_${TIMESTAMP}.tar.gz"
|
|||
|
|
else
|
|||
|
|
echo " No existing files to backup (first deploy)"
|
|||
|
|
fi
|
|||
|
|
# 只保留最近 ${KEEP_BACKUPS} 个备份
|
|||
|
|
cd "${BACKUP_DIR}"
|
|||
|
|
ls -t | tail -n +$((${KEEP_BACKUPS} + 1)) | xargs -r rm -f
|
|||
|
|
echo " Backup dir now contains: \$(ls | wc -l) file(s)"
|
|||
|
|
EOF
|
|||
|
|
ok "Backup OK"
|
|||
|
|
|
|||
|
|
# ── 步骤 3:上传新版本 ─────────────────────────────────────────────────────────
|
|||
|
|
info "Step 3/3 — Upload dist to remote (rsync)"
|
|||
|
|
rsync -avz --delete \
|
|||
|
|
--exclude='backup' \
|
|||
|
|
-e "ssh -p ${SERVER_PORT}" \
|
|||
|
|
"${DIST_DIR}/" \
|
|||
|
|
"${SERVER_USER}@${SERVER_HOST}:${REMOTE_DIR}/"
|
|||
|
|
ok "Upload OK"
|
|||
|
|
|
|||
|
|
info "============================================"
|
|||
|
|
info "erp-frontend-vue 部署完成!"
|
|||
|
|
info "访问地址:http://${SERVER_HOST} 或 https://mymom.suzhouyuqi.com"
|
|||
|
|
info "============================================"
|