教程 在浏览器中实现IPFS连接的指引( 三 )


 
为了实践这个例子 , 你还需要在架设自己的go-ipfs(https://github.com/ipfs/go-ipfs) 节点的服务器上做一些事情 。你还需要一个可用的Nginx安装配置 , 它将会被SSl证书使用 , 这个证书是浏览器所需要的 。
 
首先配置Go节点 , 启用WebSocket(https://en.wikipedia.org/wiki/WebSocket) 支持 , 然后通过编辑~/.ipfs/config并添加以下的设置来将其指定为一个中继 , 这样就可以从浏览器里与其通讯了:

教程 在浏览器中实现IPFS连接的指引

文章插图
 
以自己习惯的方式重启go-ipfs节点 (可能是systemctl --user restart ipfs命令) , 这样就差不多就绪了 。我们已经启用了支持中继的常规WebSockets接口 , 不过还需要安全的WebSockets接口配置(在下面的SSL章节有介绍) , 否则浏览器就无法与我们连接 。
 
公告
 
使用p2p-circuit可能会有点麻烦 。当我们从浏览器连接到中继时 , 我们并不会向网络公告自己将会通过中继接受连接 。为实现这个目的 , 我创建了go-ipfs一起使用的Python脚本 , 它可以通过p2p-circuit multiaddress(https://docs.libp2p.io/concepts/addressing/)以PubSub(https://docs.libp2p.io/concepts/publish-subscribe/)来公告其发现的浏览器`js-ipfs`节点 。
 
你可以在这里(https://gist.github.com/TheDiscordian/51962fea72f8d5a5c3bba79dd7009e1c) 找到该Python脚本 , 运行方式可以是python ipfs_peeradvertiser.py命令 。不过 , 确保你先以自己的节点信息编辑CIRCUIT , 否则就无法正确地公告这些节点 , 这些节点也无法知道如何使用你的中继连接到其他节点 。
 
你可以简单地获取自己的信息 。在你的go-ipfs节点上运行ipfs id命令获得你的PeerID标识 , 然后以下面的方式构造回路URL地址:
OMAIN.COM这样的配置更改成你实际想用在服务上的完整域名(包含子域名) 。
教程 在浏览器中实现IPFS连接的指引

文章插图
 
可以看到 , 这里只要填入你拥有SSL证书的域名地址 , 以及自己节点的PeerID标识 。在脚本里 , 前面的斜杠和后面的斜杠都是需要填入的 。
 
?? 注意 ??
 
根据你的地址类型(IPv4或IPv6) , 确保你指定了对应的DNS6或DNS4域名解释服务 。使用DNS解析服务是很重要的 , 否则浏览器节点很可能无法连接 。同样要关注4430端口 , 如果你使用了另一个端口 , 就需要进行指定 。
 
SSL证书 (Nginx服务)
 
现在我们在没有SSL证书的情况下设置了WebRTC-Star和 p2p-circuit(除非你使用了 WebRTC-Star的docker容器方案) 。如果你想在互联网上通过浏览器使用节点 , 就需要支持SSL证书 。如果你使用了当前的默认配置 , 那么WebRTC-Star应该是在9090端口(非SSL)上运行 , 而p2p-circuit应该会在4011端口(非SSL)上运行 。我们将会把这些端口各自指向给9091端口(SSL)和4430端口(SSL) 。
 
首先确保Nginx服务安装好了 , 然后获取并安装Certbot证书机器人(https://certbot.eff.org/docs/install.html) 。
 
我们将从下面的模板创建两个文件 。确保你将类似YOURDOMAIN.COM这样的配置更改成你实际想用在服务上的完整域名(包含子域名) 。
教程 在浏览器中实现IPFS连接的指引

文章插图
 
在这个例子中 , 你可以看到我们在4430端口上接受SSL连接 , 这就是我们的 "wss端口" (安全的WebSocket端口)  , 然后转发到本地的4011非安全端口(即我们的ws端口) 。因此如果我们想通过浏览器连接到这个节点 , 就使用4430端口 。
 
然后 , 运行以下命令:
教程 在浏览器中实现IPFS连接的指引

文章插图
 
现在Nginx服务已作为反向代理运行 , 为你提供安全的WebSockets端口了 。
 
通讯
 
哇!你已经有这么多进展了 , 可能会想通讯是什么样子的?幸运的是 , 相比于节点发现 , 通讯是非常简单的 , 只是可能会有一点小坑 。我们将简单介绍如何在聊天的例子中使用PubSub(https://docs.libp2p.io/concepts/publish-subscribe/) 并在此过程中发现的一些坑 。
 


推荐阅读