1. go-btfs 是什么?#

go-btfs 是一个去中心化的文件存储平台,无论图片、文件、视频等等各类文件。每个人都可以在自己电脑上安装部署 BTFS 节点,然后大家的节点相互连接,构成一个整体网络, 网络中某一个节点上传文件,其他节点就像访问本地一样直接下载使用。同时,它还支持冗余备份,使用 reed-solomn 方案,这块更加牛逼。

2. 怎么使用 #

2.1 下载 github.com/tron-us/go-btfs,并编译

由于依赖第三方库较多,需要 download 一下 然后进入指定目录,进行编译

$ git clone git@github.com:TRON-US/go-btfs.git$ cd go-btfs$ git checkout release$ go mod download$ cd cmd/btfs$ go build

此处生成 btfs 可执行文件,可以导入到 /usr/local/bin 下面处理。

2.2 启动本地 BTFS 节点

# 设置BTFS节点存储地址空间,换一个就可以起一个新节点
$export BTFS_PATH=/Users/laocheng.cheng/.btfs.ll$ btfs init
Generating TRON key with BIP39 seed phrase...
Master public key:  xpub661MyMwAqRbcFYYeCS183yzjqyHjDAYMAdJ6oQPZNqwu3CyH6SgQ5FgvYYNWQA2v8gZWkZJ25Lr4gKuGHf21izyQ5s7aKjMuHGPRJ7AeGpq
initializing BTFS node at /Users/laocheng.cheng/.btfs.lll
generating btfs node keypair with TRON key...done
peer identity: 16Uiu2HAmCQadnAGfADbwi9DmdjZcHPzFNR3r72hfnMPrCEQKjN2k
to get started, enter:btfs cat /btfs/QmZjrLVdUpqVU6Pnc8pBnyQxVdpn9J8tfcsycP84W6N93C/readme$ btfs daemon
Initializing daemon...
go-btfs version: 1.5.3-17053fc
Repo version: 10
System version: amd64/darwin
Golang version: go1.15.15
Repo location: /Users/laocheng.cheng/.btfs.lll
Peer identity: 16Uiu2HAmCQadnAGfADbwi9DmdjZcHPzFNR3r72hfnMPrCEQKjN2k
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.106.19/tcp/4001
Swarm listening on /ip4/2.0.1.44/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/192.168.106.19/tcp/4001
Swarm announcing /ip4/2.0.1.44/tcp/4001
Swarm announcing /ip4/203.12.203.2/tcp/4001
Swarm announcing /ip4/219.143.35.171/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
HostUI: http://127.0.0.1:5001/hostui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Remote API server listening on /ip4/127.0.0.1/tcp/5101
Daemon is ready# 配置为host存储模式
$ btfs config profile apply storage-host

btfs daemon启动后,/Users/laocheng.cheng/.btfs.lll 这个是我们的地址空间, 16Uiu2HAmCQadnAGfADbwi9DmdjZcHPzFNR3r72hfnMPrCEQKjN2k 这个是节点 ID,其他节点就是通过节点 ID 和其沟通。

2.3 再次启动一个新节点

新起一个终端,过程同上

# 设置BTFS节点存储地址空间
$export BTFS_PATH=/Users/laocheng.cheng/.btfs.ggg$ btfs init
......$ btfs daemon# 配置为host存储模式
$ btfs config profile apply storage-host
......

2.4 组建本地私有网络

特别注意的问题,现在启动的节点,是和 BTFS 真实网络连接,我们需要一些修改,变成本地网络方式。此时,选中一个终端,即一个节点;先 bootstrap 设空,然后把自己创建的节点,全部加入(当然,不用加该终端节点)。

btfs config --json  Bootstrap "[]"
btfs bootstrap add /ip4/127.0.0.1/tcp/54001/p2p/16Uiu2HAmCQadnAGfADbwi9DmdjZcHPzFNR3r72hfnMPrCEQKjN2k
btfs bootstrap add /ip4/127.0.0.1/tcp/54001/p2p/16Uiu2HAm3GdbCk6Uwst2t3zoYTrgHbifjqJTpLbHHUUPBcBT8oqC
btfs bootstrap add /ip4/127.0.0.1/tcp/54001/p2p/16Uiu2HAmCQadnAGfADbwi9DmdjZcHPzFNR3r72hfnMPrCEQKjN2k

此时,我们自己的节点,构成了一个私有云存储网络。

2.5 上传文件 及 任意节点可查看

打开一个节点(终端),上传文件如下

$ btfs add s
added Qmefmseqwa8un9WXEfqb2GY2ncWmmB2BsAqtcjVJaHahL3 s31 B / 31 B [================================================================] 100.00%

打开另外一个节点(终端),下载文件到本地

$ btfs get QmduujE1EgUajwCj2bxjdp4LWz62aameQJmQc7pcBbeAmC
Saving file(s) to QmduujE1EgUajwCj2bxjdp4LWz62aameQJmQc7pcBbeAmC27 B / 27 B [================================================================] 100.00% 0s

如此一来,私有云的上传下载就搞定了。

3.具体应用 #

上面我们就私有云的搭建,及上传、下载操作搞定了。那么对应的应用方案就容易理解,比如你开发一个存储网站。后端数据用咱们的私有云,上传一个 key(文件名),对应一个 value(文件 hash)。然后我们把 key:value 记录到 mysql or redis。一个存储类网站的基础功能就完成啦。

 总结 #

