在很多博客中說(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ò)誤或者類(lèi)似以下的錯(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>
注釋上寫(xiě)的很清楚尸变,要進(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è)類(lèi)扫责,既然是缺少類(lèi),只要找到對(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)鄙俚念?lèi)名很相似哇,因此我將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)校翔,遇到類(lè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í)候晚唇,寫(xiě)成了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)題,早上在寫(xiě)這篇文章的時(shí)候婉商,重新啟動(dòng)Tomcat,重新訪問(wèn)solr渣叛,出現(xiàn)500錯(cuò)誤,日志如下:
暫時(shí)還未找到解決方法淳衙,找到方法后會(huì)補(bǔ)上解決方案挽唉。不過(guò)我重新搭建之后還未重現(xiàn)此問(wèn)題筷狼,如果有大神不幸看到,麻煩您提供下解決方法埂材,先謝謝您!