IPFS系列03-搭建 IPFS 私有网络

这篇具有很好参考价值的文章主要介绍了IPFS系列03-搭建 IPFS 私有网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文讲述如何使用 IPFS 搭建自己的私有存储网络,如果你对 IPFS 还了解的话,建议你先看看下面两篇文章

  • IPFS系列01-IPFS 前世今生
  • IPFS系列02-IPFS 与 web3.0

1. 安装 IPFS

有两种安装方式,一种是 clone 源码 编译安装(前提是你已经安装了 Go 语言的运行环境):

git clone https://github.com/ipfs/go-ipfs.git 

cd go-ipfs
make install

项目源码依赖较多,编译需要一定的时间,请耐心等待。另一种方法非常简单,直接下载官方编译好的可执行文件,最新稳定版下载地址

官方提供各种系统发行版的下载包,我下载的是 Linux 64 位版本

private networking (swarm.key / libp2p_force_pnet) does not work with public,深入浅出 IPFS,网络,区块链,分布式

下载后直接解压安装

tar xzf go-ipfs_v0.4.19_linux-amd64.tar.gz

cd go-ipfs
sudo ./install.sh

2. 启动 IPFS 节点

首先初始化节点

ipfs init

initializing IPFS node at /home/rock/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmTrA1w1ux7jW55eqC8Vu7DCRyTMqdpHA5iAZUTRt7snuN
to get started, enter:

	ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

初始化主要是生成节点 ID 以及生成初始的配置文档和节点数据

接下来,启动守护进程

ipfs daemon 

Initializing daemon...
go-ipfs version: 0.4.19-
Repo version: 7
System version: amd64/linux
Golang version: go1.11.5
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/172.17.0.1/tcp/4001
Swarm listening on /ip4/192.168.0.110/tcp/4001
Swarm listening on /ip4/192.168.56.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/172.17.0.1/tcp/4001
Swarm announcing /ip4/192.168.0.110/tcp/4001
Swarm announcing /ip4/192.168.56.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

启动守护进程后会默认会在你的 Home 目录下创建一个 .ipfs 文件夹
并输出一些你的节点的配置信息,比如节点连接地址,文件访问网关,并内置提供了一个 webui 管理系统。
你通过浏览器访问 http://127.0.0.1:5001/webui 就可以看到管理界面。

private networking (swarm.key / libp2p_force_pnet) does not work with public,深入浅出 IPFS,网络,区块链,分布式

现在你就可以使用 IPFS 的客户端命令行工具来管理你的节点了。比如你可以使用下面的命令查看你节点的 README 文件

ipfs cat /ipfs/QmTrA1w1ux7jW55eqC8Vu7DCRyTMqdpHA5iAZUTRt7snuN/readme

再比如添加文件

echo "hello world" > hello.txt
ipfs add hello.txt
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o hello.txt
 12 B / 12 B [===========================================================================================================================] 100.00%

3. 搭建私有网络

IPFS 默认是通过一些种子连接到全球网络,但是我们现在是要搭建私有网络,所以需要先把种子节点连接信息删除。

有两种方式可以删除种子节点连接信息,一种是标准操作,直接执行命令:

ipfs bootstrap rm --all

另一种是暴力操作,直接从配置文档中删除 bootstrap 连接信息, vim ~/.ipfs/config, 找到 bootstrap

"Bootstrap": [
	"/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
	"/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
	"/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
	"/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
	"/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
	"/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
	"/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",
	"/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
	"/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd",
	"/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
	"/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",
	"/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
	"/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"
],

直接把里面的节点全部删除就好了。这样你再重启节点之后你就是一个孤立的节点了。

接下来我们开始来搭建私有网络,我们需要启动三个节点,不管你是用三台物理机器还是虚拟机还是新建三个容器。

假设名称分别为 ipfs-master, ipfs-node1, ipfs-node2,其中 master 为主节点(种子节点),node1, node2 均为普通节点。

Note: 以下操作我们默认你已经初始化三个节点,并删除了他们的 bootstrap 种子节点。

第一步,我们需要在主节点生成私有网络共享的 key,作为其他节点加入私有网络的准入凭证,没有共享 key 的节点不允许加入私有网络。

我们需要使用 go-ipfs-swarm-key-gen 工具来创建共享 key。安装方式很简单:

go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen

第二步,在 master 节点生成共享 key

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

第三部,分别拷贝 swarm.key 到 node1, node2 节点的 ~/.ipfs/ 目录下,然后你需要获取 master 节点的连接地址:

