- 新增 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
114 lines
5.0 KiB
Bash
Executable File
114 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# 编译前后端,使用 spring profile miao80 打包 miao-admin-2.2.jar,
|
||
# 备份远程原有文件后通过 SSH 上传并重启(admin jar + admin 后台静态)
|
||
# 一次性配置免密: ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@123.56.214.80
|
||
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-by80.sh
|
||
# 使用: ./shell/deploy-admin-by80.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"
|
||
|
||
# 解析 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)
|
||
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=123.56.214.80
|
||
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/crmeb
|
||
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/jfadmin.bosenyuan.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=miao80) ==="
|
||
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 " by80 期望: 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"
|
||
# Node.js 17+ OpenSSL 兼容
|
||
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. 上传 miao-admin-2.2.jar 到 $REMOTE_DIR_JAR ==="
|
||
"${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/"
|
||
echo "jar 上传完成."
|
||
|
||
echo ""
|
||
echo "=== 6. 上传 admin 后台静态 (dist) 到 $REMOTE_DIR_ADMIN ==="
|
||
# 先清空远程目录再上传,避免残留旧文件(远程可能无 rsync,统一用 tar 管道)
|
||
"${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=miao80, 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=miao80 --server.port=$ADMIN_LOCAL_PORT > admin.log 2>&1 & \
|
||
sleep 3 && \
|
||
(pgrep -f $ADMIN_JAR_NAME && echo 'Admin 进程已启动' || echo '请检查 admin.log 启动是否失败')"
|
||
|
||
echo ""
|
||
echo "=== 部署完成 ==="
|