在很多博客中说,solr5.0之后已经内置了jetty服务器,不过我并没有去考证,我所用的6.4.2中是已经内置了jetty服务器。但是项目中用的是Tomcat,所以本文是针对发布到Tomcat上的。
1.准备工作
- JDK1.8
在官网教程中明确指出了solr运行在Java8以上。
- solr6.4.2
- Tomcat8.5.12
这边需要注意,如果使用7或者更低的版本,在访问solr的时候会出现错误,在某些博客上了解到solr5.5以上必须在Tomcat8以上才能运行。我最初发布在7.6上出现以下错误:java.lang.NoSuchMethodError:javax.servlet.ServletInputStream.isFinished()Z
2.环境搭建
- 将
/solr-6.4.2/server/solr-webapp/
下的webapp
文件夹copy到apache-tomcat-8.5.12/webapps/
目录下,为了方便识别,最好将webapp
重命名,我这边命名为solr
。copy完成后的目录如下:
- 将
solr-6.4.2/server/lib/ext
下所有的jar包copy到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
文件夹,那么就新建一个。 - 在
apache-tomcat-8.5.12/webapps/solr/
目录下创建一个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>
放开注解,将<env-entry-value>
中的值修改为solrhome的路径。
此时基本的配置工作大致完成,接下来就跑起来,看看效果了。
3.测试
- 启动Tomcat
我用的是mac pro,所以需要通过命令来启动🐱,在apache-tomcat-8.5.12/bin/
目录下打开终端,输入命令./startup.sh
,启动成功的话,显示如下:
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.
如果在启动的时候出现以下错误或者类似以下的错误:
-bash: ./startup.sh: Permission denied
Permission denied
表示对此文件的权限不够,这边执行的是startup.sh
文件,说明当前用户对此文件不具备执行权限(x)。既然找到了原因,解决起来就很方便了,给予此文件足够的权限就行了,mac或者linux下可以通过chmod
命令去设置权限,例如:chmod a+x *.sh
。可以通过ls -l
命令去查看文件的详细信息。
这边不仅仅只有这个启动文件会出现权限的问题,比如启动的时候
tomcat/logs/
下面的文件也有可能出现权限问题。其实不管什么问题,仔细阅读终端上的错误信息,对症下药就好。
顺利启动🐱之后,在浏览器上输入http://loalhost:8080
,就能访问到🐱的主页:
可以点击左边的的Manager App
按钮去查看当前部署在🐱下面的web应用,需要输入登录的帐号密码,这个可以到apache-tomcat-8.5.12/conf/tomcat-users.xml去添加用户,并给用户添加相应角色
:
<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>
注释上写的很清楚,要进入Manager App
就需要manage-gui
具有角色权限的用户,具有admin-gui
角色的用户可以进入Host Manager
,暂时就简单这样理解了,具体的这边就不去深究了。进入到Tomcat Web Application Manager
,效果如下:
- 访问solr首页
可以看到solr也已经发布成功,处于 running
状态。
如果进入此页面你发现solr的running
状态是false
,然后点击Commands
栏目下的start
按钮,在顶部的Message
栏中出现的信息是:FAIL - Application at context path /solr could not be started
,很明确的告诉我们,solr无法启动,在这边无法拿到具体的错误信息,此时只能去看Tomcat的日志文件了,找到apache-tomcat-8.5.12/logs/
目录下的localhost.2017-03-23.log
的日志文件,open一下,找到caused by
,明确告诉我们找不到com.codahale.metrics.MetricSet
这个类,既然是缺少类,只要找到对应的jar
包就ok了。
那么另一个问题来了,这个jar该去哪找呢?别急!在搭建的时候,solr所需要的jar
是从solr-6.4.2/server/lib/ext
这个目录下copy过来的,会不会漏了呢?再次进去看看:
好想并没有遗漏,但是仔细一看发现跟ext
同级的目录下有metrics-xx-xxx.jar
,和我们缺少的类名很相似哇,因此我将metrics-core-3.1.2.jar
以及metrics-jvm-3.1.2.jar
这两个jar包(经过多次试验才得知需要这两个jar)copy到了apache-tomcat-8.5.12/webapps/solr/WEB-INF/lib/
下,重新启动🐱,再次进入 manager App
,发现solr应用已经成功发布,处于running
状态,遇到类似错误,还是那句话,查看log,对症下药!
接着访问http://localhost:8080/solr/index.html
,如果出现403 — Foridden
,这个错误:
则需要修改
apache-tomcat-8.5.12/webapps/solr/WEB-INF/web.xml
文件,将文件最下面的一段xml代码注释掉(这段配置代码是安全约束配置,拒绝了所有对于这个资源的访问,大概是这个意思):刷新浏览器,重新访问solr主页,终于:
到这步,算是搭建成功了,大功告成!(一开始创建solr文件夹的时候,写成了sorl,结果导致访问首页时,不显示versions这些基本信息)
4. 后序
整个搭建过程,真心觉得十分坎坷,渣渣如我,就是因为遇到这么多的问题,才准备记录下来,便于自己查看也希望可以给他人带来一定的帮助。我相信还会有更多的坑在等着我,没有办法,只能接着干了!
其实还遇到一个问题,早上在写这篇文章的时候,重新启动Tomcat,重新访问solr,出现500错误,日志如下:
暂时还未找到解决方法,找到方法后会补上解决方案。不过我重新搭建之后还未重现此问题,如果有大神不幸看到,麻烦您提供下解决方法,先谢谢您!