服务器centos7和docker部署多节点IPFS私有网络

我也是个新手,安装部署过程也踩了很多坑,还是觉得有必要写下来给各位一些借鉴,不需要过程的朋友可以直接看文末是否遇到跟我类似的问题。

环境:服务器系统centos7

安装docker-ce:

1、安装库:

yum install -y yum-utils device-mapper-persistent-data lvm2 -y

2、添yum软件源:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、更新yum源:

sudo yum makecache fast

4、安装docker-ce:

yum -y install docker-ce

5、启动docker后台服务:

systemctl start docker

在服务器(宿主主机)安装ipfs:

1、在https://dist.ipfs.io/#go-ipfs 下载Linux 64位版本。

2、将go-ipfs的linux 64位安装包上传到服务器root的家目录。

3、进入家目录解压:

cd ~ tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz

4、进入解压后的go-ipfs目录:

cd go-ipfs

5、把./ipfs移动到 /usr/local/bin,使任何路径下均可执行ipfs命令执行:

./install.sh

6、初始化账户:

ipfs init

7、从引导节点列表中移除所有节点:

ipfs bootstrap rm --all

可以查看与当前节点有连接的其他节点:

ipfs swarm peers

8、关闭守护进程,按Ctrl+c

7、将swarm.key上传到 服务器~/go-ipfs/ 目录下。

8、swarm.key将拷贝到IPFS节点的安装目录:

cp ~/go-ipfs/swarm.key ~/.ipfs/

9、启动守护进程:

ipfs daemon

10、查看当前节点地址身份信息:

ipfs id

我这里是/ip4/172.31.9.91/tcp/4001/ipfs/QmR31iBhBzcUqy2TPSn7EKPfvzFyjcn2C5Chk2hpk4yNnB

后续添加节点建立连接会用到这个地址信息。

swarm.key生成过程:

1、因为不想在本地装go语言环境,我在docker里面pull了一个golang镜像,怎么方便怎么来吧。

2、在github上下载,主要是需要它的main.go文件:https://github.com/Kubuxu/go-ipfs-swarm-key-gen

3、将main.go 从宿主主机拷贝到docker golang, 执行: go build main.go 生成main (这里注意main.go的路径,我是在它所在的目录下执行的,所以没有加上路径信息)

4、然后:main > swarm.key

将swarm.key从docker拷到宿主主机就行,拷贝命令可以百度细节。

PS:用在线编译直接得到输出,手动构建swarm.key,但是踩坑了。最后会介绍。

在docker中部署节点:

计划部署4个,分别是peer1、peer2、peer3、peer4,部署过程以peer1为例,其他节点执行相同操作,只需将peer1的部分改为peer2,3,4即可。

1、在宿主主机创建ipfs节点peer1的data、export目录:

mkdir -p ~/ipfs/peer1/data ~/ipfs/peer1/export

2、然后swarm.key分别将拷贝到每个IPFS节点的安装目录:

cp ~/go-ipfs/swarm.key ~/ipfs/peer1/data/

3、在docker中新建一个容器(下次新建需修改红色部分):

docker run -d –name ipfs_peer1 -v ~/ipfs/peer1/export:/export -v ~/ipfs/peer1/data:/data/ipfs -p 4011:4001 -p 127.0.0.1:9080:8080 -p 127.0.0.1:5011:5001 ipfs/go-ipfs:latest

注意: 1、这里如果没有镜像,会pull镜像,等pull完就可以。

2、端口参数:4001是P2P,8080是网关,5001是HTTP

如果不止本地访问还可以将127.0.0.1改为0.0.0.0

-p 4011:4001 前面是docker的,后面对应宿主主机的,

新建下一个容器的时候注意修改docker的端口,不然会报错端口冲突、端口占用,例如修改为:

-p 4021:4001 -p 127.0.0.1:9085:8080 -p 127.0.0.1:5021:5001

Ps:使用此命令不需要再额外开启守护进程和初始化,自动就做了。

节点初始化命令:ipfs init

4、进入容器:

docker exec -it ipfs_peer1 sh

Ps:ipfs_peer1 是容器名,前面新建容器的–name参数指定的。

也有使用docker exec -it 容器id或容器名 /bin/bash 进入容器。

5、从引导节点列表中移除所有节点:

ipfs bootstrap rm –all

可以查看与当前节点有连接的其他节点:

ipfs swarm peers

6、添加节点,这里我做的过程中它自动跟宿主主机节点建立了连接,不过为了防止没有连接,将手动添加命令附上。有两种方式均可,第二种有反馈。

第一种:ipfs bootstrap add /ip4/172.31.9.91/tcp/4001/ipfs/QmR31iBhBzcUqy2TPSn7EKPfvzFyjcn2C5Chk2hpk4yNnB 第二种:ipfs swarm connect /ip4/172.31.9.91/tcp/4001/ipfs/QmR31iBhBzcUqy2TPSn7EKPfvzFyjcn2C5Chk2hpk4yNnB

PS:这里的IP一定要注意,当时与其他节点建立连接这里踩了很多坑。为了跟外网的其他节点建立连接,肯定不能用我局域网内的ip,我就在浏览器查IP看我的对外IP,然后将IP部分修改发给朋友。这样做错了,因为局域网内多台电脑都用的这个IP,所以朋友添加我不成功。

7、退出容器:

exit

8、查看容器ID:

docker ps –a

会显示所有容器的信息。

9、停止容器:

docker stop 4efbd2594ee8 # 修改为自己的容器ID

Ps:下一次需启动容器后才能进入容器:docker start 4efbd2594ee8

问题及总结:

1、使用过程中如果启动容器报错,可尝试重启docker:systemctl restart docker

2、其实不用swarm.key也可以做,但前提是各个节点都要移除跟外部节点的连接,一旦有一个节点跟外网连接,其它节点都会慢慢连上。

3、关于ipfs添加节点建立连接不成功,多半是IP问题,也就是提供的节点地址信息不对。前面有提过。而且有些内网添加外网节点没问题,但是外网添加内网的节点就会不成功。

4、新建容器,容器和宿主主机的端口映射要注意,不然会出现端口冲突端口占用的错误。

5、关于swarm.key报错 ,

(pkg/mod/github.com/ipfs/go-ipfs@v0.4.22/core/node/libp2p/pnet.go:19) returned a non-nil error: failed to configure private network: malformed private network key: psk header error: multicodec did not match

ERROR cmd/ipfs: error from node construction: could not build arguments for function "github.com/ipfs/go-ipfs/core/node".

主要是懒,当时懒的装golang环境,所以直接使用在线编译器将main.go的输出拷贝出来,粘贴在txt文本里然后改名称后缀为swarm.key。后来启动ipfs守护进程就一直报错不能建立私网。打开文件,肉眼看到swarm.key的内容格式与前面使用的方法产生的一样,但是用前面介绍方法产生的key是不会报错的。可能还是有编码之类的微小区别吧。建议还是按照网上教程老老实实生成key.

我最后比较了两种方式产生的key,发现在线编译的方式文件大了2字节。

swarm.key 内容格式如下:

内容有误请联系我修改,我还有很多东西没说清,有人清楚的话,欢迎补充。

原文链接:https://blog.csdn.net/qq_26720653/article/details/103529010

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/8129

(0)
上一篇 2022年8月14日 10:44
下一篇 2022年8月14日 12:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml