用户登陆
正在加载
简单的IPFS私有网络搭建教程
互联网 · 2020-10-12 14:55:11

本文是一个简单的IPFS私有网络搭建教程,根据本文你可以搭建起一个简单的IPFS网络demo,可以在不同的节点获取同样的文件。

其实我没必要写这个教程的,GitHub上的示例写得清清楚楚,但是在Google搜索相关资料的时候中文页面全部都是挖矿(恰饭)相关,而实际应用的文章寥寥无几╮(╯_╰)╭ 。

环境:共计两个节点,分别为主节点子节点

系统均为Ubuntu server 16.04。

安装

下载IPFS程序:

wget https://1.i-book.in/ipfs/QmcB55KNpU1E8uvqFtFa9QTFWPTHnfSmC1N7Hg6c5qYYX9 -O go-ipfs_v0.4.22_linux-amd64.tar.gzCopy

解压缩:

tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gzCopy

安装:

cd go-ipfs/
sudo ./install.shCopy

需要指定IPFS的存储位置,如果不需要就跳过,直接初始化。

export IPFS_PATH="绝对路径"Copy

初始化:

ipfs initCopy

如果输出以下代码就是初始化成功了:

generating 2048-bit RSA keypair...done
peer identity: QmTvSJEh3xarHMUj6uamQwnnvbYXH4vjttAehKjBvixxJHto get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readmeCopy

该步骤需要在所有节点上重复操作。

生成共享key

安装golang-go:

sudo apt-get install golang-goCopy

编译工具:

go get github.com/Kubuxu/go-ipfs-swarm-key-gencd $GOPATHcd go/src/github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/go buildCopy

生成key:

./ipfs-swarm-key-gen > ~/.ipfs/swarm.keyCopy

该步骤仅在主节点操作。

将生成的swarm.key文件传输到所有需要加入私有网络的子节点 ~/.ipfs/文件夹内。

配置IPFS

移除默认的IPFS节点:

ipfs bootstrap rm allCopy

查看节点ID:

ipfs idCopy

系统会输出以下内容,记住ID部分:

{        "ID": "QmTvTNFh3xarHMUj6uamQwnnvbZYE1vjttAeCjgBvixxJH",        "PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEPn7J/DSijRAT/QD8rTVjF8nCgEnv0jTQYWeDbC9dEVmTM8WUoh2vK0s3qSvpfxNAHkvgcp5kJwVbm0kZEwcbUVzcrXKfdTgEcSJ0CDptaWQEH40wIUOkhwyhIZAMeZL0Q0S9k8Rt0iVk3ILpapcW9hKu1/7Ms5lntdpVmrxOhM1LZZ7lUjXkORyN+qu/uNMi0/KeH2I37cwv9PWbxYuak7o1mlI+sIChD32uO8DlL3zX1VoWHmftMCuysOCGhosrO64pMAGY9jUqf85X9cFaetg1yukV8yslSsRY/8phqNNAlhCf2TdbDRAZbHp8jQjrU3THwOALN+6kU04WuhfNAgMBAAE=",        "Addresses": null,        "AgentVersion": "go-ipfs/0.4.22/",        "ProtocolVersion": "ipfs/0.1.0"}Copy

主节点服务器上添加子节点

ipfs bootstrap add /ip4/Your-Node-IP/tcp/4001/ipfs/QmTvTNFh3xarHMUj6uamQwnnvbZYE1vjttAeCjgBvixxJHCopy

子节点服务器上添加主节点

ipfs bootstrap add /ip4/Your-Node-IP/tcp/4001/ipfs/QmYNYDp5PEi64dgTYRdci3XhtmQEnZVBQTATinWw6fq3AcCopy

测试IFPS网络

所有的节点都添加完毕后使用命令ipfs daemon启动IPFS,显示如下输出说明启动成功,配置文件没有问题:

Initializing daemon...go-ipfs version: 0.4.22-Repo version: 7System version: amd64/linuxGolang version: go1.12.7Swarm is limited to private network of peers with the swarm keySwarm key fingerprint: 6ac2fea09ce0c68a2630b1f51f614dfbSwarm listening on /ip4/Your-Node-IP/tcp/4001Swarm listening on /ip4/127.0.0.1/tcp/4001Swarm listening on /ip4/172.17.0.1/tcp/4001Swarm listening on /p2p-circuitSwarm announcing /ip4/Your-Node-IP/tcp/4001Swarm announcing /ip4/127.0.0.1/tcp/4001Swarm announcing /ip4/172.17.0.1/tcp/4001API server listening on /ip4/127.0.0.1/tcp/5001WebUI: http://127.0.0.1:5001/webuiGateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080Daemon is readyCopy

网络已经启动了,现在测试网络的连通性,使用ipfs stats bitswap命令查看IPFS现在连接了多少节点:

bitswap status        provides buffer: 0 / 256        blocks received: 0        blocks sent: 1        data received: 0        data sent: 23        dup blocks received: 0        dup data received: 0        wantlist [0 keys]        partners [1]Copy

其中partners就是连接到的节点数量,因为我们现在只有两个节点,所以partners1

测试文本传输

在主节点新建一个文本文件:

echo "hello saltyleo" >> test.txtCopy

将其添加到ipfs网络:

ipfs add test.txtCopy

输出以下字符就说明文件已经上传上去了:

added QmPxEMHme51cx6DNDeqisT78xp1zdVHfH4utPUyfZWNAwk test.txt15 B / 15 B [=========================================================]100.00%Copy

查看文件:

ipfs cat QmPxEMHme51cx6DNDeqisT78xp1zdVHfH4utPUyfZWNAwkCopy

在子节点重复上面的操作,输出都是hello saltyleo说明私有网络已经联通。

后记

网关部分我就不写了,反正GitHub上都有示例,只要iptables、nginx、域名都设置好就行了。IPFS的访问速度问题,我猜测是GFW对这类P2P流量进行了清洗,导致国内节点可用性并不高,所以文件传输速度慢。这个是天朝上国的特色,没有任何办法能解决。(肉身翻墙走起)

ipfs add的时候,文件小于1KB的简直是光速传播,大于1KB就会比较慢,这是因为小于1KB的会直接在DHT网络内广播,广播到达的时候文本就已经到达了,大于1KB的需要先接收广播>找节点>找文件>传输,所以会比较慢。

关于这个协议还是有不少不足的,比如节点复制,没有一个简单的命令,而是需要繁琐配置才可以实现。还有当成为公网节点的时候流量会使用的非常快,平均一天十几个GB,还好我的节点是按宽带计费的,要不然流量费可烧不起。还有这个文件播种的速度实在是太过于感人,太慢了!!!

免责声明:
本网站所提供的所有信息仅供参考,不构成任何投资建议。用户在使用本网站的信息时应自行判断和承担风险。币界网不对用户因使用本网站信息而导致的任何损失负责。用户在进行任何投资活动前应自行进行调查和研究,并谨慎决策。币界网不对用户基于本网站信息做出的任何投资决策负责。用户在本网站发布的任何内容均由其个人负责,与币界网无关。
免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。币界网对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。币界网用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与币界网无关。币界网不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。
s_logo
App内打开