跳到主要内容

自建轻量化网盘与 WebDAV:用 dufs 替代重量级方案

· 阅读需 6 分钟

你是否想过在家庭服务器或 VPS 上搭一个网盘,却发现 Nextcloud 太重、ownCloud 太臃肿,而 Samba 又只能在内网用?本文介绍一个用 Rust 编写的极简文件服务器 dufs,它同时提供 Web 文件管理和 WebDAV 协议支持,一条命令即可启动,Docker 部署也只需几行配置。

为什么需要一个轻量化网盘

常见的文件共享需求其实很朴素:

  • 手机想访问电脑上的某个文件
  • 局域网内给同事传个大文件
  • 在外面想远程访问家里的资料
  • 给备份工具(Rclone、Restic)提供一个 WebDAV 目标

如果你用过 Nextcloud 或 ownCloud,大概会感受到:为了实现这些简单的需求,你得维护一套 LAMP/LEMP 环境、一个数据库、定期的安全更新——这还没算上 PHP 带来的性能开销。对于个人或小团队来说,这套方案过于沉重。

另一方面,python3 -m http.server 倒是轻量,但只能下载、不能上传,更别提搜索和权限控制了。

dufs 刚好填补了这个空白:一个 Rust 编写的单二进制文件服务器,同时提供 Web UI 和 WebDAV 协议,支持上传、搜索、权限控制,甚至可以用 curl 完成所有操作。

dufs 是什么

dufs 是一个用 Rust 编写的轻量级文件服务器,核心特性:

能力说明
静态文件服务浏览器直接查看和下载文件
文件上传拖拽上传文件和文件夹
文件管理在线创建、编辑、搜索、删除
目录打包下载整个文件夹下载为 ZIP
断点续传支持大文件的分块上传/下载
权限控制基于账号的路径级读写权限
WebDAV 协议可作为网络磁盘挂载
HTTPS内置 TLS 证书支持
curl 友好所有操作均可通过 curl 完成
健康检查内置 /__dufs__/health 端点

一个二进制、零依赖、默认端口 5000,dufs 一条命令即可启动。

WebDAV:被低估的协议

WebDAV(Web Distributed Authoring and Versioning)是 HTTP 的扩展协议,在标准 HTTP 方法(GET、PUT、DELETE)基础上增加了 PROPFIND、MKCOL、COPY、MOVE 等方法,使得客户端可以像操作本地文件系统一样操作远程文件。

为什么 WebDAV 重要

  1. 系统级挂载:Windows、macOS、Linux 原生支持将 WebDAV 映射为网络驱动器,文件管理器直接访问
  2. 应用生态丰富:大量笔记软件(Joplin)、备份工具(Rclone、Restic、Duplicati)、同步工具原生支持 WebDAV
  3. 跨平台:不依赖特定客户端,任何支持 WebDAV 的软件都能对接
  4. HTTP 基础:走标准 HTTP/HTTPS 端口,穿透防火墙和代理天然友好

各平台 WebDAV 客户端

平台客户端说明
Windows资源管理器(原生)映射网络驱动器,但有 50MB 默认文件大小限制
WindowsRaiDrive(免费)体验最好,支持 WebDAV/SFTP/FTP,像本地磁盘一样使用
WindowsExpanDrive / NetDrive商业软件,稳定性更好
macOSFinder(原生)「连接服务器」输入地址即可,但大文件和重连体验一般
macOSExpanDrive / NetDrive使用 File Provider API,更稳定
Linuxdavfs2mount -t davfs 挂载,但项目已不太活跃
LinuxRaiDrive CLI支持 Debian/RHEL/Alpine 等发行版
移动端各平台 WebDAV AppiOS/Android 均有大量 WebDAV 客户端

💡 Windows 原生 WebDAV 的坑:默认 50MB 文件大小限制需要改注册表(FileSizeLimitInBytes),且使用 HTTPS 时证书验证较严格。推荐用 RaiDrive 替代。

权限控制与鉴权

dufs 的权限模型设计得简洁但够用,核心是 账号 + 路径 + 权限 三元组:

鉴权方式

dufs 同时支持 Basic AuthDigest Auth,默认使用 Digest Auth(更安全,密码不在网络中明文传输)。

# Digest Auth(默认)
curl --user admin:pass123 --digest http://your-server:5000/

# Basic Auth
curl --user admin:pass123 http://your-server:5000/

权限规则格式

-a "用户名:密码@/路径:权限"
  • :rw 表示读写权限,不加则只读
  • @/ 前面不写用户名密码表示匿名用户
  • 多条规则用 | 分隔

实际场景示例

# 管理员:完全读写权限
-a "admin:secretpass@/:rw"

# 普通用户:只能读写 /share 目录
-a "user:userpass@/share:rw"

# 匿名用户:只读访问 /public 目录
-a "@/public"

# 组合:管理员全权 + 匿名只读
-a "admin:secretpass@/:rw|@/"

重要细节

账号权限受全局权限约束。如果 dufs 启动时没有开启 --allow-upload,即使账号被授予 :rw 权限,也无法上传。这意味着你可以用全局开关做硬性限制,用账号权限做细粒度控制。

dufs 还支持 哈希密码,避免在命令行或配置文件中暴露明文密码,对生产环境更友好。

和其他方案对比

特性dufsFilebrowserNextcloudSamba
部署复杂度一条命令Docker / 二进制LAMP + DB系统级安装
内存占用~10MB~30MB512MB+~50MB
Web UI简洁完整功能丰富
WebDAV原生支持不支持支持不支持
权限控制路径级用户级完整 ACL系统用户级
文件编辑在线编辑在线编辑在线编辑 + 协作
搜索内置内置全文搜索
外网访问HTTP 直接反代反代需 VPN
适用场景轻量共享 + WebDAV纯 Web 文件管理团队协作内网共享

选择建议

  • 需要团队协作、日历、联系人 → Nextcloud
  • 只需要 Web 文件管理界面 → Filebrowser(本站也有部署教程
  • 需要轻量 + WebDAV + 文件管理 → dufs
  • 纯内网共享、不需要外网访问 → Samba

我的用法

我的典型使用场景:

  1. 网盘替代:浏览器访问 dufs 的 Web UI 上传下载文件,手机和电脑通用
  2. WebDAV 挂载:Windows 上用 RaiDrive 把 dufs 挂载为本地磁盘,像操作本地文件一样操作远程文件
  3. 备份目标:Rclone 定期备份重要数据到 dufs 的 WebDAV 端口
  4. 临时共享:需要给同事传文件时,丢到 dufs 的共享目录,给个链接即可

具体部署方式见教程:Dufs 部署

总结

dufs 用最简单的方式覆盖了个人网盘的核心需求:文件管理 + WebDAV + 权限控制。对于不需要 Nextcloud 那种全家桶功能的用户来说,dufs 是一个非常优雅的选择——Rust 带来的低资源占用和单二进制部署,让维护成本几乎为零。

如果你的需求更复杂(多人协作、在线编辑、插件生态),Nextcloud 依然是更好的选择。但对于「我就是想简单存取文件、挂个网盘、做个备份目标」这个场景,dufs 值得一试。