go-btfs 是一个去中心化的文件存储平台,各种类型文件都能上传,并且安装方便,经过基本配置,就可以快速搭建自己的私有云服务。非常推荐大家使用,尤其企业内部云平台搭建使用。

以上所有内容均采用最新官方案例做示例

 参考资料 #

  • 查看 go-btfs 源代码

  • go-btfs 官方文档参考(https://docs.btfs.io/docs)

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名

扫码也可以加入 GoCN 的大家族哟~

「GoCN酷Go推荐」快速搭建私有云服务 go-btfs相关推荐

  1. 「GoCN酷Go推荐」后现代时代远程办公网络问题的golang开源解决方案 —— PairMesh...

    PairMesh是什么? Pairmesh是一款先进的虚拟局域网(VPN)工具,用来搭建与访问安全,易用,高性能的点对点的软件定义虚拟局域网,为远程办公的网络连接问题提供了开箱即用的解决方案. 拥抱开 ...

  2. 「GoCN酷Go推荐」JSON 数据获取器 JID

    01 推荐理由   JSON 格式数据适用范围非常广泛,一个内容丰富的json数据可能很大,使用 JID 可以让你非常舒服的获取到想要到数据. 02 简介 JID 是一个过滤JSON格式数据 cli ...

  3. 「GoCN酷Go推荐」Golang轻量级桌面程序wails2教学

    01 推荐理由 不依赖cgo!不依赖cgo!不依赖cgo!真的不依赖cgo,且跨平台,原生渲染 无嵌入式浏览器,轻量级,生成的文件很小,而且只有一个可执行文件就可运行. 02 功能介绍 后端使用标准 ...

  4. 「GoCN酷Go推荐」Go 语言高性能图像处理神器 h2non/bimg

    0 推荐背景 日常业务开发中常会遇到各种图像处理需求,如,图片大小调整.翻转.旋转.提取大小.加水印.图片模糊化,格式转换,修剪等等:图像处理根据业务需求一部分图像处理需求在前端完成,如,用户裁剪编辑 ...

  5. 「GoCN酷Go推荐」OBS连接器go-obs-websocket

    推荐理由 互联网的兴起带动了直播行业的火热,除了少数直播网站有自己的推流工具之外,OBS是主流的推流工具,广泛应用在直转播技术之上. 简介 go-obs-websocket是一个与OBS进行webso ...

  6. 「GoCN酷Go推荐」交互式命令行工具库survey

    ☆ 什么是 survey? ☆ survey 可以让你方便的在终端上构建交互式和可访问提示的应用,支持ANSI ☆ 安装 ☆ go get github.com/AlecAivazis/survey/ ...

  7. 「GoCN酷Go推荐」​QQ机器人 go-cqhttp

    什么是 go-cqhttp?✦ QQ机器人,可以做的事儿太多了,比如一个UP主需要群发多个QQ群,以便通知粉丝们开播:再比如可以检测群内或发给自己的消息,而通过代码直接回复做的简单回复.比如检测群内有 ...

  8. 「GoCN酷Go推荐」go语言位操作库 — bitset

    bitset库实现了bitsets数据结构,这是一种正整数和布尔值映射关系的结构,它比map[uint]bool更高效 什么是bitsets✦ bitsets基本思想是用一个bit位来标记某个元素对应 ...

  9. 「GoCN酷Go推荐」高性能内存缓存 ristretto

    背景 ristretto 是 dgraph 团队开源的一款高性能内存缓存库,旨在解决高并发场景下的缓存性能和吞吐瓶颈.dgraph 专攻的方向是高性能图数据库,ristretto 就是其图数据库和 K ...

最新文章

  1. 如果可以,我想给这本书打十星!
  2. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别
  3. Python+Selenium练习篇之11-浏览器上前进和后退操作
  4. php设计模式的六大原则(六):迪米特法则
  5. java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com...
  6. Mysql 无法插入中文,中文乱码解决
  7. 控制元素显示和隐藏的方式及区别、内容溢出处理(区域滚动)、透明性、字体图标、常见字体、自定义字体设计、网站图标、CSS代码分析
  8. macos 下 vmware fusion 安装 vmware tools教程
  9. P1099 树网的核
  10. Docker 快速安装教程
  11. [Hadoop] - SSH免密码登录
  12. Web前端开发最常见的八种编程软件
  13. 处理minidump文件用到的“工具”的分享
  14. 算术平均值c语言函数名称,求算术平均数和集合平均数的源代码
  15. PCL-ICP(IterativeClosestPoint)源码解析
  16. 视频格式转换器下载哪个好?分享:3种TS到MP4的转换器
  17. 求解Ax=0:主变量、自由变量、特殊解
  18. 基于IP-PBX的VoIP系统解决方案
  19. iOS开发 --- 开发工具
  20. RedisDesktopManager源码编译windows版(基于2022.1版本)

热门文章

  1. 漂亮的蓝色系网站设计欣赏1
  2. (B站动力节点老杜MySQL教程)MySQL课堂笔记-day03.txt
  3. XP中超级终端使用方法
  4. C_教程_Ubuntu安装COMSOL-MATLAB-FDTD Solutions
  5. 基于启扬i.MX6UL的免疫荧光分析仪解决方案
  6. 利用爬虫从一个百度贴吧页面下载图片
  7. javac, java非标准参数说明
  8. 基于php网吧会员管理系统-计算机毕业设计
  9. PPT幻灯片中插入Flash动画
  10. MATLAB调用Kakadu中的可执行文件,实现JPEG2000压缩