03.06 技术精选丨如何在IPFS上托管个人网站

您正在阅读的网站可以完全使用,而无需在服务器上运行后端。这样的网站被称为静态网站。


静态网站向浏览器提供所有内容和逻辑(JavaScript)。所有交互(例如搜索或单击内部链接)都是通过包含的JS脚本进行的。虽然这听起来像是一个外行人所期望的,但这与互联网的当前状态相去甚远。


在早期,许多网站仅由静态HTML网站组成。如今,许多现代网站都依赖于运行中的集中式后端服务器。这不仅可以带来动态体验,而且还会导致链接失效,URL的使用寿命有限。许多人至少经历过一次死链接的现象,并且随着互联网的老化,这个问题还会加剧。

技术精选丨如何在IPFS上托管个人网站


内容可寻址存储


最近对互联网进行分布式存储的努力,再次导致了诸如内容可寻址存储之类的技术。


互联网上的普通URL https://lpfann.me/是任意选择的单词,与实际内容无关。


内容寻址使用数学哈希函数将网站的内容压缩为称为hash的短字符串。哈希函数的妙处在于,它们很可能会产生唯一的输出以及这样的唯一地址。


这允许人们仅基于内容哈希即可使用和交换内容的用例。IPFS(星际文件系统)就是这种应用的一个例子 。


技术精选丨如何在IPFS上托管个人网站


IPFS引入了一种用于内容的寻址方案,并且它不使用中央服务器的传输网络进行信息交换。当使用IPFS应用程序的人了解其他节点需要的信息时,它们会自动充当其他节点的服务器。


这样就无需大型中央服务器或内容分发网络,就可实现更强大和分布式的互联网,如果你要使用IPFS托管网站,需要它是静态的。


将网站设为静态


该网站是使用Hugo构建的 ,已经产生了静态输出。启用relativeURL与IPFS寻址一起使用仅是重要的 。


我们还在为雨果使用学术主题。Academic使用多种外部字体和JavaScript资源来增强内容表示。虽然完全有可能托管引用非IPFS资源的IPFS网站,但它并未完全分散。


幸运的是,Academic主题还提供了一个下载工具,可将所有外部资产保存在网站文件夹中。


在撰写本文时,主下载器尚不支持所有资产,但是一个开放的请求增加了对大多数缺失内容的支持。丢失的另一件事是字体,这些字体最初来自我们手动下载的Google字体CDN。


现在,我们有了一个运行在本地字体和JavaScript资产1上的完整网站。这样,您可以下载网站文件并终止Internet连接,您将获得相同的体验。


托管IPFS网站


如果我们使用IPFS对网站进行哈希处理,则会得到如下内容哈希:


/ipfs/QmSPZuY3K1XieH7M9zh4qs9MEGFf4GZdBv3STaiJpBaC6o


现在,其他人可以直接使用自己的IPFS客户端或使用可用的浏览器插件之一来检索网站。

技术精选丨如何在IPFS上托管个人网站

此博客文章的草稿经过散列并固定到本地IPFS节点


为了使其他人能够检索网站的文件,我们必须保持IPFS节点运行或要求其他人对其进行缓存(固定)。


有所谓的固定服务(例如 Pinata)提供此服务。另一个项目是 Filecoin,它建立在IPFS之上。它使用一种区块链来奖励节点以保持IPFS文件固定,从而提供金钱激励。


技术精选丨如何在IPFS上托管个人网站


在过去的几天中,我们寻找了将新内容添加到git存储库时自动固定此网站的方法 。就在昨天, Textile宣布了在IPFS之上工作的动态存储桶。尽管不是博客文章的主要重点,但他们还介绍了新的GitHub Actions,它们将内容自动部署到其免费存储桶托管中。我们在基于Gatsby的演示站点上扩展了 他们的脚本,以与Hugo一起使用。


技术精选丨如何在IPFS上托管个人网站

GitHub Action构建并将文件推送到Textile bucket


现在,在每个推送请求之后,GitHub Action都会编译Hugo输出并将其推送到也固定并与IPFS一起使用的Textile桶。


每次更改并推送到存储库后,我们的网站内容都会自动显示在内容哈希下 。


域名解析


为了让人们知道一个站点可以使用IPFS,可以使用 DNSLinks。这些是附加到DNS域的TXT记录,它们提示可用的IPFS资源。IPFS浏览器扩展可以检测到这些记录,并在访问此类站点时自动使用IPFS进行内容检索。


来自Textile的脚本还包括用于DNS记录的更新程序,该 更新程序将IPFS哈希值发布到Cloudflare DNS服务。每次手动发行后,此脚本都会更新DNSLink。


技术精选丨如何在IPFS上托管个人网站


以太坊名称服务(ENS)


要拥有一个完全分散的解决方案,可以使用ENS之类的技术来替代DNS系统。


我们的网站也可以在ENS域https://pfannschmidt.eth下访问,也可以 通过过渡链接https://pfannschmidt.eth.link/访问,该链接 使用该eth.link服务允许没有ENS支持的浏览器访问该网站。


目前,我们手动更新了存储在ENS中的IPFS哈希,但是将来我们可以使其自动化。


向后兼容


IPFS仍处于初期阶段。大多数流行的浏览器不支持大多数网络用户所必需的协议。


在此之前,还需要使用Web服务器和DNS以传统方式托管网站。可以使用 Cloudflares IPFS网关和DNS解决方案通过普通HTTP自动提供IPFS内容。


目前,此博客由Netlify托管, 以支持未启用IPFS的访问者。


总的来说,这个过程仍然是一件复杂而艰巨的事情。IPFS及其生态系统在稳步改善的同时,仍有许多工作要做。


幸运的是,出现了诸如Terminal.co之类的新服务 ,它们提供了端到端的分布式托管解决方案。


分享到:


相關文章: