前言
前段时间,我一直在想找个轻量的文件服务。
我的需求其实不复杂:能在上面挂点东西,可以上传管理文件,可以分享,最好丢个静态页面上去,复制链接就能访问。找了一圈,Nextcloud 太重,其他方案要么依赖多,要么功能没那么全。
又试了好几个,后来看到 dufs 项目,看 star 数还挺多,竟然有 10.8k star。
看介绍是Rust 写的,单二进制,9MB,支持上传、WebDAV、断点续传,也能直接跑静态文件,基本还算满足我的需求。
然后就部署起来跑了一下,然后发现原版是英文界面,没有中文切换,有些操作也不太顺手,我就把它拉下来自己改了改:调整了一下界面UI、加了中文适配、网页初始化密码、拖拽上传提示等等这些。
这篇文章记录一下部署和体验过程。如果你也有类似需求,可以参考,欢迎部署体验。
1 Dufs是什么?
上游原项目地址:https://github.com/sigoden/dufs
修改后项目地址:https://github.com/JunWan666/dufs
Dufs 是一个用 Rust 写的轻量文件服务器,作者是 sigoden。它的官方描述很直白:一个支持静态文件服务、上传、搜索、访问控制和 WebDAV 的 utility file server。
它做的事情很简单:把某个目录,甚至某个单独文件,快速暴露成一个可以通过浏览器、命令行和 WebDAV 客户端访问的服务。不需要数据库,不需要复杂的配置文件,一个可执行文件就能跑起来。
Dufs 最直观的特点就是“轻”。
- 单二进制:整个程序就是一个可执行文件,没有外部依赖,下载解压就能用。
- 体积小:编译后的二进制大约在 2MB 到 9MB 之间,具体取决于编译选项和平台。
- 跨平台:官方提供 Windows、macOS、Linux 的编译版本,也支持 Docker 部署。
我前言里说的“9MB”,就是它编译后大概的体积。这个体量意味着你把它扔到任何一台机器上——云服务器、NAS、甚至树莓派——都几乎没有负担。
Dufs 虽然轻,但常用的文件操作基本都覆盖了:
- 静态文件服务:直接托管目录或单个文件,浏览器打开就能浏览和下载
- 文件上传:支持拖拽上传文件和文件夹,支持断点续传
- 在线编辑:可以在浏览器里直接创建、编辑文本文件
- 搜索:按文件名模糊搜索
- 权限控制:支持用户名密码认证,可以设置只读或读写权限
- WebDAV:可以挂载为网络驱动器,Windows、macOS、Linux 都支持
- 文件夹打包下载:整个文件夹一键打包成 ZIP
- curl 调用:方便命令行操作和自动化
这些功能不需要额外装什么,Dufs 本身都带了。这也是我选它的原因,所以我就把它拉下来部署了。跑起来之后确实够用,就是原版是英文界面,有些操作不太顺手,这才有了后面的改动。
2 部署Dufs项目
我平时用 NAS 比较多,所以部署直接走 Docker。Docker 的好处是不用管系统环境,一条命令拉起来就能跑,也有图形化管理界面,后面迁移也方便。
我用的镜像是我自己打包的,基于上游 dufs 改的中文版。如果你也想试试,可以直接使用命令拉取:
# 替换输出的真实目录,然后执行
docker run -d --restart unless-stopped -p 5000:5000 -v /vol1/1000/要共享的目录:/data tannic666/dufs:latest
如果你习惯在 NAS 的 Docker 界面里点,也可以照着下面步骤来部署。
就以飞牛 NAS 为例,首先打开Docker,确保Docker服务已经打开:

接着选择左侧菜单的镜像仓库页,在页面搜索如下镜像名称:
tannic666/dufs
再搜索结果中,找到对应镜像,点击右侧的下载按钮,镜像标签保持latest默认即可:

然后来到本地镜像页,等待镜像下载完成后,点击右侧的创建容器按钮:
来到高级设置页面,在存储位置区域,点击文件夹图标,选择一个你想要共享的文件夹,或者新建一个都可以,再点击下一步:
接着,回到左侧菜单的容器页,鼠标上移到右侧的链接图标,会显示该容器的端口:
然后点击页面上的设置密码,给该项目初始化一个管理员账号:
注意:如果需要存放一些偏重要性文件,建议密码设置复杂一些!
3 功能体验
容器跑起来之后,我用了一段时间,常用的功能基本都试了试。下面挑几个我觉得比较实用的说一下。
3.1 中文界面
原版是英文界面,我改成了中文。打开页面后,菜单、按钮、提示都是中文的,用起来更顺手。
如果习惯英文,也可以在设置里切回去。
3.2 上传文件
直接把文件拖到页面里,会出现全屏提示,告诉你文件会传到当前目录。松手就开始上传,进度条走完就传好了。
3.3 复制链接分享
文件传完后,鼠标移到文件上,右侧有个复制链接按钮。点一下,链接就到剪贴板了:
把这个链接发给别人,对方不用装任何客户端,点开就能直接访问:
注意:当前处于局域网,目前只能同一个局域网下访问,公网访问可以看后面章节部分。
3.4 挂静态页面
我一开始的需求里就有“丢个静态页面上去,复制链接就能访问”。dufs 可以直接把 HTML 文件当静态资源跑。
把 index.html 传到目录里,浏览器打开对应链接,就能看到页面:

