IPFS定位于点对点的分布式文件系统,抛弃中心节点概念。工程师在开发学习工程中免少不了一个分布式环境,修改代码调试也面临一个多重部署的问题。为了提高效率,可以在开发机器中搭建一个docker环境,共享开发机的代码以及IPFS_PATH路径。本文准备的开发环境如下:

  • Windows10+Docker
  • 下载代码到 E:\GoPath
  • F:\ipfs下建立peer0到peer4一共五个目录,分别存放不同节点的数据
  • F:\data下创建一个.bashrc文件,用于自定义自己习惯的缩写命令

最终开发机组网图如下,从peer0到peer4共5个ipfs节点,再搭建一个jaeger节点用于收集ipfs节点产生的trace信息,用于跟踪性能以及关键路径。

创建docker容器

docker容器采用goloang版本,具体命令如下:

docker run -it --name dev-peer1 -v /F/data/.bashrc:/root/.bashrc -v /F/ipfs/peer1:/root/ipfs -v /E/GoPath:/go -e IPFS_LOGGING=DEBUG -e IPFS_PATH=/root/ipfs golang
docker run -it --name dev-peer2 -v /F/data/.bashrc:/root/.bashrc -v /F/ipfs/peer2:/root/ipfs -v /E/GoPath:/go -e IPFS_LOGGING=DEBUG -e IPFS_PATH=/root/ipfs golang
docker run -it --name dev-peer3 -v /F/data/.bashrc:/root/.bashrc -v /F/ipfs/peer3:/root/ipfs -v /E/GoPath:/go -e IPFS_LOGGING=DEBUG -e IPFS_PATH=/root/ipfs golang
docker run -it --name dev-peer4 -v /F/data/.bashrc:/root/.bashrc -v /F/ipfs/peer4:/root/ipfs -v /E/GoPath:/go -e IPFS_LOGGING=DEBUG -e IPFS_PATH=/root/ipfs golang

初始化ipfs节点信息

在所有节点在目录 /go/src/github.com/ipfs/go-ipfs/cmd/ipfs下运行

go run main.go ipfs.go daemon.go init.go init

初始化ipfs节点,并产生对应的PeerID和PrivKey

修改config文件

在F:\ipfs\peer0到F:\ipfs\peer4目录下均存在一个config文件,移除Bootstrap里面的所有启动项,在peer1到peer4的配置文件中加入peer1节点的路径

  "Bootstrap": [
    "/ip4/10.0.75.1/tcp/4001/ipfs/QmcqXdbb6HDtXKDT5xvrAjLQ5P36NziURcMgKph6PNQiRe"
  ]

因为采用的是docker虚拟机环境,如果启动提示rsync出错,可以在Datastore配置中加入

"NoSync": true,

运行daemon完成私有节点连接

在所有节点在目录 /go/src/github.com/ipfs/go-ipfs/cmd/ipfs下运行

go run main.go ipfs.go daemon.go init.go daemon

peer1和peer4分别利用boostrap连接peer0,但是它们因为在同一个网段内,可以利用mdns进行相互发现。相关route会在后续文章中进行介绍,这里不就细化。启动输出如下:

Trace跟踪图

webui

搭建webui有两种途径:

  1.  一个节点加入公网,访问http://127.0.0.1:5001/webui,会从其他节点下载对应的资源到节点的blocks目录下
  2. 下载ipfs-webui对应的资源,并加入到其中的一个节点里

git clone https://github.com/ipfs-shipyard/ipfs-webui

go run main.go ipfs.go daemon.go init.go add 

..\..\..\webui\versions\QmQLXHs7K98JNQdWrBB2cQLJahPhmupbDjRuH1b9ibmwVa

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