# 打包与自动部署说明 本文档说明如何编译、打包并自动部署 **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`。