利用zerotier搭建免费好用的MinIO(实用篇)
需求背景
在开发或者博客文章制作过程中,会涉及大量图片、文件等存储,当然,市面上有很多方案,我总结了以下对于我来说最为经济(穷比)的方案:
OSS对象存储(贵,按请求量+占用空间+API请求量+流量计费,如果被不法分子盯上,盗刷流量,那就要呱呱叫了)
使用家宽的自建服务器安装MinIO做对象存储(48小时会重拨一次号,DDNS更新也会有5-10分钟空白期,导致外部无法访问)
服务器买存储空间(价格十几G那是嗷嗷贵啊)
目标🎯
不要钱
稳定
不要钱
安全
不要钱
为什么选择MinIO🧷
基本Java、Go、Python都有相关的库支持(跨平台性)
开源、免费
服务端要求不高
满足亚马逊S3标准
docker启动,配置了映射目录,直接复制去其他设备进行映射启动数据配置均在,良好的迁移性
解决方案⛳️
利用家中的群晖与服务器组网,将服务代理到域名上,外部访问该域名即可。
外网无法直接访问到MinIO服务,安全性拉满。
由于没有走DNS解析,走的是TCP请求,所以不会出现DNS解析空白期问题。
开源的MinIO可以实现OSS存储常见的所有功能,主要是免费。
具体拓扑结构如下
步骤🧑💻
1、异地组网
参考我的这篇文章《搭建zerotier实现异地设备统一管理》。
2、搭建MinIO
在内网某节点设备里使用docker安装MinIO,MinIO有两个端口,9000是API用的,9090是WebUI的,所以反代的域名最好只针对API端口,这样安全性比较不错。
docker run \
-p 19000:9000 \
-p 19090:9090 \
--net=host \
--name Minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=控制台登录账号" \
-e "MINIO_SECRET_KEY=控制台登录密码" \
-e "MINIO_SERVER_URL=反代的域名" \
-v /volume3/docker/Minio/data:/data \
-v /volume3/docker/Minio/config:/root/.minio \
minio/minio server \
/data --console-address ":19090" -address ":19000"
搭建完成后访问UI输入设置的账号密码后做一些基础配置(禁止列出存储桶文件、公共读、私有写):
创建AccessKey,并保存ACK和SK
创建存储桶,编辑访问策略
按照以下进行配置,这样别人访问存储桶就不会列出所有的文件了
设置访客只读
这样MinIO搭建就大功告成了!使用测试工具测试上传,个人推荐PicGo,输入节点IP,填入相关信息
测试上传成功!!
3、服务器测试
组网后服务器对该页面进行测试请求,看看节点子网间网络是否能通信
4、服务器Nginx进行反向代理
以宝塔为例,正常添加反向代理
踩坑🦶
纯使用反向代理的时候就没法上传,通过nginx日志看,发现有个head请求经过反向代理后会被转为默认的GET请求
所以我们要解决掉经过反代后这个head请求转换的问题,在nginx配置文件Server内添加内容:禁用将“ HEAD”方法转换为“ GET”进行缓存。也就是设置proxy_cache_convert_head off;
PicGo测试
将域名切换为服务器域名
上传成功!!
总结📒
切换域名后不会那么顺利,可能有很多因素影响,例如WAF啊,网络环境等等,注意排查。
注意测试节点网络可以直接上传后再切换域名测试,不然出问题都不知道哪里出的。
最难解决的问题就是那个请求方法转换的问题,折腾老半天了。
考虑电费和存储,四舍五入等于不要钱,比买厂商的对象存储香太多了。
- 感谢你赐予我前进的力量