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
This commit is contained in:
@@ -8,13 +8,53 @@
|
||||
|
||||
- **本机**:已安装 JDK 8、Maven、Node.js、npm;项目根目录为 `single-shop-22`,其下包含 `backend`、`frontend`。
|
||||
- **SSH 免密**:已配置本机到目标服务器的 SSH 公钥(推荐使用 `id_ed25519_crmeb_deploy`,或通过环境变量指定密钥)。
|
||||
- **部署配置**:`backend/deploy.conf` 中配置了各环境(如 by80、miao50)的服务器地址、目录、jar 名等。
|
||||
- **部署配置**:`backend/deploy.conf` 中配置了各环境(如 by80、miao33、miao50)的服务器地址、目录、jar 名等。
|
||||
- **前端 API 地址**:管理后台前端打包前,需确认 **`frontend/.env.production`** 中 **`VUE_APP_BASE_API`** 为本项目接口地址(如 miao33 项目为 `http://jfadmin.xiashengjun.com`,by80 项目为 `http://jfadmin.bosenyuan.com`)。部署脚本会在打包前自动检查,若与 `deploy.conf` 中该环境的 `VUE_APP_BASE_API_EXPECTED` 不一致将拒绝打包并提示修改。
|
||||
|
||||
---
|
||||
|
||||
## 二、by80 环境一键部署(推荐)
|
||||
## 二、miao33 环境一键部署
|
||||
|
||||
部署目标:Spring Profile **miao80**,产出 **miao-admin-2.2.jar** + admin 后台静态,上传到 by80 配置的服务器。
|
||||
部署目标:Spring Profile **miao33**,产出 **miao-admin-2.2.jar** + admin 后台静态,上传到 miao33 配置的服务器(默认 8.152.170.46,站点 jfadmin.xiashengjun.com)。
|
||||
|
||||
### 1. 配置 SSH 免密(一次性)
|
||||
|
||||
```bash
|
||||
ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@8.152.170.46
|
||||
```
|
||||
|
||||
提示输入**远程服务器 root 密码**(不要用 `sudo`)。
|
||||
|
||||
### 2. 执行自动部署脚本
|
||||
|
||||
在 **backend 目录** 下执行:
|
||||
|
||||
```bash
|
||||
cd /path/to/single-shop-22/backend
|
||||
./shell/deploy-admin-miao33.sh
|
||||
```
|
||||
|
||||
使用其他密钥:`SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-miao33.sh`
|
||||
|
||||
### 3. 脚本执行步骤
|
||||
|
||||
| 步骤 | 说明 |
|
||||
|------|------|
|
||||
| 1. 编译后端 | `mvn clean package -pl crmeb-admin -am -DskipTests`,生成 `miao-admin-2.2.jar` |
|
||||
| 2. 检查前端 API | 校验 `frontend/.env.production` 中 `VUE_APP_BASE_API` 与 miao33 期望一致(`http://jfadmin.xiashengjun.com`),否则中止并提示修改 |
|
||||
| 3. 编译前端 | `frontend` 下 `npm run build:prod`(含 Node 17+ OpenSSL 兼容),生成 `frontend/dist` |
|
||||
| 4. 远程备份 | 备份已有 jar 到 `REMOTE_DIR_JAR/backups/`,后台静态打包为 `jfadmin_backup_yyyyMMdd_HHmmss.tar.gz` |
|
||||
| 5. 上传 jar | 上传 `miao-admin-2.2.jar` 到 `REMOTE_DIR_JAR`(默认 `/www/wwwroot/crmeb`) |
|
||||
| 6. 上传后台静态 | 将 `frontend/dist` 通过 tar 管道上传到 `REMOTE_DIR_ADMIN`(默认 `/www/wwwroot/jfadmin.xiashengjun.com`) |
|
||||
| 7. 远程重启 | 使用 `--spring.profiles.active=miao33`、`--server.port=30032` 启动 jar |
|
||||
|
||||
配置来自 **deploy.conf** 中 **miao33** 段;`VUE_APP_BASE_API_EXPECTED` 用于打包前 API 地址校验。修改 `SERVER_HOST`、`REMOTE_DIR_ADMIN` 等即可更换目标服务器。
|
||||
|
||||
---
|
||||
|
||||
## 三、by80 环境一键部署
|
||||
|
||||
部署目标:Spring Profile **miao80**,产出 **miao-admin-2.2.jar** + admin 后台静态,上传到 by80 配置的服务器(默认 123.56.214.80,站点 jfadmin.bosenyuan.com)。
|
||||
|
||||
### 1. 配置 SSH 免密(一次性)
|
||||
|
||||
@@ -41,22 +81,23 @@ cd /path/to/single-shop-22/backend
|
||||
SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-by80.sh
|
||||
```
|
||||
|
||||
### 3. 脚本会依次执行
|
||||
### 3. 脚本执行步骤
|
||||
|
||||
| 步骤 | 说明 |
|
||||
|------|------|
|
||||
| 1. 编译后端 | `mvn clean package -pl crmeb-admin -am -DskipTests`,生成 `crmeb-admin/target/miao-admin-2.2.jar` |
|
||||
| 2. 编译前端 | 在 `frontend` 目录执行 `npm run build:prod`(带 Node 17+ OpenSSL 兼容),生成 `frontend/dist` |
|
||||
| 3. 远程备份 | 备份远程已有 jar 到 `REMOTE_DIR_JAR/backups/`,后台静态打包为 `jfadmin_backup_yyyyMMdd_HHmmss.tar.gz` |
|
||||
| 4. 上传 jar | 将 `miao-admin-2.2.jar` 上传到 `REMOTE_DIR_JAR`(by80 默认 `/www/wwwroot/crmeb`) |
|
||||
| 5. 上传后台静态 | 将 `frontend/dist` 通过 tar 管道上传到 `REMOTE_DIR_ADMIN`(by80 默认 `/www/wwwroot/jfadmin.bosenyuan.com`) |
|
||||
| 6. 远程重启 | 在远程执行 `pkill -f miao-admin-2.2.jar` 后使用 `--spring.profiles.active=miao80`、`--server.port=30032` 启动 jar |
|
||||
| 2. 检查前端 API | 校验 `frontend/.env.production` 中 `VUE_APP_BASE_API` 与 by80 期望一致(`http://jfadmin.bosenyuan.com`),否则中止并提示修改 |
|
||||
| 3. 编译前端 | 在 `frontend` 目录执行 `npm run build:prod`(带 Node 17+ OpenSSL 兼容),生成 `frontend/dist` |
|
||||
| 4. 远程备份 | 备份远程已有 jar 到 `REMOTE_DIR_JAR/backups/`,后台静态打包为 `jfadmin_backup_yyyyMMdd_HHmmss.tar.gz` |
|
||||
| 5. 上传 jar | 将 `miao-admin-2.2.jar` 上传到 `REMOTE_DIR_JAR`(by80 默认 `/www/wwwroot/crmeb`) |
|
||||
| 6. 上传后台静态 | 将 `frontend/dist` 通过 tar 管道上传到 `REMOTE_DIR_ADMIN`(by80 默认 `/www/wwwroot/jfadmin.bosenyuan.com`) |
|
||||
| 7. 远程重启 | 在远程执行 `pkill -f miao-admin-2.2.jar` 后使用 `--spring.profiles.active=miao80`、`--server.port=30032` 启动 jar |
|
||||
|
||||
---
|
||||
|
||||
## 三、部署配置(deploy.conf)
|
||||
## 四、部署配置(deploy.conf)
|
||||
|
||||
配置位于 **backend/deploy.conf**,按段落区分环境(如 by80、miao50)。by80 段示例:
|
||||
配置位于 **backend/deploy.conf**,按段落区分环境(如 miao33、by80、miao50)。各段示例:
|
||||
|
||||
- `SERVER_HOST`:服务器 IP(如 123.56.214.80)
|
||||
- `SERVER_USER`:SSH 用户(如 root)
|
||||
@@ -65,12 +106,13 @@ SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-by80.sh
|
||||
- `REMOTE_DIR_ADMIN`:admin 后台静态站点目录(如 /www/wwwroot/jfadmin.bosenyuan.com)
|
||||
- `ADMIN_JAR_NAME`:admin jar 文件名(如 miao-admin-2.2.jar)
|
||||
- `ADMIN_LOCAL_PORT`:admin 服务端口(如 30032)
|
||||
- `VUE_APP_BASE_API_EXPECTED`:该环境期望的前端 API 地址;部署脚本在打包前会检查 `frontend/.env.production` 中的 `VUE_APP_BASE_API` 是否与此一致,避免打错项目。
|
||||
|
||||
修改后无需改脚本,脚本会从该文件读取对应段配置。
|
||||
|
||||
---
|
||||
|
||||
## 四、仅编译/打包(不部署)
|
||||
## 五、仅编译/打包(不部署)
|
||||
|
||||
### 仅后端(miao-admin-2.2.jar)
|
||||
|
||||
@@ -93,7 +135,7 @@ npm run build:prod
|
||||
|
||||
---
|
||||
|
||||
## 五、远程服务器上手动重启 admin
|
||||
## 六、远程服务器上手动重启 admin
|
||||
|
||||
若自动重启未生效,可 SSH 登录后手动操作:
|
||||
|
||||
@@ -111,13 +153,19 @@ pgrep -f miao-admin-2.2.jar && echo "Admin 已启动" || tail -50 admin.log
|
||||
|
||||
---
|
||||
|
||||
## 六、其他环境(如 miao50)
|
||||
## 七、其他环境
|
||||
|
||||
miao50 使用脚本 **backend/shell/deploy-admin-miao50.sh**,逻辑类似:编译 admin、上传 jar、远程重启(profile=miao50)。配置来自 deploy.conf 中 miao50 段。若需同时部署前端静态,可参考 by80 脚本在 miao50 脚本中增加备份与上传 `frontend/dist` 的步骤。
|
||||
| 环境 | 脚本 | Profile | 说明 |
|
||||
|------|------|--------|------|
|
||||
| **miao33** | `shell/deploy-admin-miao33.sh` | miao33 | 打包 jar + 前端,备份、上传、重启(见第二节) |
|
||||
| **by80** | `shell/deploy-admin-by80.sh` | miao80 | 打包 jar + 前端,备份、上传、重启(见第三节) |
|
||||
| **miao50** | `shell/deploy-admin-miao50.sh` | miao50 | 仅编译 admin、上传 jar、远程重启;若需同时部署前端,可参考 miao33/by80 脚本增加备份与上传 `frontend/dist` |
|
||||
|
||||
配置均来自 **deploy.conf** 中对应段(miao33、by80、miao50)。
|
||||
|
||||
---
|
||||
|
||||
## 七、故障排查
|
||||
## 八、故障排查
|
||||
|
||||
- **SSH Permission denied**:检查是否已执行 `ssh-copy-id`,且未使用 `sudo`;或指定正确 `SSH_IDENTITY`。
|
||||
- **前端构建报错 OpenSSL / digital envelope**:在运行 `npm run build:prod` 前设置 `export NODE_OPTIONS="--openssl-legacy-provider"`(脚本已包含)。
|
||||
|
||||
@@ -8,6 +8,23 @@ SERVER_USER=root
|
||||
SERVER_PORT=22
|
||||
REMOTE_DIR_JAR=/www/wwwroot/crmeb
|
||||
REMOTE_DIR_ADMIN=/www/wwwroot/jfadmin.bosenyuan.com
|
||||
VUE_APP_BASE_API_EXPECTED=http://jfadmin-bsy.bosenyuan.com
|
||||
FRONT_LOCAL_PORT=30031
|
||||
FRONT_JAR_NAME=miao-front-2.2.jar
|
||||
ADMIN_LOCAL_PORT=30032
|
||||
ADMIN_JAR_NAME=miao-admin-2.2.jar
|
||||
|
||||
|
||||
miao33:
|
||||
spring:
|
||||
profiles:
|
||||
active: miao33
|
||||
SERVER_HOST=8.152.170.46
|
||||
SERVER_USER=root
|
||||
SERVER_PORT=22
|
||||
REMOTE_DIR_JAR=/www/wwwroot/crmeb
|
||||
REMOTE_DIR_ADMIN=/www/wwwroot/jfadmin.xiashengjun.com
|
||||
VUE_APP_BASE_API_EXPECTED=http://jfadmin.xiashengjun.com
|
||||
FRONT_LOCAL_PORT=30031
|
||||
FRONT_JAR_NAME=miao-front-2.2.jar
|
||||
ADMIN_LOCAL_PORT=30032
|
||||
|
||||
@@ -13,9 +13,9 @@ ROOT_DIR="$(cd "$BACKEND_DIR/.." && pwd)"
|
||||
FRONTEND_DIR="$ROOT_DIR/frontend"
|
||||
DEPLOY_CONF="$BACKEND_DIR/deploy.conf"
|
||||
|
||||
# 解析 by80 段配置(deploy.conf 中 by80 段到 miao50 段之间的 KEY=value)
|
||||
# 解析 by80 段配置(deploy.conf 中 by80 段到 miao33 段之前的 KEY=value)
|
||||
get_conf() {
|
||||
sed -n '1,/^miao50:/p' "$DEPLOY_CONF" | grep -E "^${1}=" | tail -1 | cut -d= -f2-
|
||||
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)
|
||||
@@ -48,7 +48,23 @@ echo "已生成: $JAR_PATH"
|
||||
[[ ! -f "$JAR_PATH" ]] && { echo "错误: jar 未生成"; exit 1; }
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 编译前端 (admin 后台) ==="
|
||||
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"
|
||||
@@ -57,7 +73,7 @@ echo "已生成: $FRONTEND_DIR/dist"
|
||||
[[ ! -d "$FRONTEND_DIR/dist" ]] && { echo "错误: dist 未生成"; exit 1; }
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 远程备份原有文件 ==="
|
||||
echo "=== 4. 远程备份原有文件 ==="
|
||||
"${SSH_CMD[@]}" "bash -s" << REMOTE_BACKUP
|
||||
set -e
|
||||
mkdir -p "$REMOTE_DIR_JAR/backups"
|
||||
@@ -73,19 +89,19 @@ fi
|
||||
REMOTE_BACKUP
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 上传 miao-admin-2.2.jar 到 $REMOTE_DIR_JAR ==="
|
||||
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 "=== 5. 上传 admin 后台静态 (dist) 到 $REMOTE_DIR_ADMIN ==="
|
||||
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 "=== 6. 远程重启 admin 服务 (profile=miao80, port=$ADMIN_LOCAL_PORT) ==="
|
||||
echo "=== 7. 远程重启 admin 服务 (profile=miao80, port=$ADMIN_LOCAL_PORT) ==="
|
||||
"${SSH_CMD[@]}" "cd $REMOTE_DIR_JAR && \
|
||||
(pkill -f $ADMIN_JAR_NAME || true) && \
|
||||
sleep 2 && \
|
||||
|
||||
111
backend/shell/deploy-admin-miao33.sh
Executable file
111
backend/shell/deploy-admin-miao33.sh
Executable file
@@ -0,0 +1,111 @@
|
||||
#!/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 部署完成 ==="
|
||||
@@ -5,7 +5,8 @@ ENV = 'production'
|
||||
# VUE_APP_BASE_API = '/prod-api'
|
||||
# VUE_APP_BASE_API = 'http://127.0.0.1:8080'
|
||||
# VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
|
||||
# miao33 项目
|
||||
VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
|
||||
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
|
||||
VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
|
||||
## 二、前端打包
|
||||
|
||||
**打包前请确认**:`frontend/.env.production` 中 **`VUE_APP_BASE_API`** 为本项目接口地址(例如本项目为 `http://jfadmin.xiashengjun.com`)。使用 backend 的部署脚本(`deploy-admin-miao33.sh` / `deploy-admin-by80.sh`)时,会在打包前自动检查该值与 `deploy.conf` 中当前环境的 `VUE_APP_BASE_API_EXPECTED` 是否一致,不一致将拒绝打包并提示修改。
|
||||
|
||||
在 **frontend 目录** 下执行:
|
||||
|
||||
```bash
|
||||
@@ -34,10 +36,15 @@ npm run build:prod
|
||||
|
||||
前端与后端一起发布时,使用 **backend 的一键部署脚本**,会自动完成:前端打包 → 后端打包 → 远程备份 → 上传 jar 与 `dist` → 重启服务。
|
||||
|
||||
在项目 **backend 目录** 下执行:
|
||||
在项目 **backend 目录** 下执行(按环境二选一):
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# miao33 环境(profile=miao33,默认 8.152.170.46 / jfadmin.xiashengjun.com)
|
||||
./shell/deploy-admin-miao33.sh
|
||||
|
||||
# by80 环境(profile=miao80,默认 123.56.214.80 / jfadmin.bosenyuan.com)
|
||||
./shell/deploy-admin-by80.sh
|
||||
```
|
||||
|
||||
@@ -47,7 +54,7 @@ cd backend
|
||||
2. **在 frontend 目录执行 `npm run build:prod`**,生成 `dist`
|
||||
3. 远程备份原有 jar 与后台静态
|
||||
4. 上传 jar 到 `REMOTE_DIR_JAR`,上传 **dist 到 REMOTE_DIR_ADMIN**
|
||||
5. 远程重启 admin 服务(Spring Profile miao80)
|
||||
5. 远程重启 admin 服务(对应 Spring Profile)
|
||||
|
||||
即:**前端无需单独操作,一次执行即可完成前端打包 + 自动部署发布**。
|
||||
SSH 配置、deploy.conf、故障排查见:**[backend/DEPLOY.md](../backend/DEPLOY.md)**。
|
||||
@@ -56,11 +63,11 @@ SSH 配置、deploy.conf、故障排查见:**[backend/DEPLOY.md](../backend/DE
|
||||
|
||||
## 四、部署配置(前端相关)
|
||||
|
||||
配置在 **backend/deploy.conf**,by80 段示例:
|
||||
配置在 **backend/deploy.conf**,按环境分段(miao33、by80、miao50):
|
||||
|
||||
| 配置项 | 说明 | 示例 |
|
||||
|--------|------|------|
|
||||
| **REMOTE_DIR_ADMIN** | 前端 dist 发布目录(admin 后台站点根目录) | `/www/wwwroot/jfadmin.bosenyuan.com` |
|
||||
| 配置项 | 说明 | miao33 示例 | by80 示例 |
|
||||
|--------|------|-------------|-----------|
|
||||
| **REMOTE_DIR_ADMIN** | 前端 dist 发布目录(admin 后台站点根目录) | `/www/wwwroot/jfadmin.xiashengjun.com` | `/www/wwwroot/jfadmin.bosenyuan.com` |
|
||||
|
||||
脚本通过 **tar 管道** 将 `frontend/dist` 内容上传到该目录,不依赖远程安装 rsync。
|
||||
|
||||
|
||||
@@ -14,6 +14,23 @@ ADMIN_LOCAL_PORT=30032
|
||||
ADMIN_JAR_NAME=miao-admin-2.2.jar
|
||||
|
||||
|
||||
miao33:
|
||||
spring:
|
||||
profiles:
|
||||
active: miao33
|
||||
SERVER_HOST=8.152.170.46
|
||||
SERVER_USER=root
|
||||
SERVER_PORT=22
|
||||
REMOTE_DIR_JAR=/www/wwwroot/crmeb
|
||||
REMOTE_DIR_ADMIN=/www/wwwroot/jfadmin.xiashengjun.com
|
||||
FRONT_LOCAL_PORT=30031
|
||||
FRONT_JAR_NAME=miao-front-2.2.jar
|
||||
ADMIN_LOCAL_PORT=30032
|
||||
ADMIN_JAR_NAME=miao-admin-2.2.jar
|
||||
|
||||
|
||||
|
||||
|
||||
miao50:
|
||||
spring:
|
||||
profiles:
|
||||
|
||||
Reference in New Issue
Block a user