#!/bin/bash # ============================================ # RuoYi-Vue 后端部署脚本 # 使用方式: ./scripts/deploy/backend-deploy.sh # ============================================ set -e # 配置 APP_NAME="ruoyi-admin" DEPLOY_DIR="/opt/ruoyi" JAR_FILE="${DEPLOY_DIR}/${APP_NAME}.jar" BACKUP_DIR="${DEPLOY_DIR}/backup" LOG_DIR="${DEPLOY_DIR}/logs" PID_FILE="${DEPLOY_DIR}/${APP_NAME}.pid" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo_info() { echo -e "${GREEN}[INFO]${NC} $1" } echo_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } echo_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 JAR 文件 if [ ! -f "$1" ]; then echo_error "JAR 文件不存在: $1" exit 1 fi echo_info "========================================" echo_info "RuoYi-Vue 后端部署" echo_info "========================================" # 创建目录 mkdir -p $DEPLOY_DIR $BACKUP_DIR $LOG_DIR # 备份现有版本 if [ -f "$JAR_FILE" ]; then echo_info "备份现有版本..." cp $JAR_FILE ${BACKUP_DIR}/${APP_NAME}-$(date +%Y%m%d_%H%M%S).jar fi # 停止现有服务 if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo_info "停止现有服务 (PID: $PID)..." kill $PID sleep 5 # 强制停止 if ps -p $PID > /dev/null 2>&1; then echo_warn "服务未正常停止,强制终止..." kill -9 $PID fi fi fi # 部署新版本 echo_info "部署新版本..." cp $1 $JAR_FILE # 启动服务 echo_info "启动服务..." nohup java -jar \ -Dspring.profiles.active=prod \ -Xms512m -Xmx1024m \ $JAR_FILE \ > ${LOG_DIR}/app.log 2>&1 & echo $! > $PID_FILE echo_info "服务已启动 (PID: $(cat $PID_FILE))" # 等待启动 echo_info "等待服务启动..." sleep 10 # 健康检查 if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then echo_info "✅ 部署成功!服务运行正常" else echo_error "❌ 部署失败!服务未正常启动" echo_error "请查看日志: tail -f ${LOG_DIR}/app.log" exit 1 fi echo_info "========================================" echo_info "部署完成" echo_info "日志: ${LOG_DIR}/app.log" echo_info "========================================"