初始化1

This commit is contained in:
zg
2026-07-16 13:03:11 +08:00
parent 0bdfcbc1c8
commit e6b0f287cc
100 changed files with 12184 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
---
name: session-20260621-1
description: 2026-06-21 第1次会话 — 宝塔面板API接入Nginx反代管理从160迁移至宝塔面板只读
metadata:
type: session
date: 2026-06-21
sessionNumber: 1
startTime: 2026-06-20T23:00:00+08:00
---
# 2026-06-21 第1次会话
## 会话摘要
将 Nginx 转发管理从 10.1.1.160Python API 直接操作配置文件)迁移至宝塔面板 API 只读模式。新增 `BTPanelApiClient` 替代原 Python API 调用,前端改为只读展示。用户决定 160 机器 nginx 卸载,反代操作统一在宝塔面板上进行。
## 关键操作
### 1. 宝塔面板 API 客户端实现
- **做了什么**: 新建 `BTPanelApiClient.java`,封装宝塔 API 签名逻辑(`MD5(request_time + MD5(api_key))`),实现 5 个接口
- **接口清单**:
- `POST /data?action=getData&table=sites` → 站点列表12个站点
- `POST /site?action=GetProxyList&sitename=xxx` → 反代列表
- `POST /acme?action=get_orders` → ACME 证书订单列表
- `POST /files?action=GetFileBody` → 读取文件内容nginx 配置文件)
- `getNginxConfig(domain)` → 获取指定域名的 nginx 配置文件
- **原因**: 10.1.1.160 nginx 卸载,反代功能迁至宝塔面板,平台改为只读看板
- **结果**: 三个核心 API 在 curl 测试全部通过Java 编译部署成功
### 2. 宝塔 API 调试过程
- **问题1**: 最初API路径用错`/site?action=GetSiteList` 返回404根据官方文档 `api-doc.pdf` 修正为 `/data?action=getData&table=sites`
- **问题2**: IP白名单拦截 → 用户添加 `183.192.136.97`10.1.1.170 出公网IP后解决
- **问题3**: Java POST form body 返回404 → 改为 URL query string 方式传参解决
- **问题4**: 自签名SSL证书 → RestTemplate 配置跳过证书校验
### 3. ForwardingRuleService 改造
- **做了什么**: `listRules()` 改为从宝塔 API 拉数据,遍历站点列表 → 对每个站点调 GetProxyList → 组装 ForwardingRule所有写入方法add/update/delete/reload改为 `@Deprecated` 抛出 `UnsupportedOperationException`
- **原因**: 反代操作统一在宝塔面板进行,平台仅做列表查看
- **结果**: 转发管理页面展示宝塔12个站点中的反代项目
### 4. CertificateService 改造
- **做了什么**: `listCertificates()` 改为从宝塔 `get_orders` 拉 ACME 证书数据,合并本地数据库 `certificates` 表中的邮件通知配置;`issueCertificate()`/`renewCertificate()` 禁用
- **修复**: 第一版未合并本地通知配置修复后按域名匹配本地DB记录合并 `notifyEmail/notifyEnabled/notifyDaysBefore`
- **结果**: 证书列表从宝塔拉取,邮件通知配置可正常读写
### 5. Vue 前端只读改造
- **NginxForwarding.vue**:
- 去掉"新增规则"和"重载Nginx"按钮,替换为提示标签"新增/修改/删除请在宝塔面板上操作"
- 操作列"修改"/"删除"改为"查看"
- 编辑弹窗改为只读详情弹窗,调用 `GET /api/rules/{id}/config` 加载配置文件内容和 SSL 证书信息
- 移除配置文件Tab、SSL Tab、gzip Tab、日志Tab、LE签发弹窗
- **CertManagement.vue**: 去掉"签发证书"和"一键续期"按钮,保留"通知设置"
- **结果**: 前端编译通过,部署到 nginx-web-nginx-web 容器
### 6. ForwardingRuleController 改造
- **做了什么**: GET/POST/PUT/DELETE 接口调整,写入端点返回 405/410 错误并提示去宝塔操作;`GET /{id}/config` 改为返回配置文件内容 + SSL证书信息
- **结果**: 编译通过
### 7. RestTemplateConfig 修改
- **做了什么**: 新增 `btRestTemplate` Bean使用 JDK 原生 `SSLContext` + `TrustManager` 跳过宝塔自签名证书校验
- **原因**: 宝塔面板使用自签名 SSL 证书
### 8. 配置文件修改
- **application.yml**: 新增 `bt-panel` 配置节base-url: https://101.132.183.138:18888, api-key: ahv5RRcYm3Vi2PzEFvqYsZvsS8LeGkYp
- **原因**: 宝塔 API 连接配置
## 重要信息
### 宝塔面板连接
- 面板地址: https://101.132.183.138:18888
- API Key: ahv5RRcYm3Vi2PzEFvqYsZvsS8LeGkYp
- 白名单IP: 183.192.136.9710.1.1.170 出公网IP
### 部署架构(当前)
| 组件 | 机器 | 端口 | 说明 |
|------|------|------|------|
| Vue 前端 | 10.1.1.170 Docker (nginx-web-nginx-web) | 3002 | Nginx转发管理/SSL证书管理/DNS解析管理 |
| Java 后端 | 10.1.1.170 Docker (nginx-server-nginx-server) | 4002 | 宝塔API接入 + 阿里云DNS |
| Python API | 10.1.1.160 | 5000 | 仅DNS解析管理阿里云APInginx将卸载 |
| MySQL | 10.1.1.122 | 3306 | DNS审计记录 + 证书通知配置 |
### 涉及文件清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `service/BTPanelApiClient.java` | **新增** | 宝塔面板 API 客户端5个接口 |
| `service/ForwardingRuleService.java` | **重写** | 数据源从Python API切换至宝塔API |
| `service/CertificateService.java` | **重写** | 数据源从Python API切换至宝塔API |
| `controller/ForwardingRuleController.java` | **重写** | 只保留GET写入返回405/410 |
| `controller/CertificateController.java` | **改** | 签发/续期返回405 |
| `config/RestTemplateConfig.java` | **改** | 新增btRestTemplate跳过SSL校验 |
| `application.yml` | **改** | 新增bt-panel配置 |
| `views/NginxForwarding.vue` | **重写** | 只读模式,查看弹窗含配置+SSL |
| `views/CertManagement.vue` | **改** | 去掉签发/续期按钮 |
## 待处理
- [ ] 用户验证前端页面:转发管理列表 + 查看弹窗(配置文件 + SSL证书
- [ ] 用户验证证书管理页面:邮件通知配置是否正常显示
- [ ] 160 机器 nginx 卸载(用户决定时机)
- [ ] 宝塔面板上创建更多反代项目后验证列表自动刷新