
TanXinandTanXin
a75ae17ae7
feat: 新增 locationHint 智能区域调度,自动推断最优 DO 部署区域降低 SSH 连接延迟 (#33)
## Summary
- 新增 DO locationHint 智能区域调度:保存服务器时通过 ipinfo.io 自动推断目标 IP 地理位置,持久化最优
Cloudflare DO 部署区域,连接时直接读取数据库,零运行时外部 API 调用
- 服务器管理弹窗和匿名连接表单新增区域下拉选择器(默认"自动"),支持手动覆盖
- 主题编辑器预览同步新增 REGION_HINT 区域选择器
## Changes
### Core
- 新增 `src/worker/ip-geo.ts`:IP 地理位置推断模块,支持 11 个 Cloudflare DO 区域,US/CA
按经度细分东西海岸
- 新增 `frontend/src/regions.ts`:共享区域选项组件
- `servers` 表新增 `region`(用户手动覆盖)和 `inferred_hint`(系统推断持久化)两列,使用幂等
`PRAGMA table_info` 守卫安全迁移
- `handleAddServer` 保存时触发一次性 IP 地理推断并写入 `inferred_hint`
- `handleUpdateServer` host 变更时自动重新推断
- `handleConnectServer` 连接时直接读 DB 注入 `locationHint`,零运行时外部调用
- `handleSSHConnection` 匿名路径仅读取 URL `?region=` 参数作为手动覆盖
- `handleTokenSSHConnection` 从 config.locationHint 读取,经白名单校验后传入 DO
`get()`
### Frontend
- 服务器管理弹窗新增区域下拉选择器,编辑时显示系统推断值
- 匿名连接表单新增区域高级选项
- DEBUG_MODE 下保存服务器时显示推断过程调试弹窗
- 主题编辑器预览同步新增 REGION_HINT 区域选择器
### Fixes
- 切换 IP 地理推断 API 从 ipapi.co 到 ipinfo.io(免费 50k 次/月,避免 Workers 共享 IP 下的
429 限流)
- 亚太地区统一使用 `apac` hint,避免 `apac-ne` 无 DO 节点导致 fallback
- 终端输入不再触发无意义的 `JSON parse failed` 噪音日志
- 区域选择器和调试弹窗适配主题变量
## Note
locationHint 是 Cloudflare 的 best-effort 特性,当目标区域 DO 容量不足时会 fallback
到最近可用区域。免费计划下亚太区域 DO 容量有限,可能无法总是分配到最近节点。
---------
Co-authored-by: TanXin <tanxin@example.com>
2026-07-12 20:06:39 +08:00
..
2026-07-12 20:06:39 +08:00
2026-06-29 21:59:37 +08:00