# 生产一键部署脚本后端实施记录

## 修改内容
- 新增生产一键部署脚本 `bin/prod/deploy_from_package.sh`
- 新增部署脚本自测文件 `bin/prod/deploy_from_package_test.sh`
- 脚本内固定 `JAVA_BIN="/home/webapp/env/java/bin/java"`
- 新增脚本同目录唯一发布 zip 校验、包内唯一 `jar` 校验
- 新增旧版后端 `jar` 时间戳备份规则
- 新增后端 PID 文件、托管进程标记、停止旧进程、启动新进程和端口监听校验逻辑

## 实现说明
- 新脚本执行目录固定为脚本所在目录，要求同目录存在：
  - `backend/`
  - `frontend/`
  - 1 个发布 zip
- 后端目标文件固定落到 `backend/ruoyi-admin.jar`
- 旧版后端 `jar` 通过 `ruoyi-admin.jar.<时间戳>.bak` 方式原地备份
- 启动时附加 `-Dloan.pricing.home=<脚本目录>`，用于识别当前脚本托管进程
- PID 文件固定写入 `backend/backend.pid`
- 后端日志固定写入 `backend/backend-console.log`
- 端口监听检测优先使用 `ss`，当前环境没有 `ss` 时改为使用 `lsof` 完成同一条校验

## 验证结果
- 已执行 `sh -n bin/prod/deploy_from_package.sh`，语法校验通过
- 已执行 `sh bin/prod/deploy_from_package_test.sh`
- 自测覆盖以下场景：
  - 正常部署场景：
    - 旧版 `jar` 被重命名为时间戳备份文件
    - 新版 `jar` 落到 `backend/ruoyi-admin.jar`
    - 后端 PID 文件和日志文件生成成功
    - 假后端进程启动成功并监听测试端口
  - 异常场景：
    - 脚本同目录存在多个发布 zip 时，脚本按预期失败并输出错误信息
- 自测使用临时目录和临时假 `java` 进程，测试结束后已自动清理对应进程和目录
