IPFS作为去中心存储,私有网络在联盟链的场景下应用广泛。
在联盟链的场景下,IPFS作为去中心化存储的首选方案,本文将介绍如何使用go-ipfs搭建一个私有网络并进行简单使用。
由于资源限制,我这里使用docker来搭建一个两个节点的IPFS私有网络。如果有条件可以直接在多台机器或者多个虚拟机上安装。
swarm.key是一个共享密钥,只有拥有相同密钥的节点才能互相通信,组成一个私钥网络。 swarm.key可以使用https://github.com/Kubuxu/go-ipfs-swarm-key-gen工具生成,工具的安装命令是:
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
安装完成后,生成swarm.key,命令是:
ipfs-swarm-key-gen > /Users/sixdays/tmp/ipfs/swarm.key
其中
/Users/sixdays/tmp/ipfs/
目录是我ipfs目录。/Users/sixdays/tmp/ipfs/node1
是我ipfs 节点1目录。/Users/sixdays/tmp/ipfs/node2
是我ipfs 节点2目录。// 运行节点1
docker run -d --name ipfs_node_1 -e IPFS_SWARM_KEY_FILE=/Users/sixdays/tmp/ipfs/swarm.key -v /Users/sixdays/tmp/ipfs/node1/staging:/export -v /Users/sixdays/tmp/ipfs/node1/data:/data/ipfs -p 4001:4001 -p 4001:4001/udp -p 127.0.0.1:8080:8080 -p 127.0.0.1:5001:5001 ipfs/go-ipfs:latest
// 运行节点2
docker run -d --name ipfs_node_2 -e IPFS_SWARM_KEY_FILE=/Users/sixdays/tmp/ipfs/swarm.key -v /Users/sixdays/tmp/ipfs/node2/staging:/export -v /Users/sixdays/tmp/ipfs/node2/data:/data/ipfs -p 4002:4001 -p 4002:4001/udp -p 127.0.0.1:8081:8080 -p 127.0.0.1:5002:5001 ipfs/go-ipfs:latest
docker exec ipfs_node_1 ipfs bootstrap rm all
docker exec ipfs_node_2 ipfs bootstrap rm all
docker exec ipfs_node_1 ipfs id
docker exec ipfs_node_2 ipfs id
这里,我节点1的Id是:12D3KooWEVo8FqH8YUT1noXvca5hgSRWBRcDQomEcFY2zXwA7dbw
节点1的address是:
/ip4/172.17.0.3/tcp/4001/p2p/12D3KooWEVo8FqH8YUT1noXvca5hgSRWBRcDQomEcFY2zXwA7dbw
节点2的Id是12D3KooWRcx6gpbsbvb6YiNsDpJgnmNHFCgCiUmVF42o4zn2W5Pj
节点2的address是/ip4/172.17.0.4/tcp/4001/p2p/12D3KooWRcx6gpbsbvb6YiNsDpJgnmNHFCgCiUmVF42o4zn2W5Pj
节点的address我用的是docker给分配的ip地址。
在节点1中添加节点2地址
docker exec ipfs_node_1 ipfs bootstrap add /ip4/172.17.0.4/tcp/4001/p2p/12D3KooWRcx6gpbsbvb6YiNsDpJgnmNHFCgCiUmVF42o4zn2W5Pj
在节点2中添加节点1地址
docker exec ipfs_node_1 ipfs bootstrap add /ip4/172.17.0.3/tcp/4001/p2p/12D3KooWEVo8FqH8YUT1noXvca5hgSRWBRcDQomEcFY2zXwA7dbw
至此,我们2个节点的IPFS私有网络已搭建完成。
使用命令
docker exec ipfs_node_1 ipfs -h
可以看到IPFS的基础命令。
$ docker exec ipfs_node_1 ipfs add /data/ipfs/swarm.key
added QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X swarm.key
其中:
$ docker exec ipfs_node_2 ipfs cat QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X
/key/swarm/psk/1.0.0/
/base16/
5b9941085678c502b44cc98e2614dd648cb801115dcb6acee8e83d9bf8cf454c
可以看到我们可以在node2中查看到node1上传的文件内容。
$ docker exec ipfs_node_2 ipfs get QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X -o /data/ipfs/test.key
Saving file(s) to /data/ipfs/test.key
95 B / 95 B 100.00% 0s
其中 -o表示输出目录,docker容器中的/data/ipfs对应我们主机目录为/Users/sixdays/tmp/ipfs/node2/data
$ docker exec ipfs_node_2 ipfs pin ls
QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm indirect
QmU5k7ter3RdjZXu3sHghsga1UQtrztnQxmTL22nPnsu3g indirect
QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y indirect
QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y indirect
QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB indirect
QmQGiYLVAdSHJQKYFRTJZMG4BXBHqKperaZtyKGmCRLmsF indirect
QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc recursive
QmQy6xmJhrcC5QLboAcGFcAE1tC8CrwDVkrHdEYJkLscrQ indirect
QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn recursive
其中 recursive表示文件夹,indirect表示文件
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!