包管理
与包管理器交互
包管理器 (CLI) 允许您
-
添加受信任的存储库
-
列出存储库中的包
-
安装所需的包
-
将包部署和取消部署到/从集合或集群
-
在有可用更新时更新包
启用包管理器
包管理器默认情况下处于禁用状态。要启用它,请使用 -Denable.packages=true
参数启动所有 Solr 节点。
$ bin/solr start -c -Denable.packages=true
启用包管理器会产生安全后果。如果未经授权的用户获得对系统的访问权限,他们将拥有对 ZooKeeper 的写入权限,并可以从不受信任的来源安装包。在启用包管理器之前,始终确保您已使用防火墙和 配置身份验证和授权 来保护 Solr。 |
添加受信任的存储库
仓库是一个托管一个或多个软件包的位置。通常,这是一个 Web 服务,它提供有关软件包的元信息、用于下载的软件包工件,以及用于在安装时验证 jar 文件签名的公钥。
为了将软件包安装到 Solr 中,必须添加一个托管这些软件包的仓库。
$ bin/solr package add-repo <repository-name> <repository-url>
不要添加你不信任或无法控制的仓库。仅添加基于 HTTPS 的仓库,并避免使用基于 HTTP 的仓库,以防止中间人 (MITM) 攻击。 |
列出和安装软件包
要列出已安装的软件包
$ 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
,则可以跳过确认。
手动部署
也可以通过编辑配置集并重新加载集合来手动部署软件包的集合级别插件。
例如,如果名为 mypackage
的软件包包含一个请求处理程序,我们将像这样将其添加到配置集的 solrconfig.xml
中
<requestHandler name="/myhandler" class="mypackage:full.path.to.MyClass"></requestHandler>
接下来,设置此集合正在使用的软件包版本。如果集合名为 collection1
,软件包名称为 mypackage
,并且已安装的版本为 1.0.0
,则命令如下所示
curl "https://127.0.0.1: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
命令来验证此集合是否正在使用新添加的版本。
安全
应该仅使用启用 HTTPS 的仓库 URL 来执行 add-repo
步骤,以防止 Solr 在获取仓库的公钥时遭受 MITM 攻击。此 add-repo
步骤注册受信任仓库的公钥,因此只能使用可以直接写入软件包存储的受信任存储(软件包存储中的特殊位置,不能使用软件包存储 API 写入)的软件包管理器 (CLI) 执行。此外,保护 ZooKeeper 免受未经授权的写入访问至关重要。
此外,请记住,一旦添加了仓库,就可以从该仓库安装任何软件包。如果你想在生产环境中使用某些软件包,最佳实践是设置你自己的仓库并将其添加到 Solr 中,而不是添加超出你管理控制范围的通用第三方仓库。你可能希望使用你自己的私钥重新签名来自第三方仓库的软件包,并将它们托管在你自己的仓库中。