miao33: 从 main 同步 single_uniapp22miao,dart-sass 兼容修复,DEPLOY.md 更新

- 从 main 获取 single_uniapp22miao 子项目
- dart-sass: /deep/ -> ::v-deep,calc 运算符加空格
- DEPLOY.md 采用 shccd159 版本(4 子项目架构说明)

Made-with: Cursor
This commit is contained in:
apple
2026-03-16 11:16:42 +08:00
parent 9c29721dc4
commit 079076a70e
356 changed files with 569762 additions and 129 deletions

View File

@@ -1,120 +1,59 @@
# 打包与自动部署说明
# 打包与部署说明
本文档说明如何编译、打包并自动部署 **admin 后端miao-admin-2.2.jar****admin 后台前端** 到远程服务器(含备份后上传、重启)
本文档说明项目的 **4 个子项目** 如何单独或组合打包部署。**2 个 jar 包** 分别对应 **2 个前端**,可独立执行编译、打包、部署
---
## 一、环境与前置条件
## 一、架构概览
- **本机**:已安装 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` 不一致将拒绝打包并提示修改。
### 2 个 jar 包 ↔ 2 个前端
| jar 包 | 对应前端 | 说明 |
|--------|----------|------|
| **miao-admin-2.2.jar** | `frontend`admin 后台 Vue | 管理后台 API + 后台静态站点 |
| **miao-front-2.2.jar** | `single_uniapp22miao`(用户端 H5/uni-app | 积分商城、用户端 API |
### 4 个子项目(可单独打包部署)
| 子项目 | 产出 | 打包命令 | 说明 |
|--------|------|----------|------|
| **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` | 管理后台前端静态 |
| **single_uniapp22miao** | `single_uniapp22miao/unpackage/dist/build/h5` | `npm run build:h5` | 用户端 H5 静态 |
---
## 二、miao33 环境一键部署
## 二、部署配置deploy.conf
部署目标Spring Profile **miao33**,产出 **miao-admin-2.2.jar** + admin 后台静态,上传到 miao33 配置的服务器(默认 8.152.170.46,站点 jfadmin.xiashengjun.com)。
配置位于 **backend/deploy.conf**按段落区分环境by80、miao50、shjjy153 等)。
### 1. 配置 SSH 免密(一次性)
### 通用变量
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@8.152.170.46
```
| 变量 | 说明 | 示例 |
|------|------|------|
| `SERVER_HOST` | 服务器 IP | 123.56.214.80 |
| `SERVER_USER` | SSH 用户 | root |
| `SERVER_PORT` | SSH 端口 | 22 |
| `REMOTE_DIR_JAR` | jar 上传目录(两个 jar 可同目录) | /www/wwwroot/crmeb |
| `REMOTE_DIR_ADMIN` | admin 后台静态站点目录 | /www/wwwroot/jfadmin.bosenyuan.com |
| `REMOTE_DIR_FRONT` | 用户端 H5 静态站点目录(部分环境有) | /www/wwwroot/jjy-jf.fwxgpt.com |
| `FRONT_JAR_NAME` | 用户端 jar 文件名 | miao-front-2.2.jar |
| `ADMIN_JAR_NAME` | 管理后台 jar 文件名 | miao-admin-2.2.jar |
| `FRONT_LOCAL_PORT` | 用户端 API 端口 | 30031 |
| `ADMIN_LOCAL_PORT` | 管理后台 API 端口 | 30032 |
提示输入**远程服务器 root 密码**(不要用 `sudo`)。
### 环境示例deploy.conf
### 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**`REMOTE_DIR_JAR``REMOTE_DIR_ADMIN`profile=miao80
- **miao50**`REMOTE_DIR`jar 目录profile=miao50
- **shjjy153**`REMOTE_DIR_JAR``REMOTE_DIR_ADMIN``REMOTE_DIR_FRONT`profile=shjjy153
---
## 三、by80 环境一键部署
## 三、单独打包4 个子项目)
部署目标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
### 1. 仅打包 crmeb-adminmiao-admin-2.2.jar
```bash
cd backend
@@ -122,9 +61,15 @@ 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`
### 2. 仅打包 crmeb-frontmiao-front-2.2.jar
### 仅前端admin 后台)
```bash
cd backend
mvn clean package -pl crmeb-front -am -DskipTests
# 产出backend/crmeb-front/target/miao-front-2.2.jar
```
### 3. 仅打包 admin 后台前端frontend
```bash
cd frontend
@@ -133,41 +78,106 @@ npm run build:prod
# 产出frontend/dist
```
---
## 六、远程服务器上手动重启 admin
若自动重启未生效,可 SSH 登录后手动操作:
### 4. 仅打包用户端 H5 前端single_uniapp22miao
```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
cd single_uniapp22miao
npm run build:h5
# 产出single_uniapp22miao/unpackage/dist/build/h5
```
---
## 七、其他环境
## 四、单独启动(本机)
| 环境 | 脚本 | 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` |
### 启动 miao-admin管理后台 API
配置均来自 **deploy.conf** 中对应段miao33、by80、miao50
```bash
cd backend
nohup java -jar crmeb-admin/target/miao-admin-2.2.jar \
--spring.profiles.active=miao80 \
--server.port=30032 > admin.log 2>&1 &
```
### 启动 miao-front用户端 API
```bash
cd backend
./shell/start-front-miao33.sh # 使用 miao33 配置,端口 30031
# 或指定 profile
nohup java -jar crmeb-front/target/miao-front-2.2.jar \
--spring.profiles.active=miao33 > front-miao33.log 2>&1 &
```
---
## 五、by80 环境一键部署admin 后台)
部署目标:**miao-admin-2.2.jar** + **admin 后台静态**,上传到 by80 配置的服务器。
### 1. 配置 SSH 免密(一次性)
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_crmeb_deploy.pub root@123.56.214.80
```
### 2. 执行部署脚本
```bash
cd backend
./shell/deploy-admin-by80.sh
```
使用其他密钥:`SSH_IDENTITY=~/.ssh/你的私钥 ./shell/deploy-admin-by80.sh`
### 3. 脚本执行步骤
| 步骤 | 说明 |
|------|------|
| 1 | 编译 crmeb-admin生成 miao-admin-2.2.jar |
| 2 | 编译 frontend生成 dist |
| 3 | 远程备份原有 jar 与后台静态 |
| 4 | 上传 miao-admin-2.2.jar 到 REMOTE_DIR_JAR |
| 5 | 上传 frontend/dist 到 REMOTE_DIR_ADMIN |
| 6 | 远程重启 admin 服务profile=miao80, port=30032 |
---
## 六、其他环境
- **miao50**:使用 `./shell/deploy-admin-miao50.sh`,逻辑类似,配置来自 deploy.conf 中 miao50 段。
- **shjjy153**deploy.conf 中配置了 `REMOTE_DIR_FRONT`,可扩展脚本上传 single_uniapp22miao 的 H5 构建产物到该目录。
---
## 七、远程服务器手动重启
### 重启 adminmiao-admin-2.2.jar
```bash
ssh root@<SERVER_HOST>
cd /www/wwwroot/crmeb # 或 REMOTE_DIR_JAR
pkill -f miao-admin-2.2.jar || true
sleep 2
nohup java -Xms128m -Xmx200m -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 已启动"
```
### 重启 frontmiao-front-2.2.jar
```bash
ssh root@<SERVER_HOST>
cd /www/wwwroot/crmeb # 或 REMOTE_DIR_JAR
pkill -f miao-front-2.2.jar || true
sleep 2
nohup java -Xms128m -Xmx200m -jar miao-front-2.2.jar --spring.profiles.active=miao33 --server.port=30031 > front.log 2>&1 &
pgrep -f miao-front-2.2.jar && echo "Front 已启动"
```
---
## 八、故障排查
- **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`
- **SSH Permission denied**:检查 `ssh-copy-id` 是否成功,或指定正确 `SSH_IDENTITY`
- **前端构建 OpenSSL 报错**设置 `export NODE_OPTIONS="--openssl-legacy-provider"`
- **jar 未启动**SSH 登录查看对应 log 文件及 `pgrep -f <jar名>`

View File

@@ -32,7 +32,7 @@ server:
spring:
profiles:
active: miao50
active: miao33
servlet:
multipart:
max-file-size: 50MB #设置单个文件大小

View File

@@ -19,7 +19,7 @@ miao33:
spring:
profiles:
active: miao33
SERVER_HOST=8.152.170.46
SERVER_HOST=39.106.63.33
SERVER_USER=root
SERVER_PORT=22
REMOTE_DIR_JAR=/www/wwwroot/crmeb