这是一个去中心博客的实践,代表了当前最新的去中心化Web技术。
博客使用Livid的Planet构建,他会自动生成静态页面,自动推送到本机的IPFS客户端,生成IPNS域名。此时如果你通过支持IPNS的浏览器,例如Brave,可以直接点对点(p2p)访问到该页面。
当然,这需要我的电脑24h在线,这还不够。
通过filebase.com等第三方服务,他能够自动"Pin"住我的博客,在他们的服务器上缓存一份同样的副本(当然也是得益于IPFS协议)。这样一来博客便24h在线了。我的本机、第三方Pin服务、访问过博客的IPFS客户端,都会缓存一份副本,他们都可以对外响应请求,永远在线。
IPNS是一串难记的随机字符串,这时我需要一个"域名"服务。可以选择ENS,例如xxx.eth,但是很少浏览器支持。一个更"兼容"中心化世界的办法是,直接使用DNS,例如onput.xyz。
IPFS协议提供了一个叫DNSLink的功能,按照格式在DNS域名的基础上配置一条TXT记录,IPFS同样可以解析到。例如这样:
dig +noall +answer TXT \_dnslink.docs.ipfs.tech
> \_dnslink.docs.ipfs.tech. 30 IN TXT "dnslink=/ipfs/bafybeieenxnjdjm7vbr5zdwemaun4sw4iy7h4imlvvl433q6gzjg6awdpq"
我在配置完成onput.xyz域名的TXT记录之后,在支持IPFS的浏览器上就可以访问ipns://onput.xyz,这样就有好记的域名了。
注意,这里的协议头是ipns://。那如果使用不支持IPFS的浏览器呢?我们需要一个兼容中心化世界的办法。
Cloudflare和很多其他组织提供了公共的IPFS网关,可以帮助用户访问IPFS内容。
dweb.link就是一个IPFS网关,在onput.xyz域名上设置CNAME记录指向dweb.link,在浏览器打开https://onput.xyz ,就已经可以访问到了。这样一来便兼容了所有的浏览器。
不一定要用dweb.link,你可以选择自己喜欢的公共网关,可以在这里查询到:https://ipfs.github.io/public-gateway-checker/
完成上述操作后,用户访问可以分为三种情况:
- 当使用Brave访问ipns://onput.xyz ,完全由IPFS协议提供服务,完全的去中心P2P网络。
- 当使用Brave访问https://onput.xyz ,此时会经过公共网关。Brave会提示用户该网页提供了IPFS访问,点击之后会自动切换到IPFS,同1。
- 当使用Chrome访问https://onput.xyz ,由公共网关提供服务,最大程度兼容普通浏览器。
我们最终得到了什么呢:
- 一个永不宕机的博客
- 不强依赖任何第三方服务,私钥掌握在自己手里
- 同时兼顾去中心化浏览器(Brave等)、传统浏览器(Chrome等)
那么,通往完全的去中心化还缺少了什么:
为了兼容传统浏览器,不得不使用DNS这个中心化协议,不得不使用中心化的网关。未来如果浏览器都像Brave一样支持IPFS、ENS,这个问题相信也可以得到解决。让我们保持期待。