深色模式
应用商店 & 服务凭据
在服务器工作台的「应用商店」里一键安装常用软件(对标 1Panel 应用商店);装好的服务,其连接凭据由 Reeve 自动加密入库成「服务凭据」——AI 全程拿不到密码。
应用商店
工作台 → 应用商店 标签,三个视图分段切换:
| 视图 | 内容 |
|---|---|
| 全部 | 可装应用目录(分类 chips + 搜索),点卡片看详情,一键安装 |
| 已安装(N) | 本机已装应用,卡片化启停 / 重启 / 日志 / 改参数 / 卸载 |
| 可升级(N) | 当前版本 ≠ 目录推荐版本的应用,一键升级(保数据卷) |
Compose 化安装
商店应用以 Docker Compose 栈方式安装:
- 点安装弹预览 Modal,确认后逐行流式日志显示安装进度(可最小化到右下角 dock)
- 安装状态以 compose 栈发现为准(栈目录持久,停了也算已装)
- 引擎 / 宿主类应用(Docker、OpenResty)从宿主状态探测
外部栈纳管
不是通过 Reeve 装的应用也能管:Reeve 发现宿主上已有的 compose 栈和容器,自动纳管进「已安装」,把它们和目录项匹配上(按镜像名),照样能启停 / 看日志 / 升级。
应用图标
应用商店、详情、已装列表统一用 AppLogo 渲染官方 SVG 图标(Docker、Nginx、Grafana、Gitea、PostgreSQL…),找不到时 emoji 兜底,不再是散落的 emoji。
密码自动生成入库
商店应用装好后(如 MySQL / Redis / 1Panel),密码由后端生成 + 加密入库,前端和 AI 永远看不到明文——这就是下面的「服务凭据」。
服务凭据
「服务凭据」= AI 用 install_with_secret 一键装服务后自动入库的凭据(1Panel / Portainer / MySQL / Postgres / Redis 等),也可以手动新建。
进入:主界面左侧导航 → 服务凭据。
列表
每条凭据显示:
| 字段 | 示例 |
|---|---|
| 服务类型 | 1Panel / MySQL / Portainer |
| 服务器 | 关联的服务器别名 |
| 字段组 | URL / Host / Port / Username / Password 等 |
| 创建时间 | |
| 来源 | AI 自动装 / 手动 |
一键装服务 = AI 拿不到密码
当 AI 调 install_with_secret(template="mysql", params={...}):
- AI 看到:模板 + 参数(不含密码字段)
- Reeve 后端:随机生成强密码(密码学安全 RNG)
- 远端:用密码运行模板(装 MySQL + 初始化 root 密码)
- 入库:URL / Host / Port / Username / 生成的密码 AES-256-GCM 加密入
installed_services表 - AI 拿到的返回:
vault_id+ 部分公开字段(URL / Host / Port) - AI 永远不知道真密码
字段 Reveal(显示明文)
每个字段旁有 🔒 按钮:
- 点击 → 二次确认弹窗
- AES-GCM 解密 + 显示
- 同时复制到剪贴板
- 10 秒后剪贴板自动清空
- 行为写审计:
accessed_at + access_count++
字段优先级:URL / HOST → USERNAME → PASSWORD → PORT → 其它。
手动新建 DB 凭据
右上 新建(仅支持 DB 类型,其它由 AI 装):
| 字段 | 示例 |
|---|---|
| 类型 | MySQL / MariaDB / PostgreSQL / SQLite / SQL Server / MongoDB / ClickHouse / Redis |
| 名称 | prod-db-master |
| 服务器 | (可选)关联 服务器 |
| Host / Port | localhost / 3306 |
| Username / Password | 输入即加密 |
| 数据库 | mydb(可选) |
| 隧道 | 可选关联 端口转发 |
关联 Web UI / 快速查询
- 有 Web UI 的服务(1Panel / Portainer / Grafana)卡片显示 打开 Web UI 按钮
- SQL 类凭据卡片有 查询 按钮,右侧抽屉直接打开数据库工作台,自动连接
一键转敏感库
凭据右键 → 转敏感库:把凭据当作「已确认敏感」存入敏感库,用于跨客户端协同(敏感库可 CSV 导出,凭据库不直接出)。
删除
二次确认 → 同时删关联隧道 → 加密数据从表清除;审计保留 installed_service_deleted 事件。
安全特性
| 特性 | 实现 |
|---|---|
| 密码加密 | AES-256-GCM;DEK 在 keyring(可选主密码再包 Argon2 KEK) |
| Reveal 审计 | 每次解密都写 audit_log;access_count 累加 |
| 剪贴板自清 | 复制后 10 秒清空 |
| AI 不可见 | install_with_secret 只返回 vault_id + 公开字段 |
| 主密码锁屏 | 锁定时无法 Reveal、无法删除 |
故障排查
| 症状 | 排查 |
|---|---|
| Reveal 失败 | 主密码可能锁了,先解锁 |
| 复制后剪贴板空 | 已过 10 秒清空,重新 Reveal |
| 应用装一半失败 | 看流式日志定位;国内网络可在 Docker 镜像加速器配镜像源 |
| 装的服务凭据格式不对 | 检查 install_with_secret 模板参数 |