5.7 KiB
5.7 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| session-20260621-1 | 2026-06-21 第1次会话 — 宝塔面板API接入,Nginx反代管理从160迁移至宝塔面板(只读) |
|
2026-06-21 第1次会话
会话摘要
将 Nginx 转发管理从 10.1.1.160(Python 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 修改
- 做了什么: 新增
btRestTemplateBean,使用 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.97(10.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解析管理(阿里云API),nginx将卸载 |
| 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 卸载(用户决定时机)
- 宝塔面板上创建更多反代项目后验证列表自动刷新