MAC上搭建私有IPFS网络

工作中需要搭建一个私有的IPFS网络,步骤比较简单,但还是要总结一下,希望能对其他人有点帮助。整个流程大概分4步:

  1. 搭建一个公网IPFS节点
  2. 搭建私有IPFS节点
  3. 添加新的节点到私有IPFS网络
  4. 测试IPFS网络

要运行自动化脚本一键部署IPFS的话,请参照下一篇博客:https://blog.csdn.net/weixin_41459401/article/details/84582125

1. 搭建一个IPFS节点

搭建IPFS最方便快捷的方式之一是使用docker,可以拉取go版本的ipfs镜像来启动IPFS节点。

1.1 启动IPFS单节点

打开terminal,执行下列命令,一个IPFS节点就跑起来了。

【运行命令】

# 拉取go-ipfs镜像
docker pull ipfs/go-ipfs:latest

# 配置staging和data的volume映射文件
ipfs_staging=/tmp/ipfs_staging
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data
mkdir -p $ipfs_data

# 启动ipfs节点
docker run -d --name ipfs_host \
-v $ipfs_staging:/export \
-v $ipfs_data:/data/ipfs \
-p 4001:4001 \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:5001:5001 \
ipfs/go-ipfs:latest

【查看结果】方法1: 查看log文件
在terminal中敲命令行

# 查看ipfs运行的log内容
docker logs -f ipfs_host

如果log打印出下面的内容就说明IPFS起来了。

...
Gateway (readonly) server listening on /ip4/0.0.0.0/tcp/8080
Daemon is ready

【查看结果】方法2: 在浏览器中查看ipfs
在浏览器地址栏输入这个地址 http://localhost:5001/webui ,会自动跳转到ipfs的explorer的web ui界面。
在这里插入图片描述

1.2 查看已连接的其他IPFS节点

开一个新terminal窗口或者Ctrl + C退出docker log进程,执行这个命令查看一下刚才搭建的节点有没有connect到其他节点。
【运行命令】

# 在ipfs_host容器中运行‘ipfs swarm peers’命令,查看已连接的其他ipfs节点
docker exec ipfs_host ipfs swarm peers

【查看结果】
如果你的电脑是联网了的,一般都会看到一个长长的列表,里面列出了你的节点连接了的其他IPFS节点。

/ip4/101.164.57.166/tcp/24125/ipfs/QmY9JiYESBDCU2s1SQyMCadpYYA2nmiZ4rFHwVuiTFk4Vn
/ip4/101.251.230.213/tcp/4001/ipfs/QmZEvpGZfGqNFtAVGgF2ntJnsLiWhzB2C9Kiccr5Wzb2hk
/ip4/101.251.230.214/tcp/4001/ipfs/QmPj31HZujPhhkjM4nFm4sxB3tRLsAwUtVoi6FoLbazijo
/ip4/103.205.97.78/tcp/4001/ipfs/QmXPbFGQDLeatcWEJr6f3XEoiLcX6uoZqujYk44GM6t629
…

如果发现列表是空的,则需要检查:1)网络连接情况;2)端口映射。

如果你是要创建一个节点加入全球的IPFS网络,那么IPFS节点的搭建工作就完成了,可以直接去测试上传和下载文件了;如果你是要搭建私有的IPFS网络,还要再做下面的步骤。

2. 搭建单节点的私有IPFS网络

前面是启动了一个IPFS节点加入了公有IPFS网络,如果你想搭建自己私有的IPFS网络,需要为自己的节点设置swarm key密钥。

2.1 生成私有网络swarm key

要生成私有网络的话,必须使用ipfs-swarm-key-gen创建私有网络的swarm key。私有网络的所有的节点都要使用这个key,否则无法加入这个私有网络。

# 关闭前面启动的ipfa节点
docker stop ipfs_host
docker rm -f ipfs_host
# 配置staging和data的volume映射文件
ipfs_staging=/tmp/ipfs_staging
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data
mkdir -p $ipfs_data

# 拉取ipfs swarm key工具
go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
# 生成swarm key
$GOPATH/bin/ipfs-swarm-key-gen > $ipfs_data/swarm.key

