不知道你有没有过这种需求:想在家里养一个轻量的文件服务,能上传管理文件、能甩个链接给别人分享、最好还能直接丢个静态页面上去,复制链接就能打开。

我之前也找了一圈,Nextcloud 功能强但太重,占用高、依赖多;其它一些方案要么缺这缺那,要么配置麻烦。直到看到 Dufs 这个项目——一个用 Rust 写的 utility file server,单二进制、体积小、该有的功能基本都自带,目前 GitHub 上已经有 10k+ star。

单文件才 9MB

原版是英文界面,没有中文切换,部分操作也不太顺手。社区里有人做了中文魔改版(JunWan666/dufs),顺手补上了中文界面、网页初始化账号、拖拽上传提示等。这篇文章就记录一下我在飞牛 NAS 上用 Docker 部署它、并配合 cpolar 做公网访问的全过程。

Dufs 是什么

Dufs 的官方定位很直白:一个支持静态文件服务、上传、搜索、访问控制和 WebDAV 的 utility file server。

它做的事情很简单——把某个目录、甚至单个文件,快速暴露成一个可以通过浏览器、命令行和 WebDAV 客户端访问的服务。不需要数据库,也不需要复杂的配置文件,一个可执行文件就能跑起来。

它最直观的特点就是「轻」:

  • 单二进制:整个程序就是一个可执行文件,没有外部依赖,下载解压就能用。
  • 体积小:编译后的二进制大约在 2MB 到 9MB 之间(取决于编译选项和平台),这就是我们常说的「9MB」。
  • 跨平台:官方提供 Windows、macOS、Linux 的版本,也支持 Docker 部署。

这个体量意味着你把它扔到任何一台机器上——云服务器、NAS、甚至树莓派——都几乎零负担。

常用的功能基本都齐了

Dufs 虽然轻,但日常文件操作基本都覆盖到了:

  • 静态文件服务:直接托管目录或单个文件,浏览器打开就能浏览和下载。
  • 文件上传:支持拖拽上传文件/文件夹,支持断点续传。
  • 在线编辑:可以在浏览器里直接创建、编辑文本文件。
  • 搜索:按文件名模糊搜索。
  • 权限控制:支持用户名密码认证,可以设置只读或读写权限。
  • WebDAV:可以挂载为网络驱动器,Windows / macOS / Linux 都支持。
  • 文件夹打包下载:整个文件夹一键打包成 ZIP。
  • curl 调用:方便命令行操作和自动化。

这些能力不需要额外安装任何插件,Dufs 本身就带了。这也是我最后选它的原因。

部署:Docker 一条命令拉起

我平时用 NAS 比较多,部署直接走 Docker——不用管系统环境,一条命令拉起来就能跑,也有图形化管理界面,后面迁移也方便。

我用的是社区打包的中文镜像,基于上游 Dufs 做了中文适配。如果你也想试试,可以直接用命令拉取:

1
2
3
4
docker run -d --restart unless-stopped \
-p 5000:5000 \
-v /vol1/1000/要共享的目录:/data \
tannic666/dufs:latest

如果你习惯在 NAS 的 Docker 图形界面里点,也可以照着下面步骤来。以飞牛 NAS 为例:

Docker 部署

  1. 打开 Docker,确保 Docker 服务已经启动;
  2. 在左侧「镜像仓库」页搜索镜像 tannic666/dufs,标签保持 latest 默认即可,点击下载;
  3. 下载完成后进入「本地镜像」页,点击右侧的「创建容器」;
  4. 勾选「开机自启动」,下一步;
  5. 在「高级设置」的存储位置里,把你想共享的文件夹挂载到容器内的 /data(也可以新建一个目录);
  6. 最后点击「创建容器」。

容器跑起来后,在「容器」页把鼠标移到右侧的链接图标上,就能看到映射出来的端口,直接点击即可跳转到项目页面。

第一次打开记得点页面上的「设置密码」,给项目初始化一个管理员账号。如果打算放比较重要的文件,建议密码设复杂一点。

功能体验

容器跑起来之后我用了挺长时间,常用的功能基本都试了试,挑几个实用的说一下。

中文界面

魔改版把原版的英文界面换成了中文,菜单、按钮、提示都是中文,用起来顺手很多。如果习惯英文,在设置里也能切回去。

上传分享与 WebDAV

拖拽上传

直接把文件拖进页面,会出现全屏提示告诉你文件会传到当前目录,松手就开始上传,进度条走完就传好了。

复制链接分享

文件传完后,鼠标移到文件上,右侧有个「复制链接」按钮,点一下链接就到剪贴板了。把这个链接发给别人,对方不用装任何客户端,点开就能直接访问。

注意:刚部署完时文件链接还是 NAS 的局域网地址,目前只能同一个局域网下访问,公网访问可以看后面章节。

托管静态页面

