搭建一个国内高可用的IPFS网关节点,低价打造去中心化无限存储节点(理论)

Gengre
2023-10-21 / 0 评论 / 4 阅读 / 正在检测是否收录...

前言

首先介绍一下IPFS(InterPlanetary File System)中文称为星际文件系统,是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议。

IPFS是WEB 3.0时代的基石之一,作为一个有着悠久历史的开源分布式存储系统,有着最为广泛的web 3.0的应用。我们可以通过IPFS的客户端或者IPFS网关来访问存在于该系统上的文件。也可以通过主动的分享自己的文件将文件分发至全世界。当你使用IPFS时你可以通过客户端利用P2P网络进行文件传输,如果有人不知道IPFS或者没有条件的情况下也可以采用传统的HTTP服务通过其他人公开提供的网关来获取你想要的内容。而这种模式就是我们今天要说的IPFS gateway(网关)。

目前IPFS的网关大多数都是国外节点,国内用户使用极其困难。你可以通过公关网关查询网页查看当前可用的公开网关。

IPFS公开网关查询:https://ipfs.github.io/public-gateway-checker/

你可以在其中挑选一个适合自己的网关进行使用。不过就我个人而言大部分网关的国内连接质量都令人捉急。所以今天我给大家带来如何在境内搭建一个自己的网关。

IPFS官网:ipfs.tech|ipfs.io

简介

先简单说一下IPFS网关的工作原理,IPFS本身是一个P2P的文件传输系统,网关则是其提供的通俗易用的一个功能,可以让人通过http访问IPFS系统上的内容。当我们使用网关访问一个IPFS上的数据时,服务器后台之中的IPFS节点服务首先会在本地搜索是否有该数据,如果没有就去给连接的其他IPFS节点发送该数据的CID数据,其他节点有的话就会先拉取到本地节点然后再通过网关来提供给用户。你可以将IPFS网关看成是BT客户端的提供的Web服务器。

简单了解IPFS网关的功能之后我们来自建一个试试看

搭建IPFS网关

IPFS节点部署

你可以部署多个节点,每个节点数据可以不同也可以相同,看你需要什么效果。我这里用腾讯云的境内轻量服务器做演示。如果是面对境外服务其实可以直接用上面提到的公开的网关。境内因为带宽价格昂贵所以几乎不存在公开的网关。

服务器配置

由于IPFS存储时会把数据切分成1MB或者更小的数据块,每个数据块都会分配一个CID(content identifier)。读写这些数据的时候还需要对数据进行处理所以服务器CPU不能太弱鸡,最起码也得是2C起步,内存不得低于2GB。我这里作为演示的机器为2C4G。至于硬盘大小的话就得看你自己需要存储的数据了。一般服务的话可以大致估算一下一个月内的常用数据有多少,比方说我是存图片,每个月大概10GB的新图还有5个GB的热门访问图片,那么我硬盘大小只要超过(10+5)/0.7=21.4GB就差不多够用了。其他数据你可以继续放硬盘也可以定期存储到filecoin链上,只需要一点FIL作为交易的gas费即可(目前有很多免费提供存储提供商)。至于本地存储的数据如果超过我们给的限定就会删除掉部分冷门数据以腾出空间。

腾讯云轻量服务器活动价:

我准备的是2C4G6M。

镜像选择的是宝塔。

购买完成之后我们需要开放一些IPFS需要用到的端口8080端口(默认网关端口)4001(节点通信端口)5001(API节点)

进入服务器控制台选择防火墙-添加规则

UDP这几个端口可开可不开。如果经常连接其他节点和其他节点互通数据建议UDP协议也打开。

如果有大量数据存储需求可以买额外的云硬盘然后通过控制台挂载到服务器上后面IPFS初始化的时候要注意一下先设置环境变量。不然IPFS初始化之后会默认配置在系统盘。读写数据全放系统盘很容易占满。

IPFS初始化

官方教程地址:https://docs.ipfs.tech/install/command-line/#official-distributions

1、下载安装服务

1.1、下载压缩包(选择合适的下载源)

wget https://dist.ipfs.tech/kubo/v0.15.0/kubo_v0.15.0_linux-amd64.tar.gz (官网)
wget https://github.com/ipfs/kubo/releases/download/v0.15.0/kubo_v0.15.0_linux-amd64.tar.gz (GitHub)
wget https://ghproxy.com/https://github.com/ipfs/kubo/releases/download/v0.15.0/kubo_v0.15.0_linux-amd64.tar.gz (GitHub下载加速服务适合国内)

1.2、解压

tar -xvzf kubo_v0.15.0_linux-amd64.tar.gz

1.3、进入kubo文件夹并如下安装脚本

cd kubobash install.sh

1.4、测试IPFS是否正确安装

ipfs --version

这样就是安装完成了。

2、初始化配置

2.1、设置环境变量并初始化

如果你直接初始化的话IPFS会直接在当前用户文件夹下生成一个./ipfs隐藏文件夹。

如果你想初始化在其他指定硬盘/文件夹就需要先设置环境变量再初始化

假设我们要设置的目录为/root/ipfs

先创建文件夹

mkdir /root/ipfs

设置环境变量并初始化

export IPFS_PATH=/root/ipfsipfs init

这样就是初始化配置成功了。

3、快速开始

3.1、查看说明

ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme

