手把手教你搭建 IPFS 私有网络【转载】
发布于 3 年前 作者 sanjianke 982 次浏览 来自 技术/人物

在联盟链的场景下,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

欢迎使用OKX交易所
2 回复

这个就比较专业了,没操作过运行节点,有时间了,研究一下,这个还是比较有意思的,谢谢分享

正好手里有机器可以试试,不知道速度够不够。

回到顶部