export JAVA_HOME=/usr/local/java
solr 계정을 만든다.
adduser solr
이 후 작업은 solr 계정으로 전환해서 작업한다.
su - solr
tomcat과 solr데이터 디렉토리는 아래와 같이 진행한다.
– tomcat 디렉토리 : /home/solr/tomcat
– solr 디렉토리 : /search_data/solr (디렉토리권한은 solr로 변경되어 있다고 가정)
tomcat은 7.0.52 버전을 사용했고 solr는 4.7.0을 사용했다.
tomcat과 solr 를 solr 홈디렉토리에 다운로드 후 압축을 풀고 링크를 건다.
wget http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz wget http://mirror.apache-kr.org/lucene/solr/4.7.0/solr-4.7.0.tgz tar xzpvf apache-tomcat-.7.0.52 tar xzpvf solr-4.7.0.tgz ln -sf apache-tomcat-7.0.52 tomcat
vi tomcat/conf/server.xml 파일을 열어서 Connector 부분에 URIEncoding=”UTF-8″ 옵션을 추가한다.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" ></Connector>
solr 웹앱 파일을 tomcat 앱디렉토리에 solr.war 이름으로 복사를 한다.
cp -av solr-4.7.0/dist/solr-4.7.0.war tomcat/webapps/solr.war
solr 폴더의 내용을 /search_data/solr 로 복사한다.
cp -av solr-4.7.0/* /search_data/solr/
이 부분에서 보통 다른 설치문서를 보면 example/solr 디렉토리를 복사하는 것으로 되어 있는데,
그렇게 설치하면 solr 설치디렉토리에 있는 contrib등의 디렉토리에 있는 라이브러리를 못 찾는다는 에러가 뜬다.
solr 웹앱 설정파일을 만든다.
mkdir -p tomcat/conf/Catalina/localhost cd !$ vi solr.xml
<?xml version='1.0' encoding='utf-8'?> <Context crossContext="true" debug="0" docBase="/home/solr/tomcat/webapps/solr" priviledged="true"> <Environment name="solr/home" override="true" type="java.lang.String" value="/search_data/solr" ></Environment> </Context>
여기까지가 검색하면 나오는 설치방법인데, 여기까지 하면 catalina.out에 아래와 같은 에러가 발생한다.
SEVERE: Error filterStart Mar 18, 2014 1:49:04 PM org.apache.catalina.core.StandardContext startInternal SEVERE: Context [/solr] startup failed due to previous errors
왜 에러가 발생하는지 알수가 없는데 알려면
tomcat/webapps/solr/WEB-INF/classes/logging.properties 파일을 만들어서 아래 내용을 추가해준다.
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler
tomcat을 재시작하면 자세한 로그가 나온다.
SEVERE: Exception starting filter SolrRequestFilter java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at org.apache.solr.client.solrj.impl.HttpClientUtil.<clinit>(HttpClientUtil.java:78) at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at java.lang.Class.newInstance(Class.java:374) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:140) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:670) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1839) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569) ... 23 more
slf4j 관련 에러가 나오는데 관련라이브러리와 설정파일을 tomcat에 복사해주면 된다.
cp -av solr-4.7.0/example/lib/ext/* tomcat/lib/ cp -av solr-4.7.0/example/resources/log4j.properties tomcat/lib
log4j.properties 파일을 열어서 solr.log 경로를 수정한다.
solr.log=/home/tomcat/logs/
다시 tomcat을 재시작 후 http://server:8080/solr 로 접속해보면 페이지가 뜨는 것을 확인 할 수 있다.