基於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實現的圖片上傳
微雅視頻

相關文章
相關標籤/搜索