Files
WebDAV/PROJECT_MEMORY.md

2.3 KiB
Raw Permalink Blame History

davbox · 项目记忆

一句话

极简 WebDAV 服务:admin 管账号、client 管文件、App 用来同步。一个应用一个账号一个目录,互不可见。

立项原因(2026-09-28)

用户需要一个像坚果云"创建应用"那样简单的 WebDAV,主要给 App 用。 调研过的市面方案与实测结论:

方案 实测结论
SFTPGo(12,588★) 功能对 ✓ 隔离实测通过 ✓ 但十几概念 + 管理端全英文 ✗ "功能复杂度"远超需求
dufs(10,802★,3.02 MiB) 隔离实测通过 ✓(越权 403/403、../ 400)但只有启动参数、无 admin ✗
hacdias/webdav(5,882★,7.09 MiB) 两种配置写法隔离都没锁住 ✗(可见兄弟目录 / 暴露容器根)
rclone / copyparty / OpenList / Alist / Cloudreve 均无"每账号独立根 + 管理页"这套 ✓ 或过重 ✗
filebrowser(35,936★) 根本没有 WebDAV ✗
结论 缺口只有薄薄一层 → 自研产品层,协议用官方库 ✓

位置与环境

  • 代码:本仓库
  • 端口规划:开发/测试 127.0.0.1:18900
  • 数据目录:./data(账号 JSON + 各应用目录 + 审计 JSONL)
  • 编译:Go 1.24+ ✓
  • 前端构建:Node v26 ✓

技术选型

见 docs/DECISIONS.md(含全部被否方案与当时的实测证据)。 要点:Go + golang.org/x/net/webdav(官方,7543 行实现 / 4275 行测试)+ React/Vite/TS 内嵌 + JSON 账号 + 单静态二进制。

部署

  • systemd unit 常驻 ✓(已上线)
  • nginx 反代 + TLS ✓(certbot 签发证书)
  • 认证:自带账号体系(默认) ✓;管理端可关闭自带口令(AUTH_MODE=sso),协议端点永远保留自带账号 ✓

协作约定

  • 需求文档在 docs/REQUIREMENTS.md,验收标准在 docs/SPEC.md ✓
  • 需求文档写明改动范围与边界(不动生产进程与端口)✓
  • 不硬编码任何域名与 IP ✓(一律环境变量或配置注入)
  • 文案:中文、唯美克制、禁 emoji / 鸡汤 / AI 腔 ✓

进度

  • 技术选型 + 命名 + 建项目(2026-09-28)
  • 阶段一:底盘(账号隔离 + 六动词 WebDAV)
  • 阶段二:admin 页 + client 页
  • 部署:systemd + nginx + TLS
  • 阶段三(可选):配额 / 用量 / 分享链接