# 启动ipfs节点
docker run -d --name ipfs_host \
-v $ipfs_staging:/export \
-v $ipfs_data:/data/ipfs \
-p 4001:4001 \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:5001:5001 \
ipfs/go-ipfs:latest

2.2 移除默认的bootstrap节点

默认配置的节点都是加入全球IPFS网络的,需要删除所有bootstrap节点信息。
【运行命令】

docker exec ipfs_host ipfs bootstrap rm --all

【检查结果】
查看swarm peers,如果打印出的列表为空就对了。

# 在ipfs_host容器中运行‘ipfs swarm peers’命令,查看已连接的其他ipfs节点
docker exec ipfs_host ipfs swarm peers

3. 为私有IPFS网络添加节点

搭建的IPFS如果只有一个节点,可以用作调试环境,但要用于生产环境的话就没有意义了。生产环境最好还是搭建多节点的IPFS网络。
在第2步中,第一个私有节点启动后,可以再添加若干个新的节点,这样一个多节点的IPFS私有网络就搭好了。添加新节点时要注意:1)在添加新节点的之前,要把前面生成的swarm key复制到ipfs_data目录下;2)在新节点启动后,要指定bootstrap信息。

启动第二个IPFS节点(同一台物理机)

在测试环境和生产环境,建议在不同物理机上创建IPFS多节点。在本地调试环境,可以在一台物理机上创建多个IPFS节点。在创建新节点的时候要注意:1)不同节点映射的volume不要重合;2)容器名不要重合;3)对外端口不要重合;4)要记得把前面生产的swarm key复制到新创建的节点的ipfs_data文件夹下。例如:

new_peer_suffix=_1
ipfs_staging=/tmp/ipfs_staging$new_peer_suffix
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data$new_peer_suffix
mkdir -p $ipfs_data

cp /tmp/ipfs_data/swarm.key $ipfs_data/swarm.key

# 启动ipfs节点
docker run -d --name ipfs_host$new_peer_suffix \
-v $ipfs_staging:/export \
-v $ipfs_data:/data/ipfs \
-p 4101:4001 \
-p 127.0.0.1:8180:8080 \
-p 127.0.0.1:5101:5001 \
ipfs/go-ipfs:latest

在一台物理机上可以启动多个IPFS节点(我自己在macbook pro上创建了3个peer,经测试两两彼此都是联通的),只要注意前面4个注意事项就好了。

指定bootstrap信息(Optional)

ipfs bootstrap add /ip4/x.x.x.x/tcp/4001/ipfs/QmbvgDGNmKRoTiB16g1qn82pTupQdPznZPwVo9zvrCPEJv

4. 测试IPFS节点(上传/下载文件)

测试IPFS节点比较简单

上传文件

【运行命令】

# 登陆到ipfs_host container
docker exec -it ipfs_host /bin/sh
# 上传文件
# 注:测试的时候不建议上传特别大的文件,尤其如果你是连了全球网络的话,也不要上传私密文件.
# 下面的所有命令行都是跑在ipfs_host container里面的
# 创建hello world测试文件
echo "hello world" > hello.txt
ipfs add hello.txt

【查看结果】方法1: 查看上传进度
上传文件的add命令会打印出上传的进度,如果看到100.00%就是上传完毕了。

/ # ipfs add /data/ipfs/version 
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o hello.txt
 12 B / 12 B [===================================================================================================================================] 100.00%

【查看结果】方法2: ipfs cat命令查看文件内容

docker exec ipfs_host ipfs cat /ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o

一切正常的话应该能看到hello.txt的文件内容:

/ # ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
hello world

【查看结果】方法3: 浏览器查看
前面启动ipfs节点的时候把ipfs_host容器的8080端口映射到了物理机,可以通过该端口直接在浏览器中查看刚刚上传的文件内容,直接在浏览器中敲地址http://localhost:8080/ipfs/------IPFS_URL------就可以查看文件了。
例如,刚刚上传的文件hash是QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o,直接在浏览器地址窗口输入
http://localhost:8080/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
就可以看到文件内容了
在这里插入图片描述
【查看结果】方法4: curl命令访问8080端口
新开一个terminal窗口,运行下面这个命令:

curl http://localhost:8080/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o

打印出来hello world就对了~_~

hello world

猜你喜欢

转载自blog.csdn.net/weixin_41459401/article/details/84563258