Files
my-mom-system/deploy/deploy-backend.sh
panchengyong 951f49cb17 feat: 添加部署脚本、Maven Wrapper 和 mom-frontend-vue2 项目
- deploy/: 后端、ERP前端、MOM前端部署脚本
- mom-backend: Maven Wrapper 支持无全局 Maven 构建
- mom-frontend-vue2: MES 管理前端 Vue2 项目

Made-with: Cursor
2026-03-14 09:02:20 +08:00

95 lines
4.1 KiB
Bash
Executable File
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
# =============================================================================
# 后端 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 "============================================"