Установка solr 4.x через tomcat7 на CentOS 6 с http авторизацией

Надо сказать, что способ установки через tomcat6, я не рекомендую! Дело в том, что версия, который идёт из репозитория updates имеет номер 6.0.24, которая подвержена уязвимости в безопасности CVE-2011-3190. Да и вообще хорошо же работать с версиями новее ;-)

Итак:
Установим java 7. Уже хватит сидеть на древней шестёрке:
yum install java-1.7.0-openjdk
Проверим, что всё нормально:
java -version

Spoiler: Highlight to view

java version "1.7.0_55"
OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

Теперь установим tomcat:
yum install tomcat tomcat-admin-webapps tomcat-webapps tomcat-lib apache-tomcat-apis tomcat-native

Проверим:
tomcat version

Spoiler: Highlight to view

Server version: Apache Tomcat/7.0.33
Server built:   Apr 30 2014 09:16:58
Server number:  7.0.33.0
OS Name:        Linux
OS Version:     2.6.32-042stab090.4
Architecture:   amd64
JVM Version:    1.7.0_55-mockbuild_2014_04_16_12_11-b00
JVM Vendor:     Oracle Corporation

Добавим tomcat в автозагрузку ОС и включим его:
chkconfig tomcat on && /etc/init.d/tomcat start

Теперь уже можно проверить, что он завёлся. Идём на http://your_ip.com:8080

Переходим к установке solr
Идём по ссылке и смотрим последнюю версию:
http://apache-mirror.rbc.ru/pub/apache/lucene/solr/

На момент написания была 4.4. Скачиваем её и распаковываем:
wget http://archive.apache.org/dist/lucene/solr/4.4.0/solr-4.4.0.tgz && tar -xzf solr-4.4.0.tgz

Копируем файлы solr. Рекомендую сразу устанавливать всё в режиме "multicore" - это когда solr умеет различать отдельные инстансы для, например, разных сайтов. Мне удобнее, чтобы ядра располагались по адресу /var/solr, но Вы можете выбрать любую другую директорию:

mkdir /var/solr/
cp -Ra solr-4.4.0/example/multicore/* /var/solr/

Да, именно! Нам не нужна вся папка! Только эти файлы.

Далее нужно скопировать solr-4.4.0/dist/solr-4.4.0.war в папку /usr/share/tomcat/webapps/. Это можно сделать либо просто переместив файл, тогда tomcat сразу же сам разархивирует файл и создаст папку solr-4.4.0. Нужно её переименовать... в общем, мне так не удобно. Пойдём другим путём:
unzip solr-4.4.0/dist/solr-4.4.0.war -d /usr/share/tomcat/webapps/solr

И ещё нужно скачать библиотеки и, до кучи, дадим tomcat'у на всё права:

cp -Ra solr-4.4.0/dist/solrj-lib/* /usr/share/java/tomcat/
chown -R tomcat.tomcat /usr/share/java/tomcat/ /usr/share/tomcat/ /var/solr

Теперь... редактируем файл /var/lib/tomcat/webapps/solr/WEB-INF/web.xml:
nano /var/lib/tomcat/webapps/solr/WEB-INF/web.xml
Находим секцию env-entry и меняем в ней, на самом деле, одну строку, где написано put/your/solr/...чё-то-там, но я приведу вид вей секции:

<env-entry>
  <env-entry-name>solr/home</env-entry-name>
  <env-entry-value>/var/solr</env-entry-value>
  <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

Это не всё. Для http авторизации в solr необходимо в этот же файл добавить строчки в любое место между < web-app >< /web-app >. Предлагаю как раз в самый конец перед последней строкой < /web-app >

<security-constraint>
    <web-resource-collection>
      <web-resource-name>Solr Lockdown</web-resource-name>
      <url-pattern>/</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>solr-role</role-name>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Solr</realm-name>
  </login-config>

Теперь отредактируем файл /etc/tomcat/tomcat-users.xml:
nano /etc/tomcat/tomcat-users.xml
Сделаем отдельную учётную запись для администратора и для пользователя solr. Без комментированных пояснений в файле остаётся следующее:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="solr-role" />
<user username="admin" password="admin_password" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />
<user username="solr" password="solr_password" roles="solr-role" />
</tomcat-users>

Вроде, всё. Перезапускаем tomcat:
/etc/init.d/tomcat restart

Проверяем, что теперь solr доступен по http://your_ip.com:8080/solr с запросом http авторизации.

Комментарии

После шага chkconfig tomcat6 on && /etc/init.d/tomcat6 start получаю [root@qwerty init.d]# chkconfig tomcat6 on && /etc/init.d/tomcat6 start
Starting tomcat6: [СБОЙ ]

Очень странно, что такое в самом начале. Нужно посмотреть, что пишется в логах tomcat'а. Уверен, всё стает понятно. Возможно, у Вас просто занят порт 8080, на котором tomcat поднимается по умолчанию. Покажите вывод:
tail -30 /var/log/tomcat6/catalina.out

 tail -30 /var/log/tomcat6/catalina.out
SEVERE: StandardServer.await: create[8005]:
java.net.BindException: Адрес уже используется
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
        at java.net.ServerSocket.bind(ServerSocket.java:376)
        at java.net.ServerSocket.<init>(ServerSocket.java:237)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:406)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:676)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:628)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
 
фев 13, 2014 8:03:29 PM org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
фев 13, 2014 8:03:30 PM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
фев 13, 2014 8:03:30 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
This account is currently not available.
фев 13, 2014 8:08:02 PM org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
фев 13, 2014 8:08:03 PM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
фев 13, 2014 8:08:03 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
This account is currently not available.

Причем tomcat6 start запускает Томкат, мой_ип:8080 доступен

Надо посмотреть по умолчанию, если не ошибаюсь, он запускается не на <Ваш_IP>, а на всех, т.е. 0.0.0.0.
Так же надо проверить порты 8005, 8009, 8080.
Попробуйте этой командой:
netstat -anp
Можно ещё добавить grep, чтобы удобнее было смотреть:
netstat -anp | grep 8080
netstat -anp | grep 8005
netstat -anp | grep 8009
Вообще, он же пишет:
SEVERE: StandardServer.await: create[8005]:
java.net.BindException: Адрес уже используется
Проверьте его, в первую очередь.

Ещё есть смысл проверить не закрыт ли порт firewall'ом, к примеру. Можно так:
telnet localhost 8005
Если нет такой команды, установить просто:
yum install telnet
Вывод telnet'а должен быть:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Target Image