安装filebrowser实现文件上传下载服务
更新日期:
最近使用gitea与act_runner搭建自动构建流水线,构建出的artificat产物需要上传后再进行下载部署,需要一个简单的文件服务器。 使用AI问答一番后,filebrowser有上传、下载、用户认证功能, 能满足我简单的需求, 于是决定尝试下,不用重新造轮子了。 minio也是有相同的功能,之前有简单的运行, 了解不深入。
filebrowser是使用golang开发的,开源的。 可以直接下载二进制文件,或者使用docker镜像来运行。docker镜像提供了2种,基于Alpine image或者S6 Overlay image。 S6 Overlay image是使用s6作为启动进程(pid=1),这个倒是第一次了解,之前接触的太少了。
参考:
- filebrowser github https://github.com/filebrowser/filebrowser
- 安装指南 https://filebrowser.org/installation.html
- s6 overlay https://github.com/just-containers/s6-overlay
- S6 https://skarnet.org/software/s6/overview.html
- tini https://github.com/krallin/tini
- fail2ban https://github.com/fail2ban/fail2ban
使用dokcer运行filebrowser
如下使用docker来运行filebrowser。首次启动时会创建配置文件与初始化数据库, 控制台会打印出admin的密码,需要记录下来。如果密码丢失,需要删除配置文件后重新进行初始化。
首次时没有添加-d参数,以前台方式运行, 这样admin的密码才会在控制台打印出来。
1 | # 创建目录 |

在docker容器中运行命令查看配置文件信息。
1 | docker exec -it filebrowser sh |
浏览器访问
浏览器访问 http://localhost:7041, 如下是主界面,显示当前的文件列表,双击文件名打开编辑器来显示内容。右上角有上传、下载按钮。

通过API上传文件
filebrowser默认是使用JSON认证, 通过API访问时需要先使用用户名、密码获取token, 然后在请求头中使用X-Auth参数进行传递。
- 登陆
curl -X POST --data '{"username":"admin", "password":"pwd"}' -H "content-type: application/json" http://localhost:7041/api/login - 创建文件信息
curl -X POST -H "X-Auth: $token" -H "Upload-Length: 1000" http://localhost:7041/api/tus/file-name - 上传文件
curl -X PATCH -H "X-Auth: $token" -H "Upload-Offset: 0" -H "Content-Type: application/offset+octet-stream" --data-binary @file.zip http://localhost:7041/api/tus/file-name - 分享文件
curl -X POST -H "X-Auth: $token" --data '{"password":"","expires":"1","unit":"hours"}' http://localhost:7041/api/share/file-name?expires=1&unit=hours - 下载分享的文件
curl -X GET http://localhost:7041/api/public/dl/El4Sjktx