Files
integral-shop/backend/DEPLOY.md
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

174 lines
7.5 KiB
Markdown
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.
# 打包与自动部署说明
本文档说明如何编译、打包并自动部署 **admin 后端miao-admin-2.2.jar****admin 后台前端** 到远程服务器(含备份后上传、重启)。
---
## 一、环境与前置条件
- **本机**:已安装 JDK 8、Maven、Node.js、npm项目根目录为 `single-shop-22`,其下包含 `backend``frontend`
- **SSH 免密**:已配置本机到目标服务器的 SSH 公钥(推荐使用 `id_ed25519_crmeb_deploy`,或通过环境变量指定密钥)。
- **部署配置**`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` 不一致将拒绝打包并提示修改。
---
## 二、miao33 环境一键部署
部署目标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 免密(一次性)
在项目外任意目录执行(将 `root``123.56.214.80` 换成实际用户与主机):
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@123.56.214.80
```
提示输入 **远程服务器 root 密码**(不要用 `sudo`,否则会提示的是本机密码)。成功后即可免密 SSH/SCP。
### 2. 执行自动部署脚本
**backend 目录** 下执行:
```bash
cd /path/to/single-shop-22/backend
./shell/deploy-admin-by80.sh
```
使用其他密钥时:
```bash
SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-by80.sh
```
### 3. 脚本执行步骤
| 步骤 | 说明 |
|------|------|
| 1. 编译后端 | `mvn clean package -pl crmeb-admin -am -DskipTests`,生成 `crmeb-admin/target/miao-admin-2.2.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
配置位于 **backend/deploy.conf**,按段落区分环境(如 miao33、by80、miao50。各段示例
- `SERVER_HOST`:服务器 IP如 123.56.214.80
- `SERVER_USER`SSH 用户(如 root
- `SERVER_PORT`SSH 端口(如 22
- `REMOTE_DIR_JAR`jar 上传目录(如 /www/wwwroot/crmeb
- `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
```bash
cd backend
mvn clean package -pl crmeb-admin -am -DskipTests
# 产出backend/crmeb-admin/target/miao-admin-2.2.jar
```
运行时指定 profile`java -jar miao-admin-2.2.jar --spring.profiles.active=miao80 --server.port=30032`
### 仅前端admin 后台)
```bash
cd frontend
export NODE_OPTIONS="${NODE_OPTIONS:-} --openssl-legacy-provider" # Node 17+ 需要
npm run build:prod
# 产出frontend/dist
```
---
## 六、远程服务器上手动重启 admin
若自动重启未生效,可 SSH 登录后手动操作:
```bash
ssh -i ~/.ssh/id_ed25519_crmeb_deploy root@123.56.214.80
cd /www/wwwroot/crmeb
pkill -f miao-admin-2.2.jar || true
sleep 2
nohup java -jar miao-admin-2.2.jar --spring.profiles.active=miao80 --server.port=30032 > admin.log 2>&1 &
# 检查是否启动
pgrep -f miao-admin-2.2.jar && echo "Admin 已启动" || tail -50 admin.log
```
---
## 七、其他环境
| 环境 | 脚本 | 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"`(脚本已包含)。
- **远程找不到 rsync**:当前 by80 脚本已改为使用 tar 管道上传前端,不依赖远程 rsync。
- **jar 未启动**SSH 登录服务器查看 `admin.log``pgrep -f miao-admin-2.2.jar`