3.5 WebDAV 挂载
dufs 支持 WebDAV。在 Windows 资源管理器里“映射网络驱动器”,填上 http://飞牛NAS的IP:5000,输入账号密码,就能把 dufs 挂成网络盘。
如果 Windows 自带的挂载方式连接失败,可以尝试使用 HTTPS 地址,或通过支持 WebDAV 的客户端连接。
3.6 文件夹打包下载
文件夹右侧有下载按钮,点一下会自动打包成 ZIP,适合一次拿走整个目录。
3.7 在线编辑和搜索
小文本文件可以直接在浏览器里编辑,也能按文件名搜索。这两个功能我用得不多,但临时改个配置、找文件挺方便。
3.8 权限设置
在设置中,可以调整未登录访客的访问权限,包括全站只读、仅允许访问 public 目录,以及禁止匿名访问。全站只读模式下,还可以按需要开启通过完整链接访问指定文件的功能。
4 远程访问
前面复制的文件链接还是 NAS 的局域网地址。在家里打开没问题,但是手机关掉 Wi-Fi,或者把链接发给外地的朋友,就访问不到了。
接下来用 cpolar 把飞牛 NAS 上 Dufs 的 5000 端口映射到公网。这样从外面也能打开文件页面,飞牛 NAS 的管理后台不需要对外开放。
4.1 安装 cpolar
在系统设置中打开ssh功能,然后使用ssh命令,连接进入飞牛NAS的终端:
ssh 飞牛用户名@你的Nas系统IP地址
接着,在终端执行如下命令,切换至root用户(输入密码时不会显示):
sudo -i
然后,执行下面命令安装 cpolar:
sudo curl https://get.cpolar.sh | sh
安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar
接着,在浏览器中输入飞牛NAS的IP地址+9200端口访问 web ui管理界面,如:
http://192.168.50.212:9200/
如果还没有账号,可以点击页面上的免费注册,进行注册账号。输入注册好的账号登录即可进入后台页面:
4.2 创建随机域名隧道(免费)
随机域名方式更适合临时测试或短期使用。使用该方式时,公网访问地址会在一段时间后发生变化,通常不适合长期固定访问。不过它的优点是配置简单、可以免费体验。
首先,点击左侧菜单栏的【隧道管理】,展开进入【隧道列表】页面,页面下默认会有 2 个隧道:
- ssh隧道,指向22端口,tcp协议
- website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)
点击创建隧道或者编辑现有的【website】隧道,设置一个隧道名称(自定义即可),协议选择【http】,本地地址填写dufs的访问端口【5000】,地区这里选择的【China VIP】,最后点击更新:
创建或者更新完成后,接着点击【状态>在线隧道列表】,可以看到同一个隧道生成了两个不同协议的公网访问地址,一个是 http,另一个是 https:
这里以https为例,访问测试一下:
访问成功后,飞牛 NAS 上的 Dufs 就可以通过公网地址打开了。出门临时下载文件,或者给朋友分享资料,都可以使用这个地址。分享前记得检查匿名访问权限,需要公开的文件放到指定目录,其他文件保留登录限制。
5 固定域名
固定二级子域名需要 cpolar 基础套餐或以上,使用免费套餐的读者可以先完成前面的随机域名访问测试。
通过前面的随机域名方式,已经验证了 Dufs 可以正常通过公网访问。不过,地址发生变化后,之前发给朋友的文件链接就无法继续使用,WebDAV 客户端中保存的连接地址也需要修改。
所以如果准备长期用它分享文件、托管静态页面或连接 WebDAV,更推荐配置 固定二级子域名,省去反复更换地址的麻烦。
5.1 保留固定二级子域名
首先,登录 cpolar 官网后台,进入 预留 页面:
https://dashboard.cpolar.com/reserved
在左侧菜单中选择【预留】,找到【保留二级子域名】配置项。
按照下面信息填写:
| 配置项 | 填写说明 |
|---|---|
| 地区 | 选择和前面隧道一致的地区 |
| 名称 | 自定义二级子域名,例如 dufs01,注意:该项不能重复,二级子域名名称是唯一的 |
| 描述 | 填写任意方便辨识的备注即可 |
填写完成后,点击【保留】按钮。保留成功后,会得到一个固定的二级子域名。后续我们就可以把这个固定域名绑定到 dufs 隧道上。
5.2 修改 dufs 隧道为固定域名
回到飞牛 NAS 上的 cpolar Web UI 管理界面,点击左侧菜单【隧道管理】→【隧道列表】,找到前面配置的 dufs 隧道,点击【编辑】:
将域名类型修改为【二级子域名】,并填写刚才在官网后台保留的二级子域名,然后点击更新按钮:
更新完成后,点击左侧菜单【状态>在线隧道列表】,可以看到 dufs 的隧道已经变成固定公网地址:
复制生成的固定公网地址,在浏览器中访问:
通过固定公网地址,已经可以正常打开 Dufs 的文件页面。接下来,再试试访问里面存放的 HTML 文件:
页面也能正常显示。以后有做好的静态网页,就可以上传到 Dufs,再把链接发给朋友,对方用浏览器打开就能查看。配置固定域名后,也不用因为随机地址变化而重新分享链接。
总结
折腾下来,Dufs 基本满足了最初的需求。把 NAS 上的一个目录挂出来,就能在浏览器里管理和分享文件,顺手放几个静态页面也很方便。这次二次开发主要调整了界面,补上中文适配和网页初始化账号等功能,日常用起来更顺手。
- 临时分享资料,可以上传文件后复制链接,按需要设置访客权限。
- 做好的 HTML 页面也能放进去,方便发给朋友查看效果。
- 配合 cpolar 固定域名,出门也能访问,WebDAV 的连接地址不用反复修改。
如果你也想给旧电脑或 NAS 加一个轻量文件服务,可以部署试试。修改后的代码放在 GitHub,使用中遇到问题,欢迎提交反馈。









































