feat: 添加部署脚本、Maven Wrapper 和 mom-frontend-vue2 项目

- deploy/: 后端、ERP前端、MOM前端部署脚本
- mom-backend: Maven Wrapper 支持无全局 Maven 构建
- mom-frontend-vue2: MES 管理前端 Vue2 项目

Made-with: Cursor
This commit is contained in:
panchengyong
2026-03-14 09:02:20 +08:00
parent c317f836a3
commit 951f49cb17
1068 changed files with 277081 additions and 0 deletions

94
deploy/deploy-backend.sh Executable file
View File

@@ -0,0 +1,94 @@
#!/bin/bash
# =============================================================================
# 后端 API 服务部署脚本
# 用法:在项目根目录 mom-system-2026/ 下执行 bash deploy/deploy-backend.sh
# =============================================================================
set -e
# ── 配置 ─────────────────────────────────────────────────────────────────────
SERVER_USER="root"
SERVER_HOST="118.31.75.148"
SERVER_PORT=22
REMOTE_DIR="/www/wwwroot/javaapi"
JAR_NAME="ktg-admin.jar"
BACKUP_DIR="${REMOTE_DIR}/backup"
KEEP_BACKUPS=5
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
BACKEND_DIR="${PROJECT_ROOT}/mom-backend"
LOCAL_JAR="${BACKEND_DIR}/ktg-admin/target/${JAR_NAME}"
SSH="ssh -p ${SERVER_PORT} ${SERVER_USER}@${SERVER_HOST}"
SCP="scp -P ${SERVER_PORT}"
# ── 工具函数 ──────────────────────────────────────────────────────────────────
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
info() { log "INFO $*"; }
ok() { log "OK $*"; }
err() { log "ERROR $*" >&2; exit 1; }
# ── 步骤 1本地 Maven 构建 ────────────────────────────────────────────────────
info "Step 1/5 — Maven build (skip tests)"
cd "${BACKEND_DIR}"
mvn clean package -DskipTests -q
[ -f "${LOCAL_JAR}" ] || err "构建产物不存在: ${LOCAL_JAR}"
ok "Build OK → ${LOCAL_JAR}"
# ── 步骤 2远程备份旧 jar ──────────────────────────────────────────────────────
info "Step 2/5 — Backup old jar on remote server"
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
$SSH bash -s << EOF
set -e
mkdir -p "${BACKUP_DIR}"
if [ -f "${REMOTE_DIR}/${JAR_NAME}" ]; then
cp "${REMOTE_DIR}/${JAR_NAME}" "${BACKUP_DIR}/${JAR_NAME%.jar}_${TIMESTAMP}.jar"
echo " Backed up → ${BACKUP_DIR}/${JAR_NAME%.jar}_${TIMESTAMP}.jar"
else
echo " No existing jar 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/5 — Stop running ${JAR_NAME} process"
$SSH bash -s << 'EOF'
PID=$(pgrep -f "ktg-admin.jar" || true)
if [ -n "$PID" ]; then
kill "$PID"
sleep 3
echo " Stopped PID $PID"
else
echo " No running process found (safe)"
fi
EOF
ok "Stop OK"
# ── 步骤 4上传新 jar ─────────────────────────────────────────────────────────
info "Step 4/5 — Upload new jar to remote"
$SCP "${LOCAL_JAR}" "${SERVER_USER}@${SERVER_HOST}:${REMOTE_DIR}/${JAR_NAME}"
ok "Upload OK"
# ── 步骤 5启动新进程 ─────────────────────────────────────────────────────────
info "Step 5/5 — Start new ${JAR_NAME}"
$SSH bash -s << EOF
set -e
cd "${REMOTE_DIR}"
nohup java -Xms128m -Xmx256m -jar ${JAR_NAME} > mes.log 2>&1 &
sleep 2
PID=\$(pgrep -f "${JAR_NAME}" || true)
if [ -n "\$PID" ]; then
echo " Started PID \$PID"
else
echo " WARNING: process may not have started, check mes.log"
fi
EOF
ok "Start OK"
info "============================================"
info "后端部署完成访问日志tail -f ${REMOTE_DIR}/mes.log"
info "============================================"

72
deploy/deploy-erp-frontend.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/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 "============================================"

72
deploy/deploy-mom-frontend.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/bin/bash
# =============================================================================
# mom-frontend-vue2 前端部署脚本
# 用法:在项目根目录 mom-system-2026/ 下执行 bash deploy/deploy-mom-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}/mom-frontend-vue2"
DIST_DIR="${FRONTEND_DIR}/dist"
SSH="ssh -p ${SERVER_PORT} ${SERVER_USER}@${SERVER_HOST}"
# Node.js 17+ 与 Vue CLI 4 (webpack 4) 的 OpenSSL 兼容性修复
export NODE_OPTIONS="--openssl-legacy-provider --max-old-space-size=4096"
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 mom-frontend-vue2 (production)"
cd "${FRONTEND_DIR}"
npm run build:prod
[ -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"
# 清空远程目录(保留 backup再上传
$SSH "cd ${REMOTE_DIR} && find . -mindepth 1 -maxdepth 1 ! -name backup -exec rm -rf {} + 2>/dev/null || true"
scp -r -P ${SERVER_PORT} "${DIST_DIR}"/* "${SERVER_USER}@${SERVER_HOST}:${REMOTE_DIR}/"
ok "Upload OK"
info "============================================"
info "mom-frontend-vue2 部署完成!"
info "访问地址http://${SERVER_HOST} 或 https://mymom.suzhouyuqi.com"
info "============================================"