diff --git a/backend/shell/deploy-front-by80.sh b/backend/shell/deploy-front-by80.sh new file mode 100755 index 0000000..d2040c3 --- /dev/null +++ b/backend/shell/deploy-front-by80.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# 编译并部署 miao-front(用户端 API)到 by80 云服务器 +# 部署前在云服务器上备份原有 jar +# 使用: ./shell/deploy-front-by80.sh(在 backend 目录下) +# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-front-by80.sh + +set -e +ENV_NAME="by80" +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" + +# 解析 by80 段配置(deploy.conf 中 by80 段到 miao33 段之前的 KEY=value) +get_conf() { + sed -n '1,/^miao33:/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="miao80" + +[[ -z "$SERVER_HOST" ]] && SERVER_HOST=123.56.214.80 +[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/crmeb +[[ -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 部署完成 ==="