基于SpringCloud的IPFS私有云

给你一囗甜甜゛ 提交于 2020-12-18 08:58:11

基于SpringCloud的IPFS私有云,主要解决文件存储分发问题,不考虑挖矿,支持内网部署和多区域集群部署,(北京、上海、广州、香港、北美、欧洲)组网

支持全内网隔离部署

内网快速搭建私有文件存储服务,能快速部署、快速访问、无限扩容、自动分发、自动备份,支持内网部署和多跨区域组网部署

主要应用场景

文件上传同步

本地启动ipfs-client后,调用它的接口上传文件(本地上传文件不占用外网),其它外网节点可(ipfs cat Qm...)获取文件内容(p2p,速度更快)

接口数据校验

上传的文件生成的cid是通过内容签名生成的,不同系统可通过cid校验数据是否被修改,因为在本地生成cid,不会被劫持,第三方拿到cid后再获取文件内容

CDN文件分发

多区域启用网关,各子区域上传的文件,会自动同步其它区域,暴露一个区域的下载地址,即可获取文件

模块简单介绍

ipfs-client

分布式客户端,单独启动,自动组网,内网启动一台即可快速调用ipfs相关的API接口,快速进行文件上传下载,
文件上传后会自动分发到ipfs机器,上传接口会返回文件的cid,同时在client端保存一份'文件名'+'.ipfs'的文件,里面的内容是该文件的全网唯一CID编码,通过该编码可以
在任意集群的节点进行文件下载、查看等操作

ipfs-gateway

网关,需要多区域组网的可启动,用来给客户端自动组网,组建集群时,用来自动添加网关节点,配合注册中心使用即可,客户端会自动把网关的节点加入自己的bootstrap中
这样,不同地区的子集群也能通过网关进行文件分发和获取,不同地区的子集群,可通过网关的IPFS获取任意集群内容的文件

ipfs-search-es

文件搜索服务的es实现,需要搜索文件的可启动,可根据文件的cid、节点id、文件类型、文件名、文件内容、添加的时间范围来搜索相关文件

ipfs-backup

文件备份服务,需要备份上传文件的可启动,备份以年月日时作为目录,文件的cid作为文件名,保存到备份服务器,备份服务器最好能和网关共用IPFS节点,
即备份节点不启动IPFS,-Dipfs.startDaemon=false;如果是全内网部署,随便一台服务器启动即可

ipfs-register

简单的springCloud注册中心程序,需要内网隔离部署的可启动,其它服务启动时,添加参数:

-Deureka.client.serviceUrl.defaultZone=http://union:123456@127.0.0.1:6109/eureka/

文件搜索

搜索服务可基于elasticSearch来搜索,也可用基于MySQL等数据库实现,基于统一接口调用,保证实现相关接口即可,注意保证数据幂等性和搜索结构一致性。

系统兼容性

目前只上传来win64,linux64,macOs的ipfs的程序,考虑作为文件服务器,个人精力有限,暂不考虑其它环境.如需要实现其它环境,
可以在ipfs-software的resources/lib下放入相关的ipfs包,并写好初始化方法即可.

代码地址

部署

简单测试

启动ipfs-client即可,通过浏览器访问:ipfs-client
,上传文件后,接口会返回cid,用cid可再外网获取到文件,如:http://ipfs.ipav.vip/ipfs/Qm...

所有区域推荐使用内网获取,这样会自动使用p2p传输,如:http://localhost:18080/ipfs/Qm...或者ipfs cat Qm...
对本地测试,推荐把.ipfs/go-ipfs目录添加到环境变量,这样可以直接执行ipfs命令,ipfs block stat Qm...检测文件是否存在

多区域集群部署,(北京、上海、广州、香港、北美、欧洲)组网

文件上传尽可能使用本地的ipfs-client进行上传,会自动通过ipfs分发到全网
,提高网络传输效率,上传文件后,ipfs-client不要立即停机,防止其它区域在同步文件时,访问不到文件

每个区域至少暴露一个spring cloud注册中心和一个ipfs-gateway服务,保证使用公网IP可以相互访问
ipfs-backup服务以-Dipfs.startDaemon=false启动到ipfs-gateway所在的服务器上,保证公网可访问
启用ipfs-search-es服务,用来搜索文件,测试时,可以不启用,提供可外网访问的地址,如-Deureka.instance.preferIpAddress=false -Deureka.instance.hostname=5fu8.com -Deureka.instance.nonSecurePort=6107
启用ipfs-client服务,这个不需要暴露到外网,每个区域按需求启动即可,每个区域调用本区域的http接口进行文件上传,会通过ipfs-backup服务自动同步到全网

打包命令

mvn clean
mvn install

//启动ipfs-client
java -jar -Dserver.port=9051 -Dipfs.port=9052 -Dipfs.adminPort=9053 -Dipfs.httpPort=9054 ipfs-client-1.1-SNAPSHOT.jar

//系统守护启动搜索服务
nohup java -jar -Dserver.port=9057 -Dipfs.port=9052 -Dipfs.adminPort=9053 -Dipfs.httpPort=9054 -Dipfs.startDaemon=false ipfs-search-es-1.1-SNAPSHOT.jar > /dev/null 2>&1 &

IPFS讨论区

微信小程序,基于ipfs实现的图片上传
微雅视频

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!