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

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

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

# 插件的使用与修改
  宝塔面板的插件还是挺多的，想要备份的话支持的平台也挺多的，而且都很人性化，功能啥的小白也能操作的来。不过考虑到宝塔面板的不安全性，我也不希望我常用的网盘挂在上面当备份，万一被攻破了我网盘上的文件就被别人拿走了。   
  综合考虑下来，什么OSS还是什么云盘感觉还是不太好选择，但是S3 API兼容的平台还挺多的，比如我[之前用过的4EVERLAND](/2022/10/19/web3.html)也有存储桶。另外之前随便逛的时候注册了一个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的依赖，啥都不支持还要装个全功能的依赖，实在是太垃圾了。不过小白不会写代码，再垃圾的东西该用还得用吧🤣。
