better-staridc-MNBT
1---
2title: MNBT Docker 集成 PRD — 附录
3description: Docker 集成 PRD 的附录:用户侧用量限制、目录结构汇总、已确认决策点、里程碑与验收、风险与开放问题
4---
5
6# MNBT Docker 集成 PRD — 附录
7
8> 本文为 [Docker 集成 PRD](./docker.md)(§1-§8)的附录部分,含用户侧用量限制说明、目录结构汇总、已确认决策点、里程碑与验收、风险与开放问题。
9
10---
11
12**用户侧用量限制与应用商店落地参考(`docker/` 控制台内):**
13
14| 能力 | 宝塔 API | 说明 |
15|------|----------|------|
16| 应用商店列表 | `get_apps`(`bt_docker::app_list()`) | 289 个应用及参数定义,供用户选购 |
17| 用量限制 | `create_app` 的 `cpus` / `memory_limit` | 安装时传入,取值不得超过 `MN_docker_user.cpu_max` / `mem_max` |
18| 应用安装 | `create_app`(`bt_docker::app_create()`) | 返回"等待 1-5 分钟初始化",**P0 直接实现,前端轮询 `get_cmd_log` 异步跟进安装进度** |
19| **磁盘配额** | `get_installed_apps`(获取 `path`)+ `get_path_size`(获取路径大小) | 用户查看容器时实时采集磁盘用量,与 `MN_docker_plan.disk_max` 比对;用量 ≥ 90% 时前端标红告警 |
20
21> **磁盘配额实现方案**:Docker 本身无磁盘容量限制端口,宝塔也未提供此功能。采用两个端点变通实现:
22> 1. `bt_docker::installed_apps()` → 返回每个已安装应用的 `path`(容器安装目录)
23> 2. `bt_docker::get_path_size($path)` → 调用宝塔文件 API `/files?action=get_path_size` 获取该路径磁盘占用大小
24> 3. 用户每次查看"我的容器"时实时采集并存入 `MN_docker_user.disk_usage`,与套餐 `disk_max`(MB,0=不限制)比对展示
25> 4. **磁盘超额自动停机**:当检测到磁盘用量超过配额且容器正在运行,自动调用 `container_stop` 停机,记录操作日志,前端展示红色告警提示
26
27---
28
29## 9. 目录结构汇总(新增)
30
31```
32MPHX/bt_docker.php # Docker API 封装
33MPHX/docker.member.php # Docker 用户独立认证
34api/docker.php # 对外对接 API
35docker/ # Docker 用户控制台控制器
36templates/default/docker/ # Docker scope 默认视图
37templates/active_docker_theme # Docker 当前主题
38admin/docker.php # 管理员 Docker 管理页
39admin/api/docker.php # 管理员 Docker AJAX 模块(挂 admin/ajax.php)
40install/install.sql # 追加三张 Docker 表
41update/update_v183_docker.sql # 增量升级 SQL
42docs/prd/docker.md # 本文档
43```
44
45---
46
47## 10. 已确认决策点
48
49> 以下 7 项已由负责人拍板,实现照此执行。
50
51| # | 决策 | 结论 |
52|---|------|------|
53| 1 | 管理员侧栏入口范围 | **仅 default 主题**,其余主题下期补 |
54| 2 | Docker 支付 | **P0 不接支付**,只建 `MN_docker_order` 表(P1 再接) |
55| 3 | 用户容器来源 | **用户自助选择** Docker 镜像 / 应用商店 |
56| 4 | `create_app` 实现 | **P0 直接实现**,前端轮询 `get_cmd_log` 异步跟进安装 |
57| 5 | 容器权限隔离 | 用户**仅允许查看自己的容器**(P0);且**每账户固定一个容器**(单容器模型) |
58| 6 | 到期删除策略 | 到期先**软删(停容器)7 天**,7 天后**物理删除容器数据** |
59| 7 | 开通校验节点可达 | **必须验证**,节点 Docker 不可达则**拒绝开通**(`code=100`) |
60
61---
62
63## 11. 里程碑与验收
64
65### M1 — 封装层与认证
66- [ ] `bt_docker` 完成;`get_config`/`container_list` **真机联调通过**。
67- [ ] `MN_docker_user` 三表 + `docker.member.php` 独立认证。
68- **验收**:php 脚本调 `bt_docker` 返回真实容器 JSON;`docker/login.php` 可登录/登出。
69
70### M2 — 用户 Docker 控制台(单容器 + 应用商店)
71- [ ] `theme.php` docker scope + `templates/default/docker/` 页面。
72- [ ] 我的容器(单容器)/ 镜像 / 应用商店;`create_app` **P0 直接实现**,前端轮询 `get_cmd_log` 异步跟进。
73- [ ] **容器隔离**:每个账号仅装配一个容器,用户只看到自己的容器数据。
74- **验收**:Docker 账号登录控制台,选购应用并异步安装成功;仅见本人容器。
75
76### M3 — 管理端闭环(default 主题)
77- [ ] 管理员开通/暂停/删除 Docker 用户(侧栏仅 default 主题)、套餐管理、节点容器总览。
78- [ ] **到期软删**:到期停容器并预留 7 天,7 天后物理删除容器数据。
79- **验收**:完整走"添加用户 → 登录控制台 → 选购安装 → 到期软删 → 7 天清容器"。
80
81### M4 — 文档与升级
82- [ ] `install.sql`、增量 SQL、`README.md` / `API.md` Docker 章节。
83
84---
85
86## 12. 风险与开放问题
87
881. **Docker API 签名/路由未官方确认** — M1 必须真机联调(见 §5.3)。
892. **`create_app` 耗时长(1-5 分钟)** — P0 已直接实现,前端轮询 `get_cmd_log` 异步跟进。
903. **面板未装 Docker** — `get_config` 先检测,未装引导安装(`MN_bt.btos` 区分系统)。
914. **theme.php 改动影响面** — 仅新增 docker scope 分支,需回归验证现有 user/admin scope 正常。
925. **侧栏硬编码入口** — 本期仅 default 主题,其余主题下期补(见决策 1)。