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