服务器上的IPFS。通过笔记本电脑托管网站



我经常需要发布静态页面或网站,以及具有Web表单或布局的演示。每次都像Jsfiddle这样的地方倒并不总是很方便,并且在localhost中编辑静态内容会更快,更愉快。当我需要某人展示我的作品,或者只是通过电话打开同一页面时,问题就开始了。我们必须托管所有这些无穷无尽的工作选项和草图,对于每个再次上传的文件,请使用螺丝虚拟主机。

使用IPFS,您可以直接从笔记本电脑在Internet上托管站点,本地文件的所有更新都将立即应用到Internet上,而无需将其上传到某个地方。当笔记本电脑与网络断开连接时,该站点仍然可用。IPFS就像Bittorrent一样,仅用于网络。

在本文中,我们将在服务器上部署IPFS节点,并在实践中尝试该技术。

什么是IPFS?


IPFS是一个大型的分散式p2p网络,用作文件共享服务,Web存档Bittorrent替代。在真实的项目中使用IPFS的所有很酷的示例都可以在awesome.ipfs.io官方网站的名人堂中找到

简而言之,它是这样工作的:存储的文件获得其多现金,并被分为多个块,这些块散布在所有感兴趣的节点上。DHT在节点上同步;下载文件时,将从不同(理论上是最近的)节点上收集块。此外,要访问文件或目录,无需提升节点,它们都可以从浏览器访问,这使我们获得了流行的功能:您可以免费在IPFS上托管站点。但是只有静态数据每隔几分钟更新一次以上的数据是不方便的,因为相同的哈希会形成链接,并且每次更改文件时都会更改(存在永久IPNS名称系统,但是速度很慢)。但是,这并不能阻止Orbitdb的帅哥将数据库刷新到IPFS,但是有些细微差别。在此处阅读有关网络设备的更多信息


假设我有一个免费分发静态站点的节点,我自己去找它们,有时还带我的同事去看。数据总量仅受磁盘大小限制,以及家庭Internet的下载速度,还有什么更好的选择?但是有很多问题。首先,IPFS本身需要大量的Internet和坚实的处理器,即使没有流量,它也始终会占用DHT同步的一部分资源。其次,我主要使用笔记本电脑并把所有文件保存在笔记本电脑上,因此,我手边有自制的半千兆光纤远非总是如此。 IPFS的短暂中断不是问题,它可以将高速缓存保留在DHT中几个小时,但是要花费几天的时间,现在您的所有项目都可以从网络中愉快地溢出。您可以在台式机上踩踏(“记住”)文件,但这至少会使流量增加一倍,这也不是常事。该怎么办?我试图提高服务器上的节点来卸载笔记本电脑,但仍然需要手动加载文件,就像在常规主机上一样。最后,我抽了码头和API,并编写了一个简单的实用程序将本地静态信息与服务器同步。



IPFS有两个单独的实现:go-ipfs和js-ipfs。JS离我更近,所以我在上面写了。我希望该实用程序能够在我的站点上拾取文件夹,并在我工作时定期将其上传到网络。服务器端应捕获文件夹的哈希并将其踢开,以使文件不会丢失。

安装和启动


npm install ipfs -g

Js-ipfs有一个非常详细的示例教程,因此:

git clone https://github.com/ipfs/js-ipfs.git
cd js-ipfs
npm install
npm run build

该节点分几行运行:

const IPFS = require('ipfs')
async function main () {
  const node = await IPFS.create()
}
main()

它的配置和种子在此处注册,但这足以启动。

我们编写功能


接下来,您需要将文件传输到节点并将其上传到IPFS。为此,请node.add{ recursive: true }文件夹选项一起使用。该地址可以在启动时在参数中传递,并通过命令保存。重要的是仅记录最后一个哈希-它来自根文件夹:



整个文件夹已成功进入网络。该站点将通过链接打开,并且可以在IPFS Webmord上检查文件夹本身:



接下来,为了方便保存,我通过以下方式在IPNS中添加了保存的版本号和发布内容:node.name.publish。但是手动保存很无聊!我希望能够像看到本地主机中的更改一样快地观看更新的站点,这意味着更新应该自动进行。而且,如果我突然忘记保存某些内容,请关闭笔记本电脑并回家,当前版本将不仅保存在编辑器中,而且还保存在网络中。默认情况下,我们将每10分钟进行一次自动保存,并可以更改不同工作率的时间间隔。顺便说一句,如果自上次保存以来文件没有更改,则哈希也不会更改。



很酷,但是到目前为止,我们正在分发本地计算机上的所有文件。现在该连接服务器节点了!我们使用实验性的pubsub,从启动时的参数中获取主题,然后尝试传递保存哈希:



Hurray!小事情是让服务器存储所有收到的哈希并踢它们(node.pin.add),并教客户在不需要节点时削减其节点(node.stop)。


这是服务器节点上的下载列表

结果是什么?


  • 当我坐下来编写代码时,它会自动保存在IPFS中
  • 所有版本始终可以通过个人链接/ ipfs / Qm获得。
  • 我可以在IPNS中发布站点,以便不向客户端发送一堆链接
  • 本地节点仅唤醒以上传文件并与服务器联系,然后就睡着了
  • 在本地,我只有该站点的一个副本,单次下载新版本的流量远少于IPFS节点的后台流量
  • 我终于可以在本地主机上工作而不必担心版本控制

所有这些幸福使我付出了最便宜的VPS的价格,同时有足够的资源并且应该在未来一年的其他地方足够,之后可以购买另一台服务器或将旧服务器存档。

通常,使用IPFS,您可以做更多有趣的事情。我绝对想让这个实用程序记起来,并用gooey编写一个新的实用程序。在此期间,保持网站,我们撰写和主持这一切的时候:

https://ipfs.slipner.ru/ -与域
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
的https:// GT / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / -通过官网进行IPNS

具有IPFS支持的Opera浏览器




就在几天前, Opera Software推出了第一个具有本机IPFS支持的浏览器。但是,到目前为止,仅适用于Android的移动版本。这意味着它可以直接访问IPFS网络,而无需Web网关!我们正在等待将支持添加到桌面版本。




All Articles