95 lines
4.1 KiB
Bash
95 lines
4.1 KiB
Bash
|
|
#!/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 "============================================"
|