IPFS简介:使用HTTP网关在您的网络上运行节点
您已经听说过IPFS分布式文件系统,并希望开始在您的堆栈中采用该技术 - 毕竟,分布式,分散式的未来是我们不可避免地会看到的。该行业正朝着在软件领域实现该目标的道路上取得快速进展。
IPFS或行星际文件系统于2015年以分布式互联网的概念被接收,其目标是取代我们今天已经了解和使用的集中式HTTP网络。
底层IPFS网络的功能使我们能够利用文件系统充当Web资产的全球CDN网络,实现超快速交付。我们设置的每个节点都可以充当文件系统的访问点。
IPFS旨在以行星际规模(字面上)分发文件,但HTTP不是。这就是为什么每个IPFS节点都需要在世界某个地方充当接入点,以便为该地理位置的流量提供服务。
考虑到这一点,本文将更具体地介绍的内容是:
-
在服务器上安装IPFS软件。将使用CentOS7 VPS,但提供了任何Linux发行版的文档。
-
配置IPFS存储库以存储在已装入的卷上。为什么?您可以将IPFS存储库配置为您需要的大小,因此可以明智地使用一个Volume,您可以根据需要调整大小。在本文中,我将参考数字海洋块存储卷,但同样,您不仅限于此解决方案。
-
打开所需的防火墙端口。Firewalld将配置为打开VPS的必要端口,以便网络与其他对等端进行交互。
-
使用Supervisord在后台运行IPFS。Supervisord是我经常使用的流程管理器 - 它将确保IPFS在系统启动时启动,并在崩溃或中断时重启流程。需要使用流程配置定义环境变量,因此这将完成。
-
打开IPFS节点的HTTP网关。在节点成功运行后,我们将停止它,并修改一些配置选项以允许HTTP请求从您的节点访问IPFS内容。
-
为您的其他VPS重复此过程,并将您的节点作为对等方连接。这样做将在IPFS节点之间提供直接链接。由于您的节点相互了解,IPFS协议将能够优化它们之间的数据传输。
IPFS网关
AG ateway允许通过HTTP请求从IPFS网络访问数据。默认情况下,在端口8080上配置IPFS网关,然后可以从中获取内容。
更具体地说,数据将通过以下方式从您的VPS获取:http:// <your_ip_address>:8080 / ipfs / <content_hash>。
请注意,默认情况下这是非加密的。
例如,NginX代理传递可以处理对IPFS节点的加密请求,并结合在IPFS配置文件中配置CORS以仅允许某些域访问您的网关。
您可能已经意识到协议实验室本身在gateway.ipfs.io上提供了一个网关,允许任何人从IPFS网络获取内容,例如:https://gateway.ipfs.io/ipfs/ <content_hash> 。这非常适合演示目的,但实际上我们依靠第三方将我们的HTTP接入点托管到IPFS网络中。此接入点可能会遇到停机时间。它可能会变得过载。这是一个单点故障。
可用网关
网上还有其他网关吗?是的 - 像Infura.io这样的服务提供IPFS网关作为服务。这很有用,特别是如果您需要在网络过载的情况下将服务器的流量卸载到其他服务上。但同样,我们受到上述相同的限制。
就个人而言,作为分散网络的乐观主义者,我想要一个互联网,我们不依赖于少数几家公司来管理我们的关键任务终端。与此同时,现实要求集中服务很可能成为当今商业应用的必需品。出于这个原因,从战略上讲,实现分布式解决方案和集中式服务是当今构建应用程序最安全,最可行的方式。随着基础设施的不断发展,一个人的重要性将开始超过另一个人。
在IPFS上
我们现在可以做的是将我们安装的每个 IPFS节点都设置为网关。IPFS节点是客户端和主机; 它们同时托管和提供数据,其过程主要由底层Bitswap协议决定。
本文不是关于底层IPFS协议的技术性讨论; 请参阅白皮书以了解系统如何运作。
让我们转到安装IPFS并配置您的存储库。
安装IPFS
安装IPFS是一个简单的过程。完整的IPFS协议是用Go编写的,因此我们需要的包名为go-ipfs。
注意:在撰写本文时,有一个非常有趣的IPFS版本是用Javascript构建的。这个版本还没有为生产环境做好准备,但是可以在https://github.com/ipfs/js-ipfs上学习,贡献或者只关注它。
选项1:手动安装
运行以下命令在任何Linux操作系统上安装go-ipfs:
cd~
wget https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_linux-amd64.tar.gz
tar xvfz go-ipfs_v0.4.18_linux-amd64.tar.gz
cd go-ipfs
sudo ./install.sh
ipfs帮助
运行上面的代码将下载最新的IPFS包,使用它解压缩tar
然后运行install.sh
以将二进制文件移动到OS路径目录。对于CentOS7,这是/usr/local/bin
。
有关最新的分发,请查看https://dist.ipfs.io/#go-ipfs。您的VPS需要的是Linux Binary amd64构建。
Running ipfs help
将输出CLI选项,验证IPFS是否已正确安装。
选项2:使用ipfs-update安装
我们还可以使用专门为这些任务设计的另一个程序安装和更新IPFS,即ipfs-update
。
在https://dist.ipfs.io/#ipfs-update上找到最新版本。
运行以下命令安装此软件包并安装最新的ipfs版本。
cd~
wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz
tar xvfz ipfs-update_v1.5.2_linux-amd64.tar.gz
cd ipfs-update
sudo ./install.sh
ipfs-update版本
ipfs-update安装最新
安装后,运行会ipfs-update versions
向我们列出可用的版本。ipfs-update install latest
将安装最新的go-ipfs版本。
初始化IPFS
下一步是初始化IPFS存储库:托管IPFS配置和数据存储的目录。数据存储区是我们的节点托管其网络数据份额的位置。初始化存储库会生成特定于节点的密钥对和标识哈希,以及其他数据。
初始化IPFS回购可以使用ipfs init
。这样做会生成带有标准默认配置文件的IPFS 存储库,其值不假定我们在服务器上运行IPFS。
初始化后,此配置文件将保存config
在您的repo根目录中,可供我们在需要时进行修改。
此配置文件确定了很多有关IPFS存储库的信息,包括引导节点,对等列表,数据存储选项,CORS配置等。熟悉配置文件,网址为https://github.com/ipfs/go-ipfs/blob/v0.4.15/docs/config.md
如配置文档顶部所述,我们可以利用--profile
标志ipfs init
来快速设置针对特定环境优化的配置。对于服务器,我们可以使用ipfs init --profile server
。
默认情况下,您的存储库是在~/.ipfs
。这在VPS上不是很灵活,因此我们将存储库设置为存储在已安装的XFS格式化卷上。如果您不希望这样做,请跳到下一部分。
安装块存储卷
如果您希望使用Digital Ocean设置此类音量,请参阅以下页面上的创建和附加音量:
这个过程很简单。请记住将音量附加到Droplet并在继续之前运行Digital Ocean提供的命令。
让我们创建一个.ipfs
在Volume上命名的目录 来托管IPFS repo:
mkdir /mnt/<name_of_your_volume>/.ipfs
IPFS需要知道我们想要在这个位置初始化repo。为此,请将IPFS_PATH
环境变量设置为目录:
export IPFS_PATH = / mnt / <name_of_your_volume> /.ipfs
最后,初始化回购:
ipfs init --profile服务器
您应该获得一个输出以验证包含您的对等身份哈希的成功初始化。在安全的地方记下这个哈希。
此时,您可能希望浏览您的配置文件。您可以这样做:
ipfs配置显示
要么
少/mnt/<name_of_your_volume>/.ipfs/config
ipfs config show
需要设置IPFS_PATH
环境变量,否则将找不到配置。因此,less
在后续的SSH会话中使用可能更实用。
打开所需的防火墙端口
打开以下端口以使IPFS通信正常工作:
sudo firewall-cmd --zone = public --add-port = 4001 / tcp
--permanent sudo firewall-cmd --zone = public --add-port = 8080 / tcp --permanent
sudo systemctl reload firewalld
sudo firewall-cmd --zone = public --permanent --list-ports
我选择使用firewalld作为我的CentOS VPS。重新加载服务后列出您的公共分区端口,以验证它们是否已正确配置。
在后台运行IPFS
在配置我们的IPFS节点的HTTP网关之前,让我们运行它以检查它是否正常工作,然后将该进程附加到Supervisord进程以在后台运行它。
只需运行即可ipfs daemon
打开IPFS节点,只要打开并保持与服务器的连接,它就会在终端窗口中运行。
现在是熟悉守护进程CLI选项的好时机。用它们检查出来ipfs daemon — help
。OPTIONS部分下面有一些非常有用的提示,列出了一些常见的配置选项和需要注意的事项。
运行CLI命令可以更新配置文件,也可以使用您喜欢的编辑器手动打开文件。使用您喜欢的方法。
如果您正在运行守护程序,请按CTRL+C
以立即停止它。
将IPFS守护进程设置为Supervisord进程
接下来,我们将使用Supervisord将IPFS守护程序作为后台进程运行。
如果您不了解Supervisord,一个强大的流程管理员,可以在http://supervisord.org找到相关信息。安装程序最简单的方法是使用pip或easy_install:
easy_install主管
要么
pip安装主管
安装后,使用以下命令创建配置文件:
sudo echo_supervisord_conf> /etc/supervisord.conf
默认情况下,supervisord将在启动时启动; 不需要进一步配置。现在第一次启动supervisord:
sudo supervisord
并在配置文件的底部添加IPFS进程:
sudo vi /etc/supervisord.conf
[program:ipfs]
environment = IPFS_PATH = / mnt / <name_of_volume> /.ipfs
command = ipfs daemon
注意事项environment
。这里我们再次定义IPFS_PATH
环境变量,以便以下ipfs daemon
命令知道repo的位置。
现在,要启动IPFS,请使用supervisorctl CLI重新读取和更新我们的Supervisord进程列表:
sudo supervisorctl reread && sudo supervisorctl update
IPFS现在应该正在运行。检查:
sudo supervisorctl status
此时,我们有一个有效的IPFS节点,为整个网络做出贡献!
但此时您无法直接从节点通过HTTP请求访问内容。需要修改一些配置选项以使其成为可能。我们接下来要做。
在继续之前停止IPFS流程:
sudo supervisorctl stop ipfs
配置IPFS HTTP网关
打开配置文件并更改以下内容:
MaxStorage:默认大小为10GB,但您可以相应地修改此值以适合您的资源。例如,如果您需要,请更改为1GB:
“数据存储区”:{
“StorageMax”:“1GB”
}
存储库越大,节点消耗的CPU和带宽就越多。您可能希望使用系统监视工具来尝试最适合您环境的大小。
更改您的网关地址:
#change this
“Gateway”:“/ ip4 / 127.0.0.1 / tcp / 8080”
#to this
“Gateway”:“/ ip4 / 0.0.0.0 / tcp / 8080”
修改您的网关配置以匹配以下内容:
“HTTPHeaders”:{
“Access-Control-Allow-Headers”:[
“X-Requested-With”,
“Access-Control-Expose-Headers”,
“Range”
],
“Access-Control-Expose-Headers”:[
“Location”,
“Ipfs-Hash”
],
“访问控制允许 - 方法”:[
“POST”,
“GET”
],
“Access-Control-Allow-Origin”:[
“*”
],
“X-Special-Header”:[
“Access-Control-Expose-Headers:Ipfs-Hash”
]
},
“RootRedirect”:“”,
“可写”:true,
“PathPrefixes”:[],
“APICommands”:[]
这里的粗体内容是我从默认配置中修改的内容。
保存这些更改并启动IPFS sudo supervisorctl start ipfs
。现在可以通过HTTP请求访问您的网关。立即尝试 - 尝试使用以下URL在浏览器中加载猫图片:
HTTP:// <your_ip_address>:8080 / IPF问题/ QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ / cat.jpg
如果装满了可爱的小猫,你的网关正在运转。
打开网关并接受HTTP请求后,您现在可以为其他VPS重复此过程。
将节点连接为对等方
实际查看节点所连接的对等端是非常有趣的。在启动守护程序的几秒钟内,您将拥有一个与您的节点通信的大型对等列表。使用以下命令查看它们:
ipfs swarm同行
要将VPS节点作为对等体连接在一起,请对每个节点使用以下命令:
ipfs swarm connect <address>
所需的地址格式是IPFS multiaddr。这是从IPFS文档中获取的示例:
/ ip4 / 104.131.131.82 / tcp / 4001 / ipfs / QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
上面的2个粗体值分别是您的VPS IP地址和对等身份哈希值。
要断开与同级的连接,请使用disconnect命令:
ipfs swarm disconnect <address>
断开与对等体的连接可能只是暂时的 - 如果IPFS需要在将来再次与对等体通信,它确实会再次连接。
请访问https://docs.ipfs.io/reference/api/cli/查看IPFS CLI文档。
结论
此时,您的网络将具有带有网关到系统内容的实时IPFS节点。您已经成功地加强了作为全球单一实体的网络,同时为您提供了进入散列内容的IPFS海洋的能力,所有这些都可供您使用。
本文旨在作为在服务器上使用IPFS的实用介绍。我将来会写更多的见解; 我们刚刚在这里触及了IPFS生态系统的表面。
在这个介绍阶段,有一些事情要考虑改进你的IPFS基础设施:
限制访问节点的域,并设置加密代理传递以处理与IPFS内容的HTTPS连接。考虑一下您的生产应用程序将如何从IPFS获取数据 - 它们将与哪个节点进行通信?
在这里阅读更多关于这些问题的解决方案:
查看其他赞助IPFS的库。Github主页位于https://github.com/ipfs。生态系统很大并且发展迅速 - 熟悉Github正在开发的工作。
Javascript IPFS HTTP客户端是一个有趣的库,允许您直接从Javascript环境与IPFS进行交互。请访问https://github.com/ipfs/js-ipfs-http-client查看。
在IPFS JS上运行的一个有趣的项目是OrbitDB分布式数据库。要熟悉它并开始使用它,请阅读我在包装上的文章:
让我知道你如何利用IPFS!我很想知道您的用例。
本文来源于互联网:IPFS简介:使用HTTP网关在您的网络上运行节点