基于SpringCloud的IPFS私有云

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

支持全内网隔离部署

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

主要应用场景

文件上传同步

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

接口数据校验

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

CDN文件分发

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

模块简单介绍

ipfs-client

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

ipfs-gateway

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

ipfs-search-es

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

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实现的图片上传
微雅视频

相关文章
相关标签/搜索