项目/家庭服务
家庭服务 · 运行中

文件管理 FileBrowser

网页版文件管理器,管理 NAS 与各机器的共享文件。

FileBrowserNAS文件

它是什么

FileBrowser 是一个网页版文件管理器。我在家里的一台机器上把它跑起来,指向 NAS 和各台机器上的共享目录,然后任何一台设备打开浏览器就能浏览、上传、下载、改名、删文件,不用再开 SMB 客户端或者 SSH 进去 ls。

为什么做

家里文件散在几台机器上:NAS 里有备份和影视素材,主力机上有临时素材,还有几块移动硬盘偶尔接上来。以前取一个文件要回忆它在哪台机器、走哪个协议,Windows、macOS、手机互传更麻烦。我需要一个统一入口,浏览器打开就能用,权限按用户分。

解决什么问题

  • 跨设备统一的文件入口,手机、平板、电脑都能用;
  • 用账号和目录权限做隔离,而不是把整个盘共享给所有人;
  • 反过来也让我把「文件权限」和「反向代理」这两件事真正弄明白了一遍。

现在状态

运行中。容器常驻在一台 7x24 的机器上,前面挂了反向代理,日常取放文件基本都走它。剩下的优化是目录权限的细化,以及大文件传输时的稳定性观察。

功能

  • 网页端浏览 NAS 与各机器的共享目录,浏览器即入口
  • 支持上传、下载、重命名、删除等常规文件操作
  • 用账号区分用户,按目录控制可见与读写范围
  • 通过反向代理对外提供访问,不直接暴露容器端口
  • 以 Docker 容器方式常驻运行,随机器重启恢复

技术栈

DockerFileBrowserNginx反向代理NAS共享目录

使用 / 部署教程

部署步骤

1. 准备目录

先在宿主机上规划两处路径:一处放配置数据库,一处放你要暴露给 FileBrowser 的文件根目录。配置文件必须持久化,否则重建容器后账号和权限全丢。

mkdir -p /opt/filebrowser/config
mkdir -p /srv/files

/srv/files 可以换成 NAS 的挂载点,或者任意共享目录。

2. 起容器

用 Docker 跑一个容器,把上面两个路径分别挂进容器:配置目录挂到容器的数据库位置,文件根目录挂到你希望它显示的路径。端口映射到宿主机的某个高位端口,先本地验证,再考虑对外。

docker run -d \
  --name filebrowser \
  --restart unless-stopped \
  -v /opt/filebrowser/config:/database \
  -v /srv/files:/srv \
  -p 8080:80 \
  filebrowser/filebrowser

镜像与标签按你实际拉取的为准,别照抄不存在的版本号。如果习惯用 compose,把上面的参数写成 docker-compose.yml 更利于维护,也方便以后加环境变量。

3. 首次登录与改密

浏览器打开 http://宿主机IP:8080,用默认管理员账号登录,第一件事就是改密码。接着在用户管理里建普通账号,给每个账号设定根目录和读写权限,不要所有人都用管理员。

4. 挂反向代理

在 Nginx 里加一个 server,把域名转发到宿主机的 8080 端口。注意两点:请求体大小上限要调大,否则大文件上传会失败;超时时间也要放宽。配好后先确认 HTTPS 正常,再关掉宿主机的端口对外映射,只留反代入口。

5. 验证

用普通账号登录,确认它只能看到自己被授权的目录;上传一个中等大小的文件测试速度与完整性;重启一次容器,确认配置和账号还在。

注意事项

  • 目录权限先在宿主机上理顺,容器内的用户 ID 要和目录属主对得上,否则会出现能看不能写。
  • 反代场景下确认上传大小限制与超时,这是最常见的坑。
  • 定期备份配置目录,它是账号与权限的唯一来源。

注意

  • FileBrowser 会直接暴露文件系统内容,务必用账号权限隔离目录,不要给普通用户管理员身份。
  • 通过反向代理对外时启用 HTTPS,并避免把容器端口直接映射到公网。
  • 持久化配置目录需要定期备份,丢失后账号与权限配置无法恢复。