仰望星辰工作室

better-staridc-MNBT

better-staridc-MNBT/ docs/api/docker-console.md 7.7 KB · 194 行 原始文件
Z zfhsh first commit 1 天前
1---
2title: Docker 控制台与内部实现
3description: 宝塔 Docker API 封装(bt_docker)、Docker 认证机制与数据库表结构
4---
5
6# Docker 控制台与内部实现
7
8> 本文为 Docker API 文档的配套篇,覆盖宝塔 Docker API 封装(`bt_docker`)、认证机制与数据库表结构。外部开通 API、用户控制台 AJAX、后台管理与魔方财务对接见 [Docker API](./docker.md)。
9
10## 1. 宝塔 Docker API 封装
11
12### 1.1 类说明
13
14**文件**:`MPHX/bt_docker.php`
15**类名**:`bt_docker`
16
17独立于 `bt_api`(网站管理 API),专用于宝塔 Docker 模块。自持 HTTP transport 与签名逻辑,不与 `bt_api` 共享状态。
18
19**签名算法**(与 `bt_api` 一致):
20
21```
22request_token = md5(request_time . md5(BT_KEY))
23```
24
25- GET 路由:`/btdocker/<module>/<method>`,签名 + `request_time` 拼入 query string,`request_token` 写入 cookie
26- POST 路由:`/mod/docker/com/<method>/stype`,签名 + `request_time` + 业务参数拼入 body,`request_token` 写入 cookie
27
28### 1.2 方法列表
29
30#### 安装与配置(GET /btdocker/setup/)
31
32| 方法 | 宝塔端点 | 说明 |
33|------|----------|------|
34| `get_config()` | `get_config` | Docker 服务状态(service_status / docker_installed / docker_compose_installed) |
35| `install_docker_program()` | `install_docker_program` | 安装 Docker 程序 |
36| `get_registry_mirrors()` | `get_registry_mirrors` | 镜像加速配置 |
37| `set_registry_mirrors($mirrors)` | `set_registry_mirrors` | 设置镜像加速 |
38| `set_monitor_save_date($day)` | `set_monitor_save_date` | 监控数据保留天数 |
39
40#### 容器管理(GET /btdocker/container/)
41
42| 方法 | 宝塔端点 | 说明 |
43|------|----------|------|
44| `container_list()` | `get_list` | 所有容器列表(**注意:`ports` 字段恒为空数组,端口信息需用 `installed_apps()` 获取**) |
45| `container_start($id, $name)` | `start` | 启动容器 |
46| `container_stop($id, $name)` | `stop` | 停止容器 |
47| `container_restart($id, $name)` | `restart` | 重启容器 |
48| `container_del($id, $name)` | `del` | 删除容器 |
49| `container_prune()` | `prune` | 清理无用容器 |
50| `container_cmd_log($id, $name)` | `get_cmd_log` | 容器执行日志(**注意:仅返回布尔值 `true`,不返回日志内容**) |
51
52#### 镜像管理(GET /btdocker/image/)
53
54| 方法 | 宝塔端点 | 说明 |
55|------|----------|------|
56| `image_list()` | `image_list` | 本地镜像列表 |
57| `image_prune()` | `prune` | 清理无用镜像 |
58
59#### 存储卷(GET /btdocker/volume/)
60
61| 方法 | 宝塔端点 | 说明 |
62|------|----------|------|
63| `volume_list()` | `get_volume_list` | 存储卷列表 |
64| `volume_add($name, $driver)` | `add` | 创建存储卷 |
65| `volume_prune()` | `prune` | 清理无用存储卷 |
66
67#### 网络(GET /btdocker/network/)
68
69| 方法 | 宝塔端点 | 说明 |
70|------|----------|------|
71| `network_list()` | `get_host_network` | 网络列表 |
72| `network_create($name, $driver)` | `create_network` | 创建网络 |
73| `network_prune()` | `prune` | 清理无用网络 |
74
75#### 仓库(GET /btdocker/registry/)
76
77| 方法 | 宝塔端点 | 说明 |
78|------|----------|------|
79| `registry_list()` | `registry_list` | 镜像仓库列表 |
80| `registry_set_remark($id, $remark)` | `set_remark` | 设置仓库备注 |
81
82#### Compose(GET /btdocker/compose|project/)
83
84| 方法 | 宝塔端点 | 说明 |
85|------|----------|------|
86| `template_list()` | `template_list` | Compose 模板列表 |
87| `project_list()` | `get_project_list` | Docker 项目列表 |
88
89#### 应用商店(POST /mod/docker/com/)
90
91| 方法 | 宝塔端点 | 说明 |
92|------|----------|------|
93| `app_list()` | `get_apps` | 应用列表(约 291 个应用,含 appname/apptitle/apptype/appversion/depend/env/field) |
94| `app_create($params)` | `create_app` | 安装应用(异步),参数见 [Docker API §3.5](./docker.md#35-创建应用开通容器) |
95| `app_dependence($app)` | `get_dependence_apps` | 查询依赖应用安装状态 |
96| `installed_apps()` | `get_installed_apps` | **已安装应用列表(含完整容器详情、端口、应用参数)**,是获取容器信息的主要数据源 |
97
98---
99
100## 2. 认证机制
101
102### 2.1 Docker 用户认证
103
104**文件**:`MPHX/docker.member.php`
105
106| 函数 | 用途 |
107|------|------|
108| `docker_auth_login($uid, $hash)` | 登录:写入 `docker_token` cookie(`uid + '|' + md5(uid . hash . IP)`) |
109| `docker_auth_logout()` | 登出:删除 `docker_token` cookie |
110| `docker_auth_current()` | 获取当前登录用户行(查 `MN_docker_user`) |
111| `docker_auth_require()` | 获取当前用户,未登录则 `docker_json(401, '请先登录')` |
112| `docker_auth_password_hash($pass)` | 密码哈希 |
113| `docker_auth_password_verify($pass, $hash)` | 密码验证 |
114
115### 2.2 外部 API 鉴权
116
117详见 [Docker API §2.1 鉴权](./docker.md#21-鉴权)。
118
119### 2.3 CSRF 保护
120
121`docker/ajax.php` 所有请求(login/logout 除外)均需携带 CSRF Token(`MNBT_CSRF_TOKEN` 字段,或 `_csrf` 字段 / `X-CSRF-TOKEN` 头),由 `mnbt_csrf_validate_request()` 验证。
122
123---
124
125## 3. 数据库表结构
126
127### MN_docker_node(Docker 节点)
128
129| 字段 | 类型 | 说明 |
130|------|------|------|
131| `id` | int(11) | 主键 |
132| `name` | varchar(64) | 节点名称(显示用) |
133| `btip` | varchar(128) | 宝塔面板地址(IP/域名) |
134| `btdk` | varchar(10) | 宝塔端口(默认 `8888`) |
135| `ptl` | varchar(10) | 是否 HTTPS(`true`/`false`) |
136| `btmy` | varchar(255) | 宝塔接口密钥 |
137| `ktmy` | varchar(255) | 调用密钥(外部 API 鉴权用) |
138| `qmk` | varchar(255) | 二级验证密钥 |
139| `qk` | varchar(10) | 启用/禁用(`true`/`false`) |
140| `date` | varchar(50) | 添加时间 |
141
142### MN_docker_user(Docker 用户)
143
144| 字段 | 类型 | 说明 |
145|------|------|------|
146| `id` | int(11) | 主键 |
147| `username` | varchar(64) | 登录账号 |
148| `password_hash` | varchar(255) | 密码哈希 |
149| `email` | varchar(128) | 邮箱 |
150| `ssbt` | int(11) | 所属节点 ID(→ `MN_docker_node.id`) |
151| `service_name` | varchar(64) | 宝塔服务名(创建容器时分配,唯一标识) |
152| `app_name` | varchar(64) | 已安装应用名 |
153| `container_id` | varchar(128) | Docker 容器 ID |
154| `container_spec` | text | 容器规格 JSON(app_name/m_version/cpus/memory_limit/params) |
155| `container_status` | varchar(20) | 容器状态(`none`/`creating`/`running`/`stopped`) |
156| `data` | varchar(50) | 开通时间 |
157| `datae` | varchar(50) | 到期时间(`0000-00-00`=永久) |
158| `qk` | varchar(20) | 用户状态(`active`/`expired`/`pruned`/`paused`) |
159| `plan_id` | int(11) | 套餐 ID |
160| `expired_at` | varchar(50) | 到期时间戳 |
161| `prune_due` | varchar(50) | 摘除期限 |
162| `created_at` | varchar(50) | 创建时间 |
163
164### MN_docker_plan(Docker 套餐)
165
166| 字段 | 类型 | 说明 |
167|------|------|------|
168| `id` | int(11) | 主键 |
169| `name` | varchar(64) | 套餐名称 |
170| `cpu_max` | float | CPU 上限 |
171| `mem_max` | float | 内存上限(MB) |
172| `price` | decimal(10,2) | 价格 |
173| `qk` | varchar(10) | 启用/禁用 |
174
175### MN_docker_order(Docker 订单)
176
177| 字段 | 类型 | 说明 |
178|------|------|------|
179| `id` | int(11) | 主键 |
180| `user_id` | int(11) | 用户 ID |
181| `plan_id` | int(11) | 套餐 ID |
182| `amount` | decimal(10,2) | 金额 |
183| `status` | varchar(20) | 订单状态 |
184| `date` | varchar(50) | 下单时间 |
185
186---
187
188## 相关文档
189
190- [Docker API](./docker.md) —— 外部开通、用户控制台、后台管理、生命周期与魔方财务对接
191- 产品设计:[../prd/docker.md](../prd/docker.md)
192- 测试:[../prd/docker-test.md](../prd/docker-test.md)
193- 主题:[../development/theme/index.md](../development/theme/index.md)
194- 宝塔 Docker API 文档:https://docs.bt.cn/api/docker/