feat: 拆分 admin 部署脚本,支持单独部署 API 或 Vue 前端
Made-with: Cursor
This commit is contained in:
@@ -9,9 +9,9 @@ ENV = 'development'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.wenjinhui.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
# shjjy153 项目
|
||||
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
|
||||
VUE_APP_BASE_API = 'http://jjy-jfadmin.uj345.com'
|
||||
# shccd159 项目
|
||||
VUE_APP_BASE_API = 'http://ccd-jfadmin.fwxgpt.com'
|
||||
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
|
||||
|
||||
|
||||
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
|
||||
|
||||
@@ -6,17 +6,14 @@ ENV = 'production'
|
||||
# VUE_APP_BASE_API = 'http://127.0.0.1:8080'
|
||||
# VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com'
|
||||
# miao33 项目
|
||||
<<<<<<<< HEAD:backend-adminend/.env.production
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
|
||||
|
||||
# shjjy153 项目
|
||||
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
|
||||
VUE_APP_BASE_API = 'http://jjy-jfadmin.uj345.com'
|
||||
|
||||
# shccd159 项目
|
||||
VUE_APP_BASE_API = 'http://ccd-jfadmin.fwxgpt.com'
|
||||
========
|
||||
VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
|
||||
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
|
||||
|
||||
|
||||
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
|
||||
>>>>>>>> origin/main:frontend/.env.production
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
| jar 包 | 对应前端 | 说明 |
|
||||
|--------|----------|------|
|
||||
| **miao-admin-2.2.jar** | `frontend`(admin 后台 Vue) | 管理后台 API + 后台静态站点 |
|
||||
| **miao-admin-2.2.jar** | `backend-adminend`(admin 后台 Vue) | 管理后台 API + 后台静态站点 |
|
||||
| **miao-front-2.2.jar** | `single_uniapp22miao`(用户端 H5/uni-app) | 积分商城、用户端 API |
|
||||
|
||||
### 4 个子项目(可单独打包部署)
|
||||
@@ -19,7 +19,7 @@
|
||||
|--------|------|----------|------|
|
||||
| **crmeb-admin** | `miao-admin-2.2.jar` | `mvn clean package -pl crmeb-admin -am -DskipTests` | 管理后台后端 |
|
||||
| **crmeb-front** | `miao-front-2.2.jar` | `mvn clean package -pl crmeb-front -am -DskipTests` | 用户端 API |
|
||||
| **frontend** | `frontend/dist` | `npm run build:prod` | 管理后台前端静态 |
|
||||
| **backend-adminend** | `backend-adminend/dist` | `npm run build:prod` | 管理后台前端静态 |
|
||||
| **single_uniapp22miao** | `single_uniapp22miao/unpackage/dist/build/h5` | `npm run build:h5` | 用户端 H5 静态 |
|
||||
|
||||
---
|
||||
@@ -69,13 +69,13 @@ mvn clean package -pl crmeb-front -am -DskipTests
|
||||
# 产出:backend/crmeb-front/target/miao-front-2.2.jar
|
||||
```
|
||||
|
||||
### 3. 仅打包 admin 后台前端(frontend)
|
||||
### 3. 仅打包 admin 后台前端(backend-adminend)
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
cd backend-adminend
|
||||
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider" # Node 17+ 需要
|
||||
npm run build:prod
|
||||
# 产出:frontend/dist
|
||||
# backend-adminend/dist
|
||||
```
|
||||
|
||||
### 4. 仅打包用户端 H5 前端(single_uniapp22miao)
|
||||
@@ -135,10 +135,10 @@ cd backend
|
||||
| 步骤 | 说明 |
|
||||
|------|------|
|
||||
| 1 | 编译 crmeb-admin,生成 miao-admin-2.2.jar |
|
||||
| 2 | 编译 frontend,生成 dist |
|
||||
| 2 | 编译 backend-adminend,生成 dist |
|
||||
| 3 | 远程备份原有 jar 与后台静态 |
|
||||
| 4 | 上传 miao-admin-2.2.jar 到 REMOTE_DIR_JAR |
|
||||
| 5 | 上传 frontend/dist 到 REMOTE_DIR_ADMIN |
|
||||
| 5 | 上传 backend-adminend/dist 到 REMOTE_DIR_ADMIN |
|
||||
| 6 | 远程重启 admin 服务(profile=miao80, port=30032) |
|
||||
|
||||
---
|
||||
@@ -163,14 +163,49 @@ ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@182.92.78.159
|
||||
|
||||
---
|
||||
|
||||
## 七、其他环境
|
||||
## 七、shjjy153 环境 admin 部署(可拆分)
|
||||
|
||||
shjjy153 支持 admin 全量部署,也可**单独部署 API 或 Vue 前端**。
|
||||
|
||||
### 1. 全量部署(API + Vue)
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
./shell/deploy-admin-shjjy153.sh
|
||||
```
|
||||
|
||||
依次执行 `deploy-admin-api-shjjy153.sh` 和 `deploy-admin-vue-shjjy153.sh`。
|
||||
|
||||
### 2. 仅部署 miao-admin API(miao-admin-2.2.jar)
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
./shell/deploy-admin-api-shjjy153.sh
|
||||
```
|
||||
|
||||
步骤:编译 crmeb-admin → 云服务器备份 jar → 上传 jar → 远程重启 admin 服务。
|
||||
|
||||
### 3. 仅部署 backend-adminend(Vue 前端)
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
./shell/deploy-admin-vue-shjjy153.sh
|
||||
```
|
||||
|
||||
步骤:编译 backend-adminend → 云服务器备份静态 → 上传 dist 到 REMOTE_DIR_ADMIN。
|
||||
|
||||
使用其他密钥:`SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-api-shjjy153.sh`
|
||||
|
||||
---
|
||||
|
||||
## 八、其他环境
|
||||
|
||||
- **miao50**:使用 `./shell/deploy-admin-miao50.sh`,逻辑类似,配置来自 deploy.conf 中 miao50 段。
|
||||
- **shjjy153**:deploy.conf 中配置了 `REMOTE_DIR_FRONT`,可扩展脚本上传 single_uniapp22miao 的 H5 构建产物到该目录。
|
||||
|
||||
---
|
||||
|
||||
## 八、远程服务器手动重启
|
||||
## 九、远程服务器手动重启
|
||||
|
||||
### 重启 admin(miao-admin-2.2.jar)
|
||||
|
||||
@@ -196,7 +231,7 @@ pgrep -f miao-front-2.2.jar && echo "Front 已启动"
|
||||
|
||||
---
|
||||
|
||||
## 九、故障排查
|
||||
## 十、故障排查
|
||||
|
||||
- **SSH Permission denied**:检查 `ssh-copy-id` 是否成功,或指定正确 `SSH_IDENTITY`。
|
||||
- **前端构建 OpenSSL 报错**:设置 `export NODE_OPTIONS="--openssl-legacy-provider"`。
|
||||
|
||||
84
backend/shell/deploy-admin-api-shjjy153.sh
Executable file
84
backend/shell/deploy-admin-api-shjjy153.sh
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
# 仅打包部署 miao-admin-2.2.jar(后台 API 服务)到 shjjy153 云服务器
|
||||
# 部署前在云服务器上备份原有 jar
|
||||
# 使用: ./shell/deploy-admin-api-shjjy153.sh(在 backend 目录下)
|
||||
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-api-shjjy153.sh
|
||||
|
||||
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)"
|
||||
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
|
||||
|
||||
get_conf() {
|
||||
sed -n '/^shjjy153:/,/^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)
|
||||
ADMIN_JAR_NAME=$(get_conf ADMIN_JAR_NAME)
|
||||
ADMIN_LOCAL_PORT=$(get_conf ADMIN_LOCAL_PORT)
|
||||
|
||||
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=101.132.245.153
|
||||
[[ -z "$REMOTE_DIR_JAR" ]] && REMOTE_DIR_JAR=/www/wwwroot/javaapi
|
||||
[[ -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 "=== 仅部署 miao-admin(后台 API)到 shjjy153 ==="
|
||||
echo " 服务器: $SERVER_USER@$SERVER_HOST"
|
||||
echo " 目标: $REMOTE_DIR_JAR/$ADMIN_JAR_NAME"
|
||||
echo ""
|
||||
|
||||
echo "=== 1. 编译 crmeb-admin(miao-admin-2.2.jar, profile=shjjy153)==="
|
||||
cd "$BACKEND_DIR"
|
||||
if [[ -f "$APP_YML" ]]; then
|
||||
cp -a "$APP_YML" "${APP_YML}.bak"
|
||||
sed -E 's/active: *[a-zA-Z0-9]+/active: shjjy153/' "$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; }
|
||||
[[ -f "${APP_YML}.bak" ]] && { cp -a "${APP_YML}.bak" "$APP_YML"; rm -f "${APP_YML}.bak"; trap - EXIT; }
|
||||
|
||||
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/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
|
||||
echo "已备份: $REMOTE_DIR_JAR/backups/${ADMIN_JAR_NAME}.${BACKUP_SUFFIX}"
|
||||
else
|
||||
echo "远程无原有 jar,跳过备份"
|
||||
fi
|
||||
REMOTE_BACKUP
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 上传 $ADMIN_JAR_NAME 到 $REMOTE_DIR_JAR ==="
|
||||
"${SCP_CMD[@]}" "$JAR_PATH" "$SERVER_USER@$SERVER_HOST:$REMOTE_DIR_JAR/"
|
||||
echo "jar 上传完成."
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 远程重启 admin API 服务 (profile=shjjy153, port=$ADMIN_LOCAL_PORT) ==="
|
||||
"${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \
|
||||
(pkill -f $ADMIN_JAR_NAME || true) && \
|
||||
sleep 2 && \
|
||||
nohup java -Xms128m -Xmx256m -jar $ADMIN_JAR_NAME --spring.profiles.active=shjjy153 --server.port=$ADMIN_LOCAL_PORT > admin.log 2>&1 & \
|
||||
sleep 3 && \
|
||||
(pgrep -f $ADMIN_JAR_NAME && echo 'miao-admin 已启动' || (echo '请检查 admin.log'; tail -20 admin.log))"
|
||||
|
||||
echo ""
|
||||
echo "=== miao-admin API 部署完成 ==="
|
||||
19
backend/shell/deploy-admin-shjjy153.sh
Executable file
19
backend/shell/deploy-admin-shjjy153.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
# 一键部署 admin 后台(API + Vue 前端)到 shjjy153
|
||||
# 依次执行 deploy-admin-api-shjjy153.sh 和 deploy-admin-vue-shjjy153.sh
|
||||
# 使用: ./shell/deploy-admin-shjjy153.sh(在 backend 目录下)
|
||||
# 单独部署 API: ./shell/deploy-admin-api-shjjy153.sh
|
||||
# 单独部署 Vue: ./shell/deploy-admin-vue-shjjy153.sh
|
||||
|
||||
set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
echo "=== 一键部署 admin(API + Vue)到 shjjy153 ==="
|
||||
echo ""
|
||||
|
||||
"$SCRIPT_DIR/deploy-admin-api-shjjy153.sh"
|
||||
echo ""
|
||||
"$SCRIPT_DIR/deploy-admin-vue-shjjy153.sh"
|
||||
|
||||
echo ""
|
||||
echo "=== shjjy153 admin 全量部署完成 ==="
|
||||
72
backend/shell/deploy-admin-vue-shjjy153.sh
Executable file
72
backend/shell/deploy-admin-vue-shjjy153.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
# 仅打包部署 backend-adminend(后台 Vue 前端)到 shjjy153 云服务器
|
||||
# 部署前在云服务器上备份原有静态文件
|
||||
# 使用: ./shell/deploy-admin-vue-shjjy153.sh(在 backend 目录下)
|
||||
# 或指定密钥: SSH_IDENTITY=~/.ssh/your_key ./shell/deploy-admin-vue-shjjy153.sh
|
||||
|
||||
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}/backend-adminend"
|
||||
[[ ! -d "$FRONTEND_DIR" ]] && FRONTEND_DIR="${ROOT_DIR}/frontend"
|
||||
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
|
||||
|
||||
get_conf() {
|
||||
sed -n '/^shjjy153:/,/^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_ADMIN=$(get_conf REMOTE_DIR_ADMIN)
|
||||
|
||||
[[ -z "$SERVER_HOST" ]] && SERVER_HOST=101.132.245.153
|
||||
[[ -z "$REMOTE_DIR_ADMIN" ]] && REMOTE_DIR_ADMIN=/www/wwwroot/jjy-jfadmin.fwxgpt.com
|
||||
[[ -z "$SERVER_USER" ]] && SERVER_USER=root
|
||||
[[ -z "$SERVER_PORT" ]] && SERVER_PORT=22
|
||||
|
||||
[[ -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")
|
||||
|
||||
BACKUP_SUFFIX="backup_$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
[[ ! -d "$FRONTEND_DIR" ]] && { echo "错误: 未找到 admin 前端目录 (backend-adminend 或 frontend)"; exit 1; }
|
||||
|
||||
echo "=== 仅部署 backend-adminend(后台 Vue 前端)到 shjjy153 ==="
|
||||
echo " 服务器: $SERVER_USER@$SERVER_HOST"
|
||||
echo " 目标: $REMOTE_DIR_ADMIN"
|
||||
echo ""
|
||||
|
||||
echo "=== 1. 编译 backend-adminend (npm run build:prod) ==="
|
||||
cd "$FRONTEND_DIR"
|
||||
# Node 17–18 需要 --openssl-legacy-provider;Node 22+ 已不支持,不设置
|
||||
NODE_MAJOR=$(node -v 2>/dev/null | sed -E 's/^v([0-9]+).*/\1/' || echo 0)
|
||||
if [[ "$NODE_MAJOR" -ge 17 && "$NODE_MAJOR" -le 21 ]]; then
|
||||
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider"
|
||||
fi
|
||||
npm run build:prod
|
||||
echo "已生成: $FRONTEND_DIR/dist"
|
||||
[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; }
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 云服务器备份原有静态 ==="
|
||||
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
|
||||
set -e
|
||||
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"
|
||||
else
|
||||
echo "远程目录为空或不存在,跳过备份"
|
||||
fi
|
||||
REMOTE_BACKUP
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 上传 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 "后台 Vue 静态上传完成."
|
||||
|
||||
echo ""
|
||||
echo "=== backend-adminend 部署完成 ==="
|
||||
Reference in New Issue
Block a user