#!/bin/bash # 编译并部署 miao-front(用户端 API)到 shccd159 云服务器 # 部署前在云服务器上备份原有 jar # 使用: ./shell/deploy-front-shccd159.sh(在 backend 目录下) # 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-front-shccd159.sh set -e ENV_NAME="shccd159" SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" DEPLOY_CONF="$BACKEND_DIR/deploy.conf" # 解析 shccd159 段配置(从 shccd159 到文件末尾) get_conf() { sed -n '/^shccd159:/,$p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2- } SERVER_HOST=$(get_conf SERVER_HOST) SERVER_USER=$(get_conf SERVER_USER) SERVER_PORT=$(get_conf SERVER_PORT) REMOTE_DIR_JAR=$(get_conf REMOTE_DIR_JAR) FRONT_JAR_NAME=$(get_conf FRONT_JAR_NAME) FRONT_LOCAL_PORT=$(get_conf FRONT_LOCAL_PORT) SPRING_PROFILE="${ENV_NAME}" [[ -z "$SERVER_HOST" ]] && SERVER_HOST=182.92.78.159 [[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/javaapi [[ -z "$FRONT_JAR_NAME" ]] && FRONT_JAR_NAME=miao-front-2.2.jar [[ -z "$FRONT_LOCAL_PORT" ]] && FRONT_LOCAL_PORT=30031 [[ -z "$SERVER_USER" ]] && SERVER_USER=root [[ -z "$SERVER_PORT" ]] && SERVER_PORT=22 JAR_PATH="$BACKEND_DIR/crmeb-front/target/$FRONT_JAR_NAME" REMOTE_JAR="$REMOTE_DIR_JAR/$FRONT_JAR_NAME" [[ -f "$SSH_IDENTITY" ]] && SSH_OPTS=(-o "IdentityFile=$SSH_IDENTITY") || SSH_OPTS=() SSH_CMD=(ssh "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -p "$SERVER_PORT" "$SERVER_USER@$SERVER_HOST") SCP_CMD=(scp "${SSH_OPTS[@]}" -o StrictHostKeyChecking=accept-new -P "$SERVER_PORT") BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)" echo "=== 部署 miao-front(用户端 API)到 $ENV_NAME 云服务器 ===" echo " 服务器: $SERVER_USER@$SERVER_HOST" echo " 目标目录: $REMOTE_DIR_JAR" echo " Profile: $SPRING_PROFILE" echo "" echo "=== 1. 编译 crmeb-front(miao-front-2.2.jar)===" cd "$BACKEND_DIR" mvn clean package -pl crmeb-front -am -DskipTests -q echo "已生成: $JAR_PATH" [[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; } echo "" echo "=== 2. 云服务器备份原有 jar ===" "${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP set -e mkdir -p "$REMOTE_DIR_JAR/backups" if [ -f "$REMOTE_JAR" ]; then cp -a "$REMOTE_JAR" "$REMOTE_DIR_JAR/backups/${FRONT_JAR_NAME}.${BACKUP_SUFFIX}" echo "已备份: $REMOTE_DIR_JAR/backups/${FRONT_JAR_NAME}.${BACKUP_SUFFIX}" else echo "远程无原有 jar,跳过备份" fi REMOTE_BACKUP echo "" echo "=== 3. 上传 $FRONT_JAR_NAME 到 $REMOTE_DIR_JAR ===" "${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/" echo "jar 上传完成." echo "" echo "=== 4. 远程重启 miao-front 服务 (profile=$SPRING_PROFILE, port=$FRONT_LOCAL_PORT) ===" "${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \ (pkill -f $FRONT_JAR_NAME || true) && \ sleep 2 && \ nohup java -Xms128m -Xmx256m -jar $FRONT_JAR_NAME --spring.profiles.active=$SPRING_PROFILE --server.port=$FRONT_LOCAL_PORT > front.log 2>&1 & \ sleep 3 && \ (pgrep -f $FRONT_JAR_NAME && echo 'miao-front 已启动' || (echo '启动可能失败,请检查 front.log'; tail -20 front.log))" echo "" echo "=== miao-front 部署完成 ==="