Files
integral-shop/backend/shell/deploy-admin-miao33.sh

121 lines
5.4 KiB
Bash
Executable File
Raw 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
# 编译前后端,使用 spring profile miao33 打包 miao-admin-2.2.jar
# 备份远程原有文件后通过 SSH 上传并重启admin jar + admin 后台静态)
# 一次性配置免密: ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@8.152.170.46
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-miao33.sh
# 使用: ./shell/deploy-admin-miao33.sh在 backend 目录下)
set -e
SSH_IDENTITY="${SSH_IDENTITY:-$HOME/.ssh/id_ed25519_crmeb_deploy}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)"
FRONTEND_DIR="$ROOT_DIR/frontend"
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
# 解析 miao33 段配置deploy.conf 中 miao33 段到 miao50 段之间的 KEY=value
get_conf() {
sed -n '/^miao33:/,/^miao50:/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)
REMOTE_DIR_ADMIN=$(get_conf REMOTE_DIR_ADMIN)
ADMIN_JAR_NAME=$(get_conf ADMIN_JAR_NAME)
ADMIN_LOCAL_PORT=$(get_conf ADMIN_LOCAL_PORT)
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=8.152.170.46
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/crmeb
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/jfadmin.xiashengjun.com
[[ -z "$ADMIN_JAR_NAME" ]] && ADMIN_JAR_NAME=miao-admin-2.2.jar
[[ -z "$ADMIN_LOCAL_PORT" ]] && ADMIN_LOCAL_PORT=30032
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
JAR_PATH="$BACKEND_DIR/crmeb-admin/target/$ADMIN_JAR_NAME"
REMOTE_JAR="$REMOTE_DIR_JAR/$ADMIN_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)"
APP_YML="$BACKEND_DIR/crmeb-admin/src/main/resources/application.yml"
echo "=== 1. 设置 spring.profiles.active=miao33 后编译后端 ==="
cd "$BACKEND_DIR"
# 打包前临时改为 miao33编译后恢复兼容 Linux/macOS
if [[ -f "$APP_YML" ]]; then
cp -a "$APP_YML" "${APP_YML}.bak"
sed 's/active: *miao[0-9]*/active: miao33/' "$APP_YML" > "${APP_YML}.new" && mv "${APP_YML}.new" "$APP_YML"
trap 'cp -a "${APP_YML}.bak" "$APP_YML"; rm -f "${APP_YML}.bak"; trap - EXIT' EXIT
fi
mvn clean package -pl crmeb-admin -am -DskipTests -q
echo "已生成: $JAR_PATH"
[[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; }
# 恢复 application.yml
if [[ -f "${APP_YML}.bak" ]]; then cp -a "${APP_YML}.bak" "$APP_YML"; rm -f "${APP_YML}.bak"; trap - EXIT; fi
echo ""
echo "=== 2. 检查前端 API 地址 (frontend/.env.production) ==="
VUE_APP_BASE_API_EXPECTED=$(get_conf VUE_APP_BASE_API_EXPECTED)
if [[ -n "$VUE_APP_BASE_API_EXPECTED" ]]; then
ENV_FILE="$FRONTEND_DIR/.env.production"
CURRENT_API=$(grep -E '^[[:space:]]*VUE_APP_BASE_API[[:space:]]*=' "$ENV_FILE" 2>/dev/null | head -1 | sed -E "s/^[^=]*=[[:space:]]*['\"]?([^'\"]*)['\"]?[[:space:]]*/\1/" | tr -d ' ')
if [[ "$CURRENT_API" != "$VUE_APP_BASE_API_EXPECTED" ]]; then
echo "错误: 打包前请确认 API 接口地址为本项目的。"
echo " 当前 frontend/.env.production: VUE_APP_BASE_API = '$CURRENT_API'"
echo " miao33 期望: VUE_APP_BASE_API = '$VUE_APP_BASE_API_EXPECTED'"
echo "请修改 frontend/.env.production 后重新执行。"
exit 1
fi
echo "已确认 VUE_APP_BASE_API = '$CURRENT_API'"
fi
echo ""
echo "=== 3. 编译前端 (admin 后台) ==="
cd "$FRONTEND_DIR"
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider"
npm run build:prod
echo "已生成: $FRONTEND_DIR/dist"
[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; }
echo ""
echo "=== 4. 远程备份原有文件 ==="
"${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/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
echo "已备份 jar: $REMOTE_DIR_JAR/backups/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
fi
if [ -d "$REMOTE_DIR_ADMIN" ] && [ "\$(ls -A $REMOTE_DIR_ADMIN 2>/dev/null)" ]; then
BACKUP_TAR="$REMOTE_DIR_ADMIN/../jfadmin_${BACKUP_SUFFIX}.tar.gz"
tar -czf "\$BACKUP_TAR" -C "$REMOTE_DIR_ADMIN" .
echo "已备份后台静态: \$BACKUP_TAR"
fi
REMOTE_BACKUP
echo ""
echo "=== 5. 上传 $ADMIN_JAR_NAME$REMOTE_DIR_JAR ==="
"${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/"
echo "jar 上传完成."
echo ""
echo "=== 6. 上传 admin 后台静态 (dist) 到 $REMOTE_DIR_ADMIN ==="
"${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && (rm -rf ${REMOTE_DIR_ADMIN}/* ${REMOTE_DIR_ADMIN}/.??* 2>/dev/null; true)"
(cd "$FRONTEND_DIR/dist" && tar cf - .) | "${SSH_CMD[@]}" "mkdir -p $REMOTE_DIR_ADMIN && cd $REMOTE_DIR_ADMIN && tar xf -"
echo "后台静态上传完成."
echo ""
echo "=== 7. 远程重启 admin 服务 (profile=miao33, port=$ADMIN_LOCAL_PORT) ==="
"${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \
(pkill -f $ADMIN_JAR_NAME || true) && \
sleep 2 && \
nohup java -jar $ADMIN_JAR_NAME --spring.profiles.active=miao33 --server.port=$ADMIN_LOCAL_PORT > admin.log 2>&1 & \
sleep 3 && \
(pgrep -f $ADMIN_JAR_NAME && echo 'Admin 进程已启动' || echo '请检查 admin.log 启动是否失败')"
echo ""
echo "=== miao33 部署完成 ==="