我最初的需求里就有「丢个静态页面上去,复制链接就能访问」。Dufs 可以直接把 HTML 文件当静态资源跑——把 index.html 传到目录里,浏览器打开对应链接就能看到页面。做好的网页往里一放,链接发给朋友,对方用浏览器打开就能看效果。

WebDAV 挂载

Dufs 支持 WebDAV。在 Windows 资源管理器里「映射网络驱动器」,填上 http://飞牛NAS的IP:5000,输入账号密码,就能把 Dufs 挂成网络盘。如果 Windows 自带挂载方式连接失败,可以试试用 HTTPS 地址,或通过支持 WebDAV 的客户端连接。

文件夹打包下载 / 在线编辑 / 搜索 / 权限

  • 文件夹右侧有下载按钮,点一下自动打包成 ZIP,适合一次拿走整个目录;
  • 小文本文件可以直接在浏览器里编辑,也能按文件名搜索,临时改个配置、找文件很方便;
  • 在设置里可以调整未登录访客的权限,包括全站只读、仅允许访问 public 目录、以及禁止匿名访问。全站只读模式下,还可以按需开启「通过完整链接访问指定文件」。

公网访问:用 cpolar 把端口映射到外网

前面复制的文件链接还是 NAS 的局域网地址,在家里打开没问题,但手机关掉 Wi-Fi、或者把链接发给外地的朋友就访问不到了。

接下来用 cpolar 把飞牛 NAS 上 Dufs 的 5000 端口映射到公网,这样从外面也能打开文件页面,而飞牛的管理后台不需要对外开放。

公网远程访问

安装 cpolar

先在系统设置里打开 SSH 功能,然后用 SSH 连进飞牛 NAS 的终端:

1
ssh 飞牛用户名@你的Nas系统IP地址

进入后切换到 root(输入密码时不会显示):

1
sudo -i

然后执行下面命令安装 cpolar:

1
sudo curl https://get.cpolar.sh | sh

安装完成后查看服务状态,显示 active 即为正常启动:

1
sudo systemctl status cpolar

在浏览器中输入飞牛 NAS 的 IP + 9200 端口访问 Web UI 管理界面(例如 http://192.168.50.212:9200/),注册并登录账号即可进入后台。

创建隧道(免费随机域名)

随机域名方式更适合临时测试或短期使用,公网地址会在一段时间后变化,不适合长期固定访问,但配置简单、可以免费体验。

在左侧「隧道管理 → 隧道列表」里,点击「创建隧道」或编辑现有隧道,协议选择 http,本地地址填写 Dufs 的访问端口 5000,保存后点击「状态 → 在线隧道列表」,就能看到生成的公网地址(http 和 https 各一个,免去配置 SSL 证书的麻烦)。

固定二级子域名(长期推荐)

固定二级子域名需要 cpolar 基础套餐及以上。如果准备长期用它分享文件、托管静态页面或连接 WebDAV,更推荐配置固定域名,省去反复更换地址的麻烦。

  1. 登录 cpolar 官网后台,进入「预留」页面,找到「保留二级子域名」,填写地区、自定义名称(如 dufs01,名称唯一不可重复)和备注,点击保留;
  2. 回到飞牛 NAS 上的 cpolar Web UI,编辑前面的 Dufs 隧道,把域名类型改为「二级子域名」,填入刚保留的名称,更新即可。

配置完成后,在线隧道列表里 Dufs 的隧道就会变成固定公网地址,浏览器访问验证一下,连里面存放的 HTML 文件也能正常显示。以后分享链接不用再因为地址变化而重发。

总结

折腾下来,Dufs 基本满足了最初的需求:把 NAS 上的一个目录挂出来,就能在浏览器里管理和分享文件,顺手放几个静态页面也很方便。这次社区二次开发主要补上了中文界面和网页初始化账号,日常用起来更顺手。

  • 临时分享资料:上传文件后复制链接,按需设置访客权限;
  • 做好的 HTML 页面也能放进去,方便发给朋友看效果;
  • 配合 cpolar 固定域名,出门也能访问,WebDAV 的连接地址不用反复修改。

如果你也想给旧电脑或 NAS 加一个轻量文件服务,可以部署试试。原项目在 sigoden/dufs,中文魔改版在 JunWan666/dufs,使用中遇到问题欢迎去提反馈。

Dufs Rust Apache-2.0 单文件 9MB WebDAV

一个用 Rust 写的轻量级文件服务器:支持静态文件服务、上传、搜索、访问控制与 WebDAV。单二进制、零依赖、跨平台,编译后仅约 9MB,可托管静态页面、断点续传、文件夹打包下载,非常适合跑在 NAS 或低配机器上做私有文件服务。中文魔改版由社区维护。

★ 10.9kGitHub Star
607Fork
Rust主要语言
v0.x持续维护

项目地址:github.com/sigoden/dufs | 中文魔改版:JunWan666/dufs