原文标题:《IPFS 建立私有网络与运用》
撰文:六天
在联盟链的场景下,IPFS 作为去中心化存储的首选计划,本文将介绍如何运用 go-ipfs 建立一个私有网络并进行简单运用。
我的环境
由于资源限制,我这儿运用 docker 来建立一个两个节点的 IPFS 私有网络。假如有条件能够直接在多台机器或者多个虚拟机上装置。
开始建立
1、生成 swarm.key
swarm.key 是一个共享密钥,只有拥有相同密钥的节点才能相互通信,组成一个私钥网络。swarm.key 能够运用东西生成,东西的装置指令是:
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 目录。
2、启动节点
运转节点 1 和节点 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
清除一切缺省启动节点 bootstrap
docker exec ipfs_node_1 ipfs bootstrap rm all
docker exec ipfs_node_2 ipfs bootstrap rm all
查看节点 id
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 地址。
增加节点 id
在节点 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 的基础指令。
增加文件 add
$ docker exec ipfs_node_1 ipfs add /data/ipfs/swarm.key
added QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X swarm.key
其间 :
-
/data/ipfs/swarm.key 为 ipfs_node_1 容器的目录。
-
QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X 为文件 hash
查看文件 cat
$ docker exec ipfs_node_2 ipfs cat QmRitSEMhFJtNhLYtwGRJvhDrTTT4gQLjuLepZjo9C8a2X
/key/swarm/psk/1.0.0/
/base16/
5b9941085678c502b44cc98e2614dd648cb801115dcb6acee8e83d9bf8cf454c
能够看到咱们能够在 node2 中查看到 node1 上传的文件内容。
下载文件 get
$ 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
查看文件列表 ls
$ 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 表明文件
参考
go-ipfs:https://github.com/ipfs/go-ipfs
ipfs-swarm-key-gen:https://github.com/Kubuxu/go-ipfs-swarm-key-gen
ipfs 文档:https://www.jianshu.com/p/e38d5f733c81
来历链接:mp.weixin.qq.com