Contents
前言
有时候,在博客的文章中,我会想要分享一些文件以供大家下载,其实能选择方式不少:nextcloud、minio搭建的cos生成的链接、百度、阿里云盘等,但是这些方式各有各的优势,也各有各的劣势(这个后续我会专门用一篇文章来讲)。最近我又看到其他文章,提到了一个轻量级的文件分享软件:pingvin-share,一来部署简单,二来非常有特点,三来支持注册(只能匿名的不敢公开,比如不需注册即可使用的阅后即焚之类的软件,如果被乱用了我可能会被查水表的。。),这些很对我的胃口,所以我决定将其作为我平时常规分享的解决方案。
部署
创建宿主机上需要映射到容器内的文件夹
惯例先创建-v参数挂载需要的文件夹:
mkdir -p /docker/pingvin-share/data
注:这个宿主机文件夹同时也是以后上传文件存放的根文件夹,因此需要选择一个合适存储,这个文件夹所在存储的大小限制就是pingvin-share能存放文件的大小限制,就像以前著名的口号:"人有多大胆,地有多大产",所以完全可以是大容量NAS上的共享文件夹,不过这就需要提前在宿主机linux系统上做好NAS共享文件夹的挂载,具体不同的宿主机环境可以参考我以前的文章:奇技淫巧系列 macos开机自动加载SMB分享的网络磁盘、debian系列 PVE中的无特权Linux容器挂载SMB共享目录、debian系列 自动开机挂载SMB)。
docker run格式的命令如下:
docker run --name pingvin-share -d --restart=always \
-p 9700:3000 \
-v /docker/pingvin-share/data:/opt/app/backend/data \
stonith404/pingvin-share:latest
关键参数解释:
-p 9700:3000
映射宿主机9700端口到容器的3000端口,这个大家根据自己实际环境进行修改
-v /docker/pingvin-share/data:/opt/app/backend/data
映射宿主机的/docker/pingvin-share/data
到容器的/opt/app/backend/data
为何称pingvin-share为"轻量级"文件共享平台?从上面的命令就可以看出,其不像一些其他的网盘类应用,比如nextcloud需要指定mariadb,mysql之类的数据库。讲道理,我如果仅仅就想上传文件,然后简单的生成一个分享链接,你却还让我还要折腾个数据库,我心里是有点不爽的。但是没指定并不是说pingvin-share不需要数据库,它是使用SQLite嵌入式数据库的,如下图:
大家可以看到一个pingvin-share.db的文件,就是它了。这个数据库文件默认存放在宿主机的"/docker/pingvin-share/data"路径下。
另:pingvin-share还可以用ClamAV的docker版联合使用,ClamAV会对上传的文件进行杀毒。如果要联合使用,需要创建一个ClamAV的docker版,并在创建pingvin-share容器的时候,使用-e CLAMAV_HOST
和-e CLAMAV_Port
参数分别指定ClamAV的地址和端口,当然,这种需要互访的场景又需要--network=
参数来将2个容器的网络划分到一个非默认的bridge里了,这个就有点折腾了,关键,如果是我一个人使用的话,不会有中毒这种风险,又关键,ClamAV居然最小需要内存3G,推荐内存4G,这个就有点吓人了。。就像以前为nextcloud部署全文检索软件elasticsearch的时候以后,占用的内存感觉起码也是3G。。算了,不折腾了,有兴趣的朋友试试把。
准备工作
初始化设置
使用http://宿主机ip:9700
登录,如下图:
点击右上角红框中的Sing Up创建第一个账号(也是管理员账号):
填写好账号相关信息后点击上图下方的红框创建账号,然后出现如下界面:
先修改语言为中文,点击上图红框中的"My account":
在最下方的Language选择简体中文:
这样,整个页面语言就设置完毕。
同时,这个界面还可以修改账号名称、邮箱、密码并开启二次验证等:
注:如果这里修改密码报错,还可以在"管理"-"用户管理"界面里修改:
常规设置
进入"管理"-"配置惯例":
"通用"配置选项:
这里红框中的App地址很重要,这里决定了你在分享文件时候的生成的链接地址。如果只是内网使用,可直接改为
http://宿主机IP:9700
即可。但是如果要在互联网上使用,则必须有一个有公网IP的域名,以及对应正确的配置公网访问方式(见后)。
这里假设公网域名为share.example.com并且完成了备案,反向代理也完成了SSL的配置,则App的地址为:https://share.example.com
。如果域名没有备案,则需要在域名后面根据反向代理实际使用的端口进行添加,比如:https://share.example.com:44444
。
同时"通用"界面还能设置显示的App名称,logo,以及是否显示主页等。
"共享"配置选项:
这里的"允许注册"默认是打开的,如果大家只想自己一个人使用,则需要关掉该选项。同时这个界面也可以设置共享的最大过期时间、文件大小(一个链接里包含的所有文件的总大小)、以及zip压缩水平。
"SMTP"配置选项:
如果要使用"电子邮件"配置选项中设置的邮件通知功能,需要先配置SMTP相关选项。
"Social Login"配置选项:
这里是利用各种第三方APP账号进行OAuth认证的设置界面,如果不需要,就关闭掉。
上传与分享
在任意界面点击页面上方的上传按钮均可进入上传页面:
选中本地文件双击打开以后(以探窗.flac文件为例),显示如下界面:
共享链接是指定组成分享链接的最后部分,这里可以手动指定也可以自动生成,手动指定可以设置更加易懂的字母,比如这里我上传探窗的flac文件,所以就设置的music。同时,这个界面也可以设置过期时间,访问密码以及访问次数(访问次数设置为1次就相当于阅后即焚)。设置完成以后点击最下方红框中的共享即可生成链接:
然后只需要复制这个链接发送给被分享人即可,这样既完成了最基本的分享功能。
进阶应用
上节中,pingvin-share的文件分享,其实应该说是文件夹分享。如果直接复制上节中的分享链接,并在浏览器中打开https://share.example.com/s/music
,可以看到如下显示:
上图实际上是显示的music这个文件夹的内容,因为目前只有一个文件,所以才只显示了一个。在上图文件右方红框中有3个按钮,从左到右依次为:预览,复制文件下载链接以及点击下载。所以如果想直接分享这个文件,就要用上图红框中间的按钮来复制并发送给对方。
分享文件夹有个好处,就是里面内容可以随意修改,但是对外链接却是固定的。在发布某些需要修经常改的内容(比如经常更新的源码)的时候,是非常方便的,点击下图红框按钮即可添加文件:
另外,pingvin-share还有一个很有意思的功能:预留共享(英文reverse share,意思是反向共享)
,即便其他人没有注册账号,直接打开这个链接就可以上传文件:
而且还可以定义这个链接过期时间、可以上传的文件大小以及链接的使用次数:
配置公网访问
如果要发布到公网上的,大家需要根据实际环境和自己使用的反向代理选择最适合自己的发布方式,可以参考我以前的几篇文章:
1、docker系列 使用docker基于NPM搭建自己的反向代理
2、linux面板系列 配置反向代理并使用非443端口进行发布
3、家庭数据中心系列 通过国内备案云主机白嫖cloudflare实现国外快速访问国内站点
4、家庭数据中心系列 通过无公网IP的家庭宽带白嫖cloudflare实现快速建站(通用)
其中第1,2种方式适合有公网ip却没有合法443端口的环境(家庭宽带、未备案的云主机),需要在url后面加非标端口(如果使用cloudflare建站的不需要加端口,但是需要自定义源站端口,这个可以参考:家庭数据中心系列 通过cloudflare的Origin Rules解决建站有公网IP却没有合法的80、443端口的问题)。第3种方式适合有备案的云主机,第4种方式适合所有环境(包括没有公网IP的环境),也是我建议的方式(不管你的环境有没有公网IP,因为这种方式不需要直接在公网上跑https流量)。
简单总结
如果大家只是简单的想要一个文件分享的功能,不想要太折腾(主要不想装数据库);又或者购买的云主机性能有限,部署nextcloud之类的心有余而力不足,但是又想用来部署分享文件的应用,pingvin-share真真是个好选择。。总之还是推荐有需要的朋友进行尝试的。
实际效果大家可以用以下链接体验,我在里面放了一些以前下的歌:
pingvin-share效果示范链接