~$ ipfs id
{
	"ID": "QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
	"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxNWcsgcNlD6DrYHLLNLeJt2y0x0mqaruSse6hhM11tcPocdJq7z03WL9Elu/sPoBZ0SfG6SKgS9xrXewNrJKIGR85qlJcv43c7/6xjP41liOpY5Gtw4UWQlEZ4gV40OZceILQFD5bnpym+bQh/3zDduvASwDOBOpNS+3liIDXpR4fDh8EWoIi4pFBqDinsIs6lkd0dJBchHnUgPT83ZKpTj1pWf+52MxNDMQq8bmI7ZioojhncZb+Qp5yrgD80XR21WtbUIfVrZyF9e5Yo+DUV1WTEWG+955Cl+3FmXP0IEkZBPZL0g5DGibS+p0XQFXqJd4rcPPw1J0Gq0fWv9VrAgMBAAE=",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip4/192.168.1.5/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip4/192.168.1.2/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip4/172.17.0.1/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/::1/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:ff02:6900:dea:2285:6549:3ce0/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:ff02:6900:9bbf:20ba:9f76:5a1/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:ff85:a100::1/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:fffc:2500:dea:2285:6549:3ce0/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:fffc:2500:1702:d952:9dec:84fa/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:ff02:6900:45ce:6b27:8eae:62fb/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP",
		"/ip6/240e:fa:ff02:6900:6ea2:555d:866e:4445/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP"
	],
	"AgentVersion": "go-ipfs/0.4.20/",
	"ProtocolVersion": "ipfs/0.1.0"
}

这里你需要选择局域网的那个连接地址,一般是 192.168 开头,因为我的机器上有两个网卡,所以我这里有两个 IP. 随便选一个就可以了。

假设我们选择 "/ip4/192.168.1.5/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP"

前面我们删除了 node1 和 node2 的种子节点,那么现在他们是孤立的节点,所以我们需要把我们的 master 节点设置成他们的种子节点,设置的方法也
有两种,一种是分别在 node1 和 node2 上执行:

ipfs bootstrap add /ip4/192.168.1.5/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP

added /ip4/192.168.1.5/tcp/4001/ipfs/QmeXkxzGxUrChcYJbuQQfw34Ze5bmQhmegTNDLtANKHWLP

或者采取我们前面的粗暴的方法,直接修改 node1 和 node2 的配置文档,修改 Bootstrap 选项的值。

我们还可以在各个节点添加环境变量来使得节点启动的时候强制连接私有网络:

export LIBP2P_FORCE_PNET=1

设置好以后重启各个节点,你会发现在输出的日志中多了这么 2 条:

Swarm is limited to private network of peers with the swarm key
Swarm key fingerprint: c2fc00b19ee671210674155a5cf76ee8

说明节点现在连接的是私有网络。

4. 测试

接下来我们开始测试,分别在三个节点添加文件,然后看能否在在另外两个节点下载到文件,下面我直接说下我的测试结果。

  1. 在网络中的任意节点添加文件,均能在其他任意节点下载到该文件。
  2. 超过 256KB 大小的文件会自动分片存储,但是并没有像我们想象中的那样会将同一个文件的分片存储到不同的节点上去,事实上不管你添加多大的文件,
    即使这个文件最后被分成 100 个 piece, 最终这 100 个 piece 也只是存储在了进行添加操作的节点上,其他节点的 .ipfs 目录大小并没有明显的改变,
    估计只有那张分布式哈希表(DHT)被同步了。
  3. 其他节点在第一访问文件的时候会自动下载一份完整的文件缓存到本地节点,但是如果存储文件的那个节点停止服务,那么从其他节点将无法下载到文件。
  4. 上传到 ipfs 节点的文件将被永久存储,无法删除,只要知道文件 hash,用户可以通过节点守护进程提供的网关服务访问存储的文件,访问地址为:
    http://127.0.0.1:8080/ipfs/{hash}

5. 对外服务

默认 ipfs 节点提供的服务都是在本机的,如果你想要自己的节点对外提供服务(局域网或者公网),需要修改配置文件,不要绑定本地 IP,
127.0.0.1 修改成 0.0.0.0

"Addresses": {
  "API": "/ip4/0.0.0.0/tcp/5001",
  "Announce": [],
  "Gateway": "/ip4/0.0.0.0/tcp/8080",
  "NoAnnounce": [],
  "Swarm": [
	"/ip4/0.0.0.0/tcp/4001",
  "/ip6/::/tcp/4001"
  ]
},

如果你想要给前端调用的话,还需要配置跨域设置。

"API": {
  "HTTPHeaders": {
    "Access-Control-Allow-Methods": [
      "PUT",
      "GET",
      "POST"
    ],
    "Access-Control-Allow-Origin": [
      "*"
    ]
  }
}

如果你想要把整个网络作为一个集群对外提供服务的话,你可以再用一个负载均衡将所有的节点罩住,简单点的用 Nginx,如果你熟悉 LVS 配置的话更好。

本文首发于 小一辈无产阶级码农文章来源地址https://www.toymoban.com/news/detail-787212.html

到了这里,关于IPFS系列03-搭建 IPFS 私有网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • junit单元测试mock私有private方法和静态static方法

    我们知道org.mockito.Mockito功能有限,不能mock 私有private、受保护的protected方法 org.powermock.api.mockito.PowerMockito更强大,支持对private和protected和static方法的mock 别忘记,首先要引入maven依赖 有如下私有方法需要mock 这时候可以利用PowerMockito的spy方法mock出方法所在的对象,然后利用

    2024年02月12日
    浏览(28)
  • 在Linux上不会部署私有IPFS?(保姆级教程!!!)教你一步一步部署。

    系统要求 至少需要2G内存,2 核 CPU。 实验环境 共计两个节点,192.168.159.102、192.168.159.103,系统采用centos7 环境准备后,按照如下步骤部署ipfs,每个节点都要单独部署ipfs。 配置 golang 环境 下载go 配置 golang 环境变量 所有节点上 都需要部署ipfs: 1、安装 2、指定IPFS的存储位置

    2024年01月18日
    浏览(30)
  • 【极数系列】Flink项目入门搭建(03)

    gitee地址:https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行,模块:aurora_flink Flink 版本:1.18.0 Jdk 版本:11 tips:transformer处写主启动类 tips:resource目录下增加该配置,主要用于日志打印 tips:编写了一个简单的有界数据流处理demo程序 step1 :创建flink程序运行所需环境 ste

    2024年01月24日
    浏览(41)
  • 【SEED Labs 2.0】Virtual Private Network (V*N) Lab

    本文为 SEED Labs 2.0 - Virtual Private Network (V*N) Lab 的实验记录。 本实验要求完成 V*N 的实现。其应当支持 TUN 建立、隧道加密、服务器认证、客户端登录、多用户等功能。 本实验的实验手册使用多虚拟机与 C 语言完成,而我们希望直接 使用 docker 和 Python 。我们一步到位完成了所

    2024年02月07日
    浏览(31)
  • 《全网唯一》解决华为OpenEuler 22.03LTS重启后,docker丢失自定义网络,docker-compose报错: network not found

    如果你在华为OpenEuler 22.03LTS系统中 使用yum或者dnf安装docker,docker network create 创建的网络,然后重启宿主机,会发现之前的网络全都不见了 或者docker-compse创建一组容器,重启宿主机会发现docker-compose无法启动,报错找不到网络 如果只是想解决以上问题,不关心处理过程,请直

    2024年02月10日
    浏览(28)
  • 【C++】继承 ⑤ ( public 公有继承 - 示例分析 | protected 保护继承 - 示例分析 | private 私有继承 - 示例分析 )

    成员的访问属性 需要看根据下面的逻辑进行判定 : 调用位置 : 看是在哪调用的 , 在 类内部 , 派生类 ( 子类 ) , 还是在 类外部 ; 子类继承方式 : 公有继承 : public 保护继承 : protected 私有继承 : private 父类中的访问级别 : 公有成员 : public 保护成员 : protected 私有成员 : private 如 :

    2024年02月08日
    浏览(28)
  • IPFS系列04-IPFS 存储性能测试

    本文是对 IPFS 存储性能测试的一个报告。 Note: 本次测试使用的都是单台服务器,主要测试 IPFS 读写性能,以及哪些因素会影响 IPFS 的存储效率。 统计方式:每组操作执行5次,然后取平均值 考虑到硬件对存储性能的影响,我们这里分别使用了两台不同配置的台式机进行了测试

    2024年01月23日
    浏览(23)
  • IPFS技术系列之IPFS实践应用

    本文主要介绍如何使用IPFS及常规操作 在这部分主要介绍IPFS的环境搭建及常用操作。 1.1 通过安装包安装 IPFS有多种语言的实现方式,主流的是Go语言和JavaScript实现的版本,本文主要介绍Go语言版本。 首先安装IPFS之前,需要安装大于1.7版本的Go语言环境。 1.在IPFS官网(https:/

    2024年02月05日
    浏览(31)
  • 使用MetaMask + Ganache搭建本地私有网络并实现合约部署与互动

    我使用Remix编写合约,MetaMask钱包工具和Ganache搭建了一个私有网络,并且实现了合约的部署和互动。 在前面的博客中提到了 Remix在线环境及钱包申请 以及 Solidity的基本语法 ,没看过的小伙伴可以点击链接查看一下,都是在本专栏下,觉得有用的伙伴记得点个关注哦。 remix:

    2024年02月04日
    浏览(64)
  • 人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络),实现模型的训练与预测

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络),实现模型的训练与预测。孪生网络是一种用于度量学习(Metric Learning)和比较学习(Comparison Learning)的深度神经网络模型。它主要用于学习将两个输入样本映射到一个

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包