# 管理员手册

这本手册写给两类管理员：

- **自托管团队的管理员**：入口和机器都是你们自己的，开号、订阅、机器全归你管。
- **托管客户的管理员**：入口和机器由我们运行，你管人、订阅和额度，机器由我们负责。

每一页都分「自托管」「托管」两栏写；只适用于一类的步骤会写明。

| 篇目 | 讲什么 |
|---|---|
| [开号与删号](accounts.md) | 邀请一个人、给他在机器上开账号、删号会留下什么 |
| [订阅与额度](quota.md) | 用我们提供的订阅，或接上你们自己的；每人上限；看谁用了多少 |
| [机器](machines.md) | 加一台机器、维护中、下线、失联时会发生什么 |
| [谁能看到什么](access.md) | 管理员和成员各看得到什么，管理员能做什么、不能做什么 |

## 哪些事你自己做，哪些找我们

| 事情 | 自托管 | 托管 |
|---|---|---|
| 邀请成员、删号 | 你 | 你 |
| 加订阅、暂停、移除 | 你 | 你（用我们提供的订阅时由我们加） |
| 每人额度 | 你 | 你 |
| 看用量、看审计 | 你 | 你 |
| 加机器、维护、下线 | 你 | 我们 |
| 谁是管理员 | 你，写在入口的部署配置里 | 我们，按你们开通时给的名单写进部署配置 |
| 入口升级、备份 | 你 | 我们 |

托管一栏里没有一步需要 root 或登录到机器上；需要的那几件事在「我们」那一列。

## 管理员从哪里操作

**网页控制台**：浏览器打开 `https://hub.example.com/app`，用管理员的身份登录。左边栏多出一组「管理」：全部会话 · 按人用量 · 订阅池 · 服务节点与客户端 · 使用者 · 设置 · 审计。成员打开这些页面只会看到「页面不存在」（404），和打开一个不存在的地址一样。

**命令行**：`fleet hub …`、`fleet users …`，装好客户端（`curl -fsSL https://hub.example.com/install | sh`）就有。它们要一份管理员凭据，只从环境变量读，从不写进文件：

- 自托管：入口的操作者令牌，`export CCQUOTA_VIEWER_TOKEN=…`（部署入口时生成的那个）。
- 托管：你在浏览器里登录入口后的会话 cookie。浏览器开发者工具 → 应用（Application）→ Cookie → `ccq_sess`，复制它的值，然后 `export FLEET_HUB_SESSION=<值>`。退出登录后它就失效。

> 将改为：托管管理员在命令行里也用 `fleet login` 的身份，不再手抄 cookie。

## 谁是管理员

只有两种角色：**管理员** 和 **使用者**（成员）。管理员不能在网页上加减，只写在入口的部署配置里：

- `CCQUOTA_GITHUB_ADMINS`：管理员的 GitHub 用户名，逗号分开。
- `CCQUOTA_ADMINS`：用邮箱或微信登录的管理员（邮箱地址或身份 id）。

改完重新部署入口才生效。「使用者」页上管理员一行是只读的，网页上删不掉。

## 接第一家托管客户之前

公开前有七项安全门槛（发布签名钥匙、机器上的 root 权限、凭据有效期等）。**七项全绿之前，我们不开通任何托管客户**；对外推广至少要第 1 项是绿的。

- 自托管：在任意一台机器上 `fleet doctor`，看 `gate` 那几行，每项 PASS / FAIL 加一句原因。
- 托管：开通前请我们给你看同一份读数；你也可以登录后在浏览器打开 `https://hub.example.com/v1/fleet/gate` 自己读。

七项各是什么、为什么要做，见 [安全与隔离](../security.md)。
