Add captive portal setup AP as P1 feature (4.11)

Hotel/airport WiFi requires web-based captive portal authentication,
which is impossible on a headless device without this feature.

- New P1 feature 4.11: Setup AP + Captive Portal proxy
  - Box auto-enters setup mode when no network is available
  - Phone connects to temporary AP, completes portal auth via proxy
  - Requires WiFi AP+STA concurrent mode
- Fallback options: USB tethering, mobile hotspot, ethernet, MAC clone
- New CLI commands: warpgate setup-wifi, warpgate clone-mac
- New config section for setup AP parameters
- Updated hardware requirements: WiFi module must support AP+STA
- Updated roadmap v1.5 to include setup AP
- Added risk entry and glossary terms
- Renumbered 4.12-4.23 accordingly

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
grabbit 2026-02-16 18:20:42 +08:00
parent aa2db2bf5f
commit ddcfb87b36

View File

@ -200,13 +200,46 @@ TM 回写策略:
**TIMEMACHINE_PATH 与 NAS_REMOTE_PATH 的关系**:两者是 NAS 上的不同目录互不关联。NAS_REMOTE_PATH 是用户的照片/文件目录(如 `/volume1/photos`TIMEMACHINE_PATH 是 TM 备份专用目录(如 `/volume1/timemachine`。TM 回写通过独立的 SFTP 连接直接传输到 TIMEMACHINE_PATH不经过 rclone VFS。
#### 4.11 缓存预热Warm-up
#### 4.11 配网模式 + Captive Portal 代理Setup AP
盒子是 Headless 设备(无屏幕),而绝大多数酒店/机场 WiFi 需要网页认证Captive Portal。没有这个功能旅途场景直接不可用。
**核心流程**
```
① 盒子开机,检测到未配置 WiFi 或无法联网
→ 自动进入「配网模式」WiFi 模块启动临时 APSSID: Warpgate-Setup
② 用户手机连接 Warpgate-Setup 热点
→ 自动弹出配网页面(或手动访问 http://192.168.4.1
③ 配网页面显示周围可用 WiFi 列表,用户选择酒店 WiFi
④ 盒子连接酒店 WiFiWiFi 模块切换为 AP+STA 并发模式)
→ 检测到 Captive Portal 重定向
⑤ 盒子将 Captive Portal 认证页面代理到配网页面
→ 用户在手机上完成酒店 WiFi 的网页认证(输入房号/姓名等)
⑥ 认证通过盒子获得互联网访问Tailscale 自动连接
→ 配网模式关闭,临时 AP 关闭(或保持为管理入口)
```
**硬件要求**WiFi 模块必须支持 **AP+STA 并发模式**(同时作为热点和连接外部 WiFi这是配网模式的前提。大多数支持 AP 模式的 WiFi 芯片均支持此功能。
**Fallback 方案**(不需要额外开发,文档中列出即可):
- **USB 网络共享**:手机 USB 连接盒子共享手机网络tethering绕过酒店 WiFi
- **手机热点**:盒子直连手机 4G/5G 热点
- **有线以太网**:部分酒店有网口,直插通常无需认证
- **MAC 克隆**`warpgate clone-mac <MAC>` 克隆已认证设备的 MAC 地址(高级用户)
#### 4.12 缓存预热Warm-up
- 命令行手动预热指定目录
- 按时间范围预热(如"最近 7 天新增的文件"
- 定时预热任务(如每天凌晨自动拉取最新数据)
- 预热进度显示
#### 4.12 管理工具CLI
#### 4.13 管理工具CLI
- `warpgate status` — 查看服务状态、缓存命中率、回写队列、冲突文件数
- `warpgate cache-list` — 列出缓存中的文件
- `warpgate cache-clean` — 清理缓存
@ -217,28 +250,30 @@ TM 回写策略:
- `warpgate verify` — 双卡校验
- `warpgate log` — 查看实时日志
- `warpgate speed-test` — 链路速度测试
- `warpgate setup-wifi` — 手动进入配网模式
- `warpgate clone-mac <MAC>` — 克隆指定设备的 MAC 地址
#### 4.13 带宽管理
#### 4.14 带宽管理
- 支持上传/下载分别限速
- 运行时动态调整限速(不重启服务)
- 回写带宽不影响读取体验
#### 4.14 连接容错
#### 4.15 连接容错
- Tailscale 断连时自动重试
- 已缓存的文件在离线时仍可正常读取
- 写回队列在恢复连接后自动续传
- 连接超时参数可配置
#### 4.15 写冲突通知
#### 4.16 写冲突通知
- 冲突发生时通知用户CLI 提示 / 日志 / 可选 Webhook
- 冲突文件清单管理
- 手动解决冲突工具
### P2后续迭代
#### 4.16 WiFi AP 现场共享
#### 4.17 WiFi AP 现场共享
盒子内置 WiFi 模块开启热点,现场团队设备连上即可通过 SMB/WebDAV 访问缓存目录。
盒子内置 WiFi 模块开启持久热点,现场团队设备连上即可通过 SMB/WebDAV 访问缓存目录。与 4.11 配网模式的区别:配网 AP 是临时的(完成配网后关闭),本功能是持久的团队共享热点。
- 支持 AP 模式,复用已有的 SMB/WebDAV 多协议服务
- AP 网络与 Tailscale/WAN 网络隔离(安全考虑)
@ -246,24 +281,24 @@ TM 回写策略:
- **硬件要求**需要两个独立网络接口——WiFi 模块用于 AP 热点,有线/USB 4G 网卡用于 WAN/Tailscale 连接。一体机硬件设计需预留双网卡
- 典型场景:婚礼现场摄影师导入 SD 卡后,助理 iPad 连上 WiFi 即可浏览选片
#### 4.17 Web 管理界面
#### 4.18 Web 管理界面
- 缓存状态仪表盘(大小、命中率、回写队列、冲突文件、带宽趋势图)
- 缓存文件浏览器(查看/手动清除/手动预热)
- 配置修改界面(参数调整无需编辑配置文件)
- 冲突文件可视化处理
- 实时日志查看器
#### 4.18 NAS 侧 Agent 推送(可选增强)
#### 4.19 NAS 侧 Agent 推送(可选增强)
- 在 NAS 上运行轻量 AgentDocker 容器),监听文件变化主动推送给 Proxy
- 实现秒级远程变更感知(替代分钟级轮询)
- 不依赖品牌 API基于 inotify 通用方案
#### 4.19 多 NAS / 多目录支持
#### 4.20 多 NAS / 多目录支持
- 同时连接多个远程 NAS如家里 + 工作室)
- 每个 NAS 独立共享名,独立缓存策略
- 每个共享可配置不同的缓存大小和保留时间
#### 4.20 智能缓存策略
#### 4.21 智能缓存策略
- 根据文件类型自动调整策略:
- `.lrcat` / `.xmp`Lightroom catalog/sidecar→ 高优先级回写,短写回延迟
- `.CR3` / `.ARW` / `.NEF`RAW 照片)→ 大块预读,长缓存保留
@ -271,12 +306,12 @@ TM 回写策略:
- `.psd` / `.ai`(设计文件)→ 完整缓存,避免分块导致的兼容问题
- 基于访问频率自动调整缓存优先级(热数据不被淘汰)
#### 4.21 Docker 镜像
#### 4.22 Docker 镜像
- 一行命令启动:`docker run -v /mnt/ssd:/cache warpgate`
- docker-compose 配置
- 支持环境变量或挂载配置文件
#### 4.22 通知机制
#### 4.23 通知机制
- 回写失败告警Webhook / Telegram / 邮件)
- 缓存空间不足告警
- NAS 离线告警
@ -1237,6 +1272,16 @@ for dir in watched_directories:
| `INGEST_PRIORITY` | 导入文件的回写优先级 | `high` | 高于普通编辑文件 |
| `INGEST_IO_CLASS` | 导入时的 I/O 调度优先级 | `best-effort:4` | 使用 ionice 设置,避免导入阻塞缓存读取 |
### 配网模式配置
| 参数 | 说明 | 默认值 | 建议值 |
|------|------|--------|--------|
| `SETUP_AP_SSID` | 配网热点名称 | `Warpgate-Setup` | - |
| `SETUP_AP_PASSWORD` | 配网热点密码(空=开放) | 空 | 首次配网建议开放,降低门槛 |
| `SETUP_AP_AUTO` | 无网络时自动进入配网模式 | `yes` | `yes` |
| `SETUP_AP_TIMEOUT` | 配网完成后临时 AP 保持时间 | `5m` | 认证成功后自动关闭 |
| `SETUP_PORTAL_LISTEN` | 配网 Web 服务监听地址 | `192.168.4.1:80` | - |
### WiFi AP 配置
| 参数 | 说明 | 默认值 | 建议值 |
@ -1333,7 +1378,7 @@ for dir in watched_directories:
| SD 卡槽 | SD / microSD覆盖大多数相机 |
| CFexpress 槽(可选) | CFexpress Type-B高端相机用户 |
| USB-A/C 口 | 至少 2 个用于外接读卡器XQD 等)或移动硬盘 |
| WiFi 模块 | 支持 AP 模式,建议 WiFi 6 |
| WiFi 模块 | 支持 **AP+STA 并发模式**(配网必须),建议 WiFi 6 |
| 物理按钮 | 触发 SD 卡导入 / 确认操作 |
| LED 状态指示 | 导入进度 / 完成 / 错误 / 回写状态 |
| 内置电池 | 支持断电保护 + 便携使用 |
@ -1386,6 +1431,7 @@ mount -o compress=zstd /dev/ssd_partition /mnt/ssd/warpgate
| 缓存空间耗尽 | 中 | dirty 文件(导入+TM撑满 SSD | 导入前空间预检TM 硬配额缓存空间告警7.3.1 |
| 中转服务带宽成本 | 中 | DERP 中继带宽随用户增长上升 | 大部分连接走 P2P 直连;按流量分级限速/计费;初期节点少按需扩容 |
| 云备份存储成本 | 低 | 用户数据增长导致存储费用上升 | 接低价对象存储B2/R2按量计费传导成本增量备份减少传输量 |
| 酒店 Captive Portal | 中 | Headless 设备无法完成网页认证,旅途场景不可用 | 配网 AP + Portal 代理4.11fallbackUSB tethering / 手机热点 / MAC 克隆 |
---
@ -1394,7 +1440,7 @@ mount -o compress=zstd /dev/ssd_partition /mnt/ssd/warpgate
| 阶段 | 内容 | 重点 |
|------|------|------|
| **v1.0 — MVP** | 配置文件 + 部署脚本 + CLI 管理 + 基础一致性 + Time Machine 支持 | SMB + 读写缓存 + 三时间戳 + 精简 metadata两表+ 分层轮询 + TM 备份目标(几乎零 Samba 配置成本) |
| **v1.5 — 硬件原型** | SD 卡导入 + 自动归档 + 双卡校验 + LED/按钮交互 + 缓存预热 + 带宽管理 + 连接容错 + 写冲突通知 | 外拍现场核心场景 + P1 功能补全,验证硬件形态 |
| **v1.5 — 硬件原型** | SD 卡导入 + 自动归档 + 双卡校验 + **配网模式 + Captive Portal 代理** + LED/按钮交互 + 缓存预热 + 带宽管理 + 连接容错 + 写冲突通知 | 外拍现场核心场景 + P1 功能补全,验证硬件形态 |
| **v2.0 — 组网服务** | 内置 Headscale + 高速 DERP 节点 + WiFi AP 共享 | 开箱即连 + 现场团队协作 |
| **v2.5 — 容灾 + 附加** | 云端异地备份 + Docker 镜像 + 多协议NFS/WebDAV+ NAS 侧 Agent 推送 | 数据安全闭环 + 降低部署门槛 |
| **v3.0 — 硬件产品** | 定制硬件SSD + 电池 + SD 槽 + WiFi工业设计开箱即用 | 产品化,面向非技术用户 |
@ -1510,7 +1556,7 @@ mount -o compress=zstd /dev/ssd_partition /mnt/ssd/warpgate
| 程序员场景Git 缓存、Docker 镜像等) | 痛点不够强已有成熟方案Git 天然分布式、Codespaces 等) |
| 公网文件分享链接 | 法律风险 + 需求不明确 |
| 多设备 SaaS 管理面板 | 需求不明确,过早 |
| Docker 开放运行环境 | 产品定位发散(注:这里指的是允许用户在盒子上运行任意 Docker 容器,而非 4.21 的"将本产品打包为 Docker 镜像部署" |
| Docker 开放运行环境 | 产品定位发散(注:这里指的是允许用户在盒子上运行任意 Docker 容器,而非 4.22 的"将本产品打包为 Docker 镜像部署" |
---
@ -1535,3 +1581,5 @@ mount -o compress=zstd /dev/ssd_partition /mnt/ssd/warpgate
| **DERP** | Tailscale 的中继服务器Designated Encrypted Relay for Packets在无法直连时中转流量 |
| **Ingest / 导入** | SD 卡文件导入到缓存并自动归档到 NAS 的过程 |
| **WAL** | SQLite 的写前日志模式Write-Ahead Logging允许并发读写 |
| **Captive Portal** | 强制门户认证,酒店/机场等 WiFi 连接后重定向到网页要求登录的机制 |
| **AP+STA 并发** | WiFi 模块同时作为热点AP和连接外部网络STA的工作模式 |