仓库源文站点原文


layout: post title: 如何自定义宝塔亚马逊S3云存储插件的端点

tags: [S3, 插件]

会点Python就可以自己改插件啦!<!--more-->

起因

上次用Koyeb安装了宝塔面板之后在上面写了些测试用的网站,不过因为我开发网站的时候喜欢直接在面板上面改,本地基本上都是没代码备份的,不过最近宝塔面板好像有不少关于漏洞的传言,为了避免由于各种奇怪的事情把我的网站搞没,我想整点备份用的插件。

插件的使用与修改

宝塔面板的插件还是挺多的,想要备份的话支持的平台也挺多的,而且都很人性化,功能啥的小白也能操作的来。不过考虑到宝塔面板的不安全性,我也不希望我常用的网盘挂在上面当备份,万一被攻破了我网盘上的文件就被别人拿走了。
综合考虑下来,什么OSS还是什么云盘感觉还是不太好选择,但是S3 API兼容的平台还挺多的,比如我之前用过的4EVERLAND也有存储桶。另外之前随便逛的时候注册了一个Filebase也支持(都是0门槛免费5GB)。所以想用这个存我的备份文件。
不过宝塔面板上带的亚马逊S3云存储插件只能用亚马逊的云服务,不能改endpoint……但是我也不想注册AWS,除了看着难受,不人性化,而且好像免费用要绑信用卡?(最主要是我想备份到Filebase, 不然白注册了?😂
所以我就去看了看这个插件的源代码,还好代码是Python的,理解起来倒是不难。最开始我是想着它会不会是直接通过HTTP API访问AWS S3的端点,所以就直接各种搜索,但是找了半天没看到一个和AWS有关的域名……看来投机取巧不太行……就只能慢慢看代码了。最终找了半天发现它好像用的一个叫boto3的库来连接AWS的……这名字起的是真的……我完全没法从这个名字中看出来它和AWS有半毛钱关系(好像因为Boto是亚马逊河豚,据说是粉色的),尤其它代码里是通过from boto3 import client这种方式引入的,代码里就没有和boto3有关系的词了……client这个词又很通用,这代码看着是真的难受啊……
不过还好最终起码找到要改的地方了,其实很简单,它的“/www/server/panel/plugin/aws_s3/s3lib/client/aws_s3.py”这个文件是引入的关键,其中build_auth()方法是连接S3的关键,我在网上搜了一下boto3,它也是支持自定义端点的,只要在第100行后面加一个endpoint_url参数就可以了,比如Filebase就加一句endpoint_url="https://s3.filebase.com",保存之后其他的就在面板上配置就行了。

感想

这下就能看出来宝塔是有多垃圾了吧,明明就一个参数就能搞定的事情,它偏偏不给你加,而且就这样还啥功能都不支持,文件夹也删不了,也没法在面板里上传/下载文件,而且还要给你装个boto3的依赖,啥都不支持还要装个全功能的依赖,实在是太垃圾了。不过小白不会写代码,再垃圾的东西该用还得用吧🤣。