使用Elasticsearch的静态站点

2020-05-03 03:12:30

静态站点是最好的。它们是最安全、最快的网站。它们非常适合匿名用户,你会希望内容编辑有一个安全和隐藏的后端,他们可以在那里管理内容-但内容可以在其他地方提供。

在此基础上进行搜索可能会更具挑战性。对于像lunr.js这样的本地搜索(以及与之集成的Drupal模块),有不同的解决方案,但这是相当有限的。也就是说,它将创建一个本地索引,在那里您可以让一些JS来查看它,但这无法与成熟的搜索引擎(如Elasticsearch)相匹敌。

在这篇博客文章中,我将与大家分享我们建立的一个演示网站,作为一个大得多的网站的概念证明。我不打算详述静态站点的优势,而是要与大家分享指导我们的高级概念,以及一些技术提示。虽然具体的细节与Drupal无关--我们的客户站点在Drupal中,因此围绕它进行构建非常方便。但是你真的可以用任何一种语言做到这一点。

使用静态站点,部署和恢复部署很容易。如果出了什么差错,这不过是git推送或git恢复而已。但是搜索怎么办呢?正如我们已经提到的,我们希望继续使用Elasticsearch来搜索聚合(也就是。方面)、拼写检查等。但是,我们如何支持,例如,在部署中回滚-确保搜索始终只通过部署的静态站点中存在的内容进行搜索。谢天谢地,Elasticsearch支持索引克隆,所以我们.。

默认索引是Drupal将连接到的索引,它将是aread和write。也就是说,您可以将其视为一个“主”索引,将从该索引中获取快照。

当我们想要创建一个新的静态站点时,我们还会创建默认索引的克隆。这将是一个只读索引。

我们负责调用Elasticsearch的JS应用程序应该知道只读索引的名称。因此,如果我们将部署回滚到以前的版本,JS代码将连接到正确的索引。

简单介绍一下Elasticsearch实例及其对外公开情况。就像我们将Drupal放在后端,远离公众视线一样,我们也可以用Elasticsearch做同样的事情。例如,当我们在Google Cloud上托管Elasticsearch实例时,我们可以使用负载均衡器来提供一个面向公众的SSLed URL-反过来,它将使用所需的任何类型的防火墙规则调用Elasticsearch,例如防止任何管理员类型的请求访问该实例,或者阻止任何请求.。

实际上,我们开始研究Tome,这是一个允许将Drupal站点导入静态站点的Drupal模块。虽然它工作得很好,而且我确信使用它会有好处,但我认为在我们的情况下,并没有真正需要Drupal本身来提供导出。我们也可以使用其他开源工具,它们已经存在好几年了。

然后开始了一场比预期更长的试验,并对HTTrack和wget进行了比较。虽然我们最终还是没有去,但分享一些我们的经验是值得的。首先,我们尝试了HTTrack,我们已经用它来帮助我们将一些老网站移到静态状态,它做得很好。令人惊叹的凯伦·史蒂文森(Karen Stevenson)也就此写了一篇很棒的帖子,内容更详细。HTTrack给我的印象是,对于一个拥有看起来像看起来一样过时的Asite的工具来说,它工作得出奇地好。..。

我们从一开始就做了一件重要的事情,那就是以realclient站点为例。这立即体现了最大的挑战-快速出口不稳定的网站。通常情况下,当存档一些站点时,导出甚至需要一个小时也是完全可以的。但如果我们考虑的是一个实时网站,它会随着后台内容的改变而定期更新--必须等待这么长的时间是有问题的。

这就是我们在HTTrack和wget之间来回跳跃的地方。让我们来看看我们得到的结果。我将隐藏真实的URL,这样您就不会像我们那样滥用我们客户的网站!:)。

37分钟可保存约450 MB的内容(HTML以及所有资产、图像和文件)。

那次尝试是在我本地的电脑上进行的。所以我们旋转了一个Google Cloud实例,看看从一个有更强大的互联网连接的服务器执行这个实例是否会快得多--但它不是。

因此,我们决定排除所有用户生成的文件(图像、PDF等)。其想法是,文件将被上传到某些存储服务,如AWS或Google Cloud,并从那里提供服务。也就是说,当内容编辑器在Drupal中上传新文件时,它将“远程”保存,而不是将其保存在服务器上。

这样做节省了相当多的时间,使我们的120MB内存减少到了20分钟。

然后我们检查是否可以增加并发连接的数量。HTTrack有几个选项,特别是名称可怕的--禁用-安全限制,它应该允许我们轻松地对我们自己的站点进行DDOS,或者通过设置conne的特定计数来实现