Files
integral-shop/backend/shell/deploy-admin-miao33.sh
apple 6e1bce929b miao33: 部署脚本、打包前 API 检查、文档与配置
- 新增 backend/shell/deploy-admin-miao33.sh(miao33 一键打包部署)
- deploy.conf 增加 VUE_APP_BASE_API_EXPECTED,miao33/by80 打包前校验前端 API 地址
- deploy-admin-by80.sh / deploy-admin-miao33.sh 增加步骤:检查 .env.production 中 VUE_APP_BASE_API
- backend/DEPLOY.md、frontend/DEPLOY.md 补充 miao33 与 API 检查说明
- frontend/.env.production、frontend/deploy.conf 同步 miao33 配置
- by80 脚本 get_conf 仅解析 by80 段

Made-with: Cursor
2026-03-12 22:00:34 +08:00

112 lines
4.9 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)"
echo "=== 1. 编译后端 (crmeb-admin, profile=miao33) ==="
cd "$BACKEND_DIR"
mvn clean package -pl crmeb-admin -am -DskipTests -q
echo "已生成: $JAR_PATH"
[[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; }
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 部署完成 ==="