包管理
与包管理器交互
包管理器 (CLI) 允许您
-
添加受信任的存储库
-
列出存储库中的包
-
安装所需的包
-
将包部署到集合或集群,或从集合或集群中取消部署包
-
在有更新时更新包
启用包管理器
包管理器默认情况下处于禁用状态。要启用它,请使用 -Denable.packages=true
参数启动所有 Solr 节点。
$ bin/solr -c -Denable.packages=true
启用包管理器会产生安全后果。如果未经授权的用户获得了对系统的访问权限,他们将拥有对 ZooKeeper 的写访问权限,并且可以从不受信任的来源安装包。在启用包管理器之前,请务必确保已使用防火墙和 配置身份验证和授权 保护 Solr。 |
添加受信任的存储库
存储库是托管一个或多个包的位置。通常,这是一个 Web 服务,它提供有关包的元信息、用于下载的包工件以及用于在安装时验证 jar 文件签名的公钥。
要将包安装到 Solr 中,必须添加一个托管这些包的存储库。
$ bin/solr package add-repo <repository-name> <repository-url>
不要添加您不信任或无法控制的存储库。为了防止 MITM 攻击,只添加基于 HTTPS 的存储库,避免添加基于 HTTP 的存储库。 |
列出和安装包
要列出已安装的包
$ bin/solr package list-installed
要列出可从已添加存储库安装的包
$ bin/solr package list-available
要安装包,请将工件从存储库复制到 Solr 的内部包存储中,并为该包设置类加载器以供使用
$ bin/solr package install <package-name>[:<version>]
部署包
安装包后,其中包含的插件可以在集合或集群级别使用。
有两种方法可以执行此操作:使用 CLI 的 deploy
命令或手动执行。
deploy 命令
如果软件包作者声明支持它,则可以使用 CLI 的 deploy
命令部署软件包。
$ bin/solr package deploy <package-name>:[version] -collections <collection1>[,<collection2>,...] [-p <param1>=<val1> -p <param2>=<val2> ...
或
$ bin/solr package deploy <package-name>:[version] -cluster
如果软件包接受其设置命令的参数,则可以指定它们(根据软件包文档)
$ bin/solr package deploy <snipped...> -p <param1>=<val1> -p <param2>=<val2>
作者可能希望您通过提示确认软件包的部署。如果您将 -y
传递给命令,则可以跳过确认。
手动部署
还可以通过编辑 configset 并重新加载集合来手动部署软件包的集合级别插件。
例如,如果名为 mypackage
的软件包包含请求处理程序,我们将像这样将其添加到 configset 的 solrconfig.xml
中
<requestHandler name="/myhandler" class="mypackage:full.path.to.MyClass"></requestHandler>
接下来,设置此集合正在使用的软件包版本。如果集合名为 collection1
,软件包名为 mypackage
,已安装版本为 1.0.0
,则命令将如下所示
curl "http://localhost:8983/api/collections/collection1/config/params" \
-H 'Content-type:application/json' -d "{set: {PKG_VERSIONS: {mypackage: '1.0.0'}}}"
有关手动安装群集级别插件,请参阅 群集级别请求处理程序。
更新软件包
为了更新软件包,第一步是确保更新版本在添加的存储库中可用,方法是在 列出和安装软件包 中运行上面显示的 list-available
命令。
接下来,从存储库安装软件包的新版本。
$ bin/solr package install <package-name>:<version>
安装新版本后,可以选择更新每个集合或群集级别插件。假设软件包 mypackage
的旧版本是 1.0.0
,新版本是 2.0.0
,则命令如下
$ bin/solr package deploy mypackage:2.0.0 --update -collections mycollection
或
$ bin/solr package deploy mypackage:2.0.0 --update -cluster
您可以运行 list-deployed
命令来验证此集合是否正在使用新添加的版本。
安全性
add-repo
步骤应仅使用启用了 HTTPS 的存储库 URL 执行,以防止在 Solr 获取存储库的公钥时遭受 MITM 攻击。此 add-repo
步骤会注册受信任存储库的公钥,因此只能使用具有直接写入权限的软件包管理器 (CLI) 执行,该权限可直接写入软件包存储区的受信任存储(软件包存储区中的一个特殊位置,无法使用软件包存储区 API 写入)。此外,保护 ZooKeeper 免受未经授权的写入访问至关重要。
此外,请记住,一旦添加存储库,就可以从该存储库安装任何软件包。如果您希望在生产环境中使用某些软件包,最佳做法是设置自己的存储库,并将其添加到 Solr 中,而不是添加不受您管理控制的通用第三方存储库。您可能希望使用自己的私钥重新签署第三方存储库中的软件包,并将它们托管在您自己的存储库中。