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有两种途径:
- 一个节点加入公网,访问http://127.0.0.1:5001/webui,会从其他节点下载对应的资源到节点的blocks目录下
- 下载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