在很多博客中說(shuō),solr5.0之后已經(jīng)內(nèi)置了jetty服務(wù)器,不過(guò)我并沒(méi)有去考證,我所用的6.4.2中是已經(jīng)內(nèi)置了jetty服務(wù)器。但是項(xiàng)目中用的是Tomcat,所以本文是針對(duì)發(fā)布到Tomcat上的。
1.準(zhǔn)備工作
- JDK1.8
在官網(wǎng)教程中明確指出了solr運(yùn)行在Java8以上。
- solr6.4.2
- Tomcat8.5.12
這邊需要注意,如果使用7或者更低的版本,在訪問(wèn)solr的時(shí)候會(huì)出現(xiàn)錯(cuò)誤,在某些博客上了解到solr5.5以上必須在Tomcat8以上才能運(yùn)行。我最初發(fā)布在7.6上出現(xiàn)以下錯(cuò)誤:java.lang.NoSuchMethodError:javax.servlet.ServletInputStream.isFinished()Z
2.環(huán)境搭建
- 將
/solr-6.4.2/server/solr-webapp/
下的webapp
文件夾copy到apache-tomcat-8.5.12/webapps/
目錄下,為了方便識(shí)別,最好將webapp
重命名,我這邊命名為solr
。copy完成后的目錄如下:
- 將
solr-6.4.2/server/lib/ext
下所有的jar包c(diǎn)opy到apache-tomcat-8.5.12/webapps/solr/WEB-INF/lib/
目錄下。 - 將
solr-6.4.2/server/resources/
下的log4j.properties
文件copy到apache-tomcat-8.5.12/webapps/solr/WEB-INF/classes/
目錄下,如果不存在classes
文件夾,那么就新建一個(gè)。 - 在
apache-tomcat-8.5.12/webapps/solr/
目錄下創(chuàng)建一個(gè)solrhome
目錄,并且將solr-6.4.2/server/solr/
目錄下的所有文件copy到solrhome
中。 - 修改
apache-tomcat-8.5.12/webapps/solr/WEB-INF/web.xml
,找到如下代碼(在40行左右):
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
放開(kāi)注解,將<env-entry-value>
中的值修改為solrhome的路徑。
此時(shí)基本的配置工作大致完成,接下來(lái)就跑起來(lái),看看效果了。
3.測(cè)試
- 啟動(dòng)Tomcat
我用的是mac pro,所以需要通過(guò)命令來(lái)啟動(dòng)??,在apache-tomcat-8.5.12/bin/
目錄下打開(kāi)終端,輸入命令./startup.sh
,啟動(dòng)成功的話,顯示如下:
Using CATALINA_BASE: /XXX/apache-tomcat-8.5.12
Using CATALINA_HOME: /XXX/apache-tomcat-8.5.12
Using CATALINA_TMPDIR: /XXX/apache-tomcat-8.5.12/temp
Using JRE_HOME: /jdk1.8.0_51.jdk/Contents/Home
Using CLASSPATH: /XXX/Downloads/apache-tomcat-8.5.12/bin/bootstrap.jar:/XXX/Downloads/apache-tomcat-8.5.12/bin/tomcat-juli.jar
Tomcat started.
如果在啟動(dòng)的時(shí)候出現(xiàn)以下錯(cuò)誤或者類似以下的錯(cuò)誤:
-bash: ./startup.sh: Permission denied
Permission denied
表示對(duì)此文件的權(quán)限不夠,這邊執(zhí)行的是startup.sh
文件,說(shuō)明當(dāng)前用戶對(duì)此文件不具備執(zhí)行權(quán)限(x)。既然找到了原因,解決起來(lái)就很方便了,給予此文件足夠的權(quán)限就行了,mac或者linux下可以通過(guò)chmod
命令去設(shè)置權(quán)限,例如:chmod a+x *.sh
??梢酝ㄟ^(guò)ls -l
命令去查看文件的詳細(xì)信息。
這邊不僅僅只有這個(gè)啟動(dòng)文件會(huì)出現(xiàn)權(quán)限的問(wèn)題,比如啟動(dòng)的時(shí)候
tomcat/logs/
下面的文件也有可能出現(xiàn)權(quán)限問(wèn)題。其實(shí)不管什么問(wèn)題,仔細(xì)閱讀終端上的錯(cuò)誤信息,對(duì)癥下藥就好。
順利啟動(dòng)??之后,在瀏覽器上輸入http://loalhost:8080
,就能訪問(wèn)到??的主頁(yè):
可以點(diǎn)擊左邊的的Manager App
按鈕去查看當(dāng)前部署在??下面的web應(yīng)用,需要輸入登錄的帳號(hào)密碼,這個(gè)可以到apache-tomcat-8.5.12/conf/tomcat-users.xml去添加用戶,并給用戶添加相應(yīng)角色
:
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web application.
-->
<!--
NOTE: The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="root" password="root" roles="admin-gui,manager-gui"/>
</tomcat-users>
注釋上寫的很清楚,要進(jìn)入Manager App
就需要manage-gui
具有角色權(quán)限的用戶,具有admin-gui
角色的用戶可以進(jìn)入Host Manager
,暫時(shí)就簡(jiǎn)單這樣理解了,具體的這邊就不去深究了。進(jìn)入到Tomcat Web Application Manager
,效果如下:
- 訪問(wèn)solr首頁(yè)
可以看到solr也已經(jīng)發(fā)布成功,處于 running
狀態(tài)。
如果進(jìn)入此頁(yè)面你發(fā)現(xiàn)solr的running
狀態(tài)是false
,然后點(diǎn)擊Commands
欄目下的start
按鈕,在頂部的Message
欄中出現(xiàn)的信息是:FAIL - Application at context path /solr could not be started
,很明確的告訴我們,solr無(wú)法啟動(dòng),在這邊無(wú)法拿到具體的錯(cuò)誤信息,此時(shí)只能去看Tomcat的日志文件了,找到apache-tomcat-8.5.12/logs/
目錄下的localhost.2017-03-23.log
的日志文件,open一下,找到caused by
,明確告訴我們找不到com.codahale.metrics.MetricSet
這個(gè)類,既然是缺少類,只要找到對(duì)應(yīng)的jar
包就ok了。
那么另一個(gè)問(wèn)題來(lái)了,這個(gè)jar該去哪找呢?別急!在搭建的時(shí)候,solr所需要的jar
是從solr-6.4.2/server/lib/ext
這個(gè)目錄下copy過(guò)來(lái)的,會(huì)不會(huì)漏了呢?再次進(jìn)去看看:
好想并沒(méi)有遺漏,但是仔細(xì)一看發(fā)現(xiàn)跟ext
同級(jí)的目錄下有metrics-xx-xxx.jar
,和我們?nèi)鄙俚念惷芟嗨仆郏虼宋覍?code>metrics-core-3.1.2.jar以及metrics-jvm-3.1.2.jar
這兩個(gè)jar包(經(jīng)過(guò)多次試驗(yàn)才得知需要這兩個(gè)jar)copy到了apache-tomcat-8.5.12/webapps/solr/WEB-INF/lib/
下,重新啟動(dòng)??,再次進(jìn)入 manager App
,發(fā)現(xiàn)solr應(yīng)用已經(jīng)成功發(fā)布,處于running
狀態(tài),遇到類似錯(cuò)誤,還是那句話,查看log,對(duì)癥下藥!
接著訪問(wèn)http://localhost:8080/solr/index.html
,如果出現(xiàn)403 — Foridden
,這個(gè)錯(cuò)誤:
則需要修改
apache-tomcat-8.5.12/webapps/solr/WEB-INF/web.xml
文件,將文件最下面的一段xml代碼注釋掉(這段配置代碼是安全約束配置,拒絕了所有對(duì)于這個(gè)資源的訪問(wèn),大概是這個(gè)意思):刷新瀏覽器,重新訪問(wèn)solr主頁(yè),終于:
到這步,算是搭建成功了,大功告成!(一開(kāi)始創(chuàng)建solr文件夾的時(shí)候,寫成了sorl,結(jié)果導(dǎo)致訪問(wèn)首頁(yè)時(shí),不顯示versions這些基本信息)
4. 后序
整個(gè)搭建過(guò)程,真心覺(jué)得十分坎坷,渣渣如我,就是因?yàn)橛龅竭@么多的問(wèn)題,才準(zhǔn)備記錄下來(lái),便于自己查看也希望可以給他人帶來(lái)一定的幫助。我相信還會(huì)有更多的坑在等著我,沒(méi)有辦法,只能接著干了!
其實(shí)還遇到一個(gè)問(wèn)題,早上在寫這篇文章的時(shí)候,重新啟動(dòng)Tomcat,重新訪問(wèn)solr,出現(xiàn)500錯(cuò)誤,日志如下:
暫時(shí)還未找到解決方法,找到方法后會(huì)補(bǔ)上解決方案。不過(guò)我重新搭建之后還未重現(xiàn)此問(wèn)題,如果有大神不幸看到,麻煩您提供下解決方法,先謝謝您!