3.2 基础功能

3.2.1 添加文件/文件夹

ipfs add filename (添加文件至ipfs节点)ipfs add -r dir (添加文件夹至ipfs节点)

我一共添加了三个文件分别是1.png 1.mp4 1.txt 图片、视频、文档都有,返回的Qm开头的就是文件的CID,我们后面用网关访问就需要用到CID了。

如图所示添加相同文件CID的不变,文件夹内每个文件都有单独的CID,文件夹本身也有个CID并保持了原有的结构。

root@VM-8-14-debian:~/testdata# ipfs add -r data
added QmZ8dHcccdqNBNgEHKnSMCVjAAhLc293tmhDZZcptfF5eD data/1.mp4
added Qmf7MKAKynNNt12EZyBNFWhvDn39y2P8pZ9tAaEtDRVZ1f data/1.png
added QmYWAifyw2V5dEq7c5GgdSPffeKoYXQZggnYzw5RbXpig4 data/1.txt
added Qme6r14w9pyGrjMU9UUzkNAuSmCY3d1svZtvNRfyyhNHFL data

3.2.2 读取数据

命令行下只能读取文本数据,我们以上面的1.txt为例

ipfs cat QmYWAifyw2V5dEq7c5GgdSPffeKoYXQZggnYzw5RbXpig4

3.2.3 长期保存某数据

根据IPFS的设置如果超过设置容量的阈值就会自动删除部分冷门数据,所以如果想长期保存某些数据还需要进行额外操作。

ipfs pin add CID (pin文件至本地存储)ipfs pin ls [CID] (列出所有文件/有CID参数时列出该文件状态)

3.2.4、删除数据

ipfs pin rm CID

这个没啥好说的。

更多其他的命令可以自行探索

IPFS网关部署

启动IPFS

建议先安装screen ,在screen session里执行,这个命令不能直接后台运行,这也算是比较蛋疼的一点。

# 安装screenapt install screen -y (ubuntu/debian)yum install screen -y (centos)# 用screen新建一个sessionscreen -R ipfs# 开启ipfsipfs daemon

然后Ctrl +A ,Ctrl +D挂起screen即可

这样就是成功启动了。但是目前还不能直接通过IP访问,我们可以进行反代或者直接修改配置文件,由于服务器安全性问题,这里我建议直接反向代理,不要修改配置。

公网访问网关

1、反向代理

反向代理也没啥好说的,解析域名到服务器IP,然后先申请SSL证书然后再开启反向代理,把网关地址127.0.0.1:8080反向代理即可。

然后直接访问域名/ipfs/CID即可

如我想访问上面添加的data文件夹,它的CID为:Qme6r14w9pyGrjMU9UUzkNAuSmCY3d1svZtvNRfyyhNHFL。假设我的域名是ipfs.2demo.top则访问https://ipfs.2demo.top/ipfs/Qme6r14w9pyGrjMU9UUzkNAuSmCY3d1svZtvNRfyyhNHFL

这样你就成功搭建了一个境内可用的IPFS网关了。

2、修改配置

如果你只开放网关的话只要修改配置里的Address.Gateway,如果你要用图形界面(webui)还需要修改Address.API和API.HTTPHeaders

一个修改为0.0.0.0,一个修改为服务器内网IP(没有内网IP就用公网IP)就行

要用webui可以先进入IP:5001/webui会自动弹出来一个修改配置的命令,复制粘贴然后重启ipfs即可

复制2之中的命令到服务器运行一下然后重启ipfs之后就会显示已连接IPFS了

你可以查看ipfs节点状态,文件,节点连接情况等。不过还是不建议公开webui,没有鉴权很容易导致别人乱存东西。

安装到服务

创建文件 /etc/systemd/system/ipfs.service 写入

[Unit]Description=IPFS DaemonAfter=syslog.target network.target remote-fs.target nss-lookup.target[Service]Type=simpleExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsubUser=milton[Install]WantedBy=multi-user.target

然后通过systemctl添加

systemctl daemon-reloadsystemctl enable ipfs systemctl start ipfs systemctl status ipfs

修改存储空间限制

可以通过修改Datastore.StorageMax来限制ipfs占用的硬盘空间大小,默认是10GB

结语

ipfs作为一个分布式存储可以说是自一开始就很有话题性,我们可以轻松的通过一个节点连接到全球,获取全球的数据,或者分发数据。需要注意的是如果你的数据被其他节点保存之后,你再删除自己节点内的数据也是无效的,其他人仍然能够通过其他节点访问该数据。反之,如果一份数据所存在的节点全都下线了或者删除了该数据那么也无法访问到该数据了。

尽管国内很多宣传ipfs服务的都说存上去就是去中心化了就永久保存了。这都是屁话,重要数据建议多备份,私密数据可以先加密再上传。我之所以用IPFS是因为我可以白嫖filecoin那些存储,只要我定期存一次数据就能直接不受限于我的服务器硬盘了。相对而言如果访问量高的话会导致带宽占用过多,从其他节点获取数据会让CPU保持一个较高的负载。但是我用的轻量服务器,上传带宽远小于下载带宽,本身也不是为了高并发去的,所以无所谓。要想体验好还是建议选个大点的硬盘,能够尽量存储更多的热门数据,部分低访问的数据存在其他节点即可。

0

评论 (0)

取消