Instalación de Solr en Tomcat

Instalar Solr en Tomcat
Para comenzar esta serie de posts dedicados a Solr voy a empezar por el principio instalándolo.

Realizaremos una instalación completa en linux, sin asistentes ni gestores de paquetes.

En futuras entradas intentaré mostrar las características de este estupendo buscador open source.

 

Requisitos previos

Para este ejemplo partiremos de un servidor Linux en mi caso un Debian. No debiera haber muchas diferencias en las instalación sobre otras distribuciones ya que no estoy instalándolo desde un gestor de paquetes.

En realidad una de las ventajas de Solr es que puedes instalarlo en casi cualquier sistema operativo Linux, Windows o Mac.

 

Instalación del jdk

Lo descargamos de la página de Oracle http://www.oracle.com/technetwork/java/javase/downloads/index.html

marcamos el archivo como ejecutable y lo ejecutamos desde la ruta en que queramos instalarlo.

cd /opt
chmod 755 /root/jdk-6u11-linux-i586.bin
/root/jdk-6u11-linux-i586.bin

Aceptamos las condiciones de uso. Una vez finalizado, para simplificar las rutas creamos un enlace simbólico llamado java.

ln -s /opt/jdk1.6.0_11/ ./java

Añadimos la ruta de los binarios de java al PATH y configuramos la variable JAVA_HOME.

vi /etc/profile

Añadimos las siguientes líneas

export PATH=$PATH:/opt/java/bin
JAVA_HOME="/opt/java"
export JAVA_HOME

Cerramos la sesión y conectamos de nuevo para que se apliquen los cambios y comprobamos que funciona.

debianserver:/opt/solr# java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
debianserver:/opt/solr# echo $JAVA_HOME
/opt/java

 

Instalación de Tomcat

Descargamos Tomcat de la web del proyecto: http://tomcat.apache.org/

Descomprimimos el archivo en la carpeta de destino por ejemplo /opt/ y creamos un enlace simbólico llamado tomcat apuntando al directorio original.

cd /opt
tar -xvzf /root/apache-tomcat-7.0.26.tar.gz
ln -s apache-tomcat-7.0.26/ ./tomcat

El directorio tiene quedar más o menos así:

debianserver:/opt# ll
total 8
drwxr-xr-x  9 root root 4096 dic 26 15:08 apache-tomcat-7.0.26
lrwxrwxrwx  1 root root   12 dic 26 15:57 java -> jdk1.6.0_11/
drwxr-xr-x 10 root root 4096 dic 26 15:30 jdk1.6.0_11
lrwxrwxrwx  1 root root   21 dic 26 15:09 tomcat -> apache-tomcat-7.0.26/
debianserver:/opt#

Configuramos la variable de entorno

vi /etc/profile

Añadiendo las siguientes líneas

CATALINA_HOME="/opt/tomcat"
export CATALINA_HOME

El puerto por defecto de Solr es el 8983, para configurarlo editamos el fichero de configuración de Tomcat ./conf/server.xml. Modificamos el puerto por defecto dejando el conector de la siguiente manera:

 

<Connector port="8983" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" />

 

Una vez modificado levantamos Tomcat y comprobamos que está correctamente instalado.

 

/opt/tomcat/bin/startup.sh

 

manager del Tomcat

Manager del Tomcat

 

Una vez instalado hagamos que arranque con el sistema. Para hacerlo creamos un script de arranque.

Creamos el fichero

vi /etc/init.d/tomcat

y colocamos el siguiente código de manera que en función de los parámetros que reciba llame al script de arranque, al de parada, o primero a uno y luego a otro.

### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Tomcat at boot time
# Description:
### END INIT INFO

startScript=/opt/tomcat/bin/startup.sh
shutdownScript=/opt/tomcat/bin/shutdown.sh
export JAVA_HOME=/opt/java

start(){
echo "Starting Tomcat: "
$startScript
}

stop(){
echo "Stopping Tomcat: "
$shutdownScript
}

restart(){
stop
sleep 3
start
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac

exit 0

Le damos permisos de ejecución.

chmod 775 /etc/init.d/tomcat

Y generamos de forma automática los scripts de arranque y parada en los diferentes run levels.

debianserver:/etc/init.d# update-rc.d tomcat defaults
Adding system startup for /etc/init.d/tomcat ...
/etc/rc0.d/K20tomcat -> ../init.d/tomcat
/etc/rc1.d/K20tomcat -> ../init.d/tomcat
/etc/rc6.d/K20tomcat -> ../init.d/tomcat
/etc/rc2.d/S20tomcat -> ../init.d/tomcat
/etc/rc3.d/S20tomcat -> ../init.d/tomcat
/etc/rc4.d/S20tomcat -> ../init.d/tomcat
/etc/rc5.d/S20tomcat -> ../init.d/tomcat
debianserver:/etc/init.d#

A partir de ese momento  el  sistema se encarga de arrancar el servicio o detenerlo al arrancar o apagar el servidor.

 

Seguridad

Es una buena idea simplificar el escenario, quitando aquello que no vamos a usar (manager, ejemplos, etc.)

rm -rf /opt/tomcat/webapps/*

El Tomcat de Solr nunca debería estar accesible desde Internet, ya que permite un acceso de consulta a una versión reducida (o no tan reducida) de nuestra base de datos.

Como norma general Solr sólo debe ser accesible desde los servidores que consumen sus servicios. Es necesario hacer que un firewall sólo permita el acceso desde la red local.

Una excepción a esta regla puede ser cuando lo utilizamos para dar servicio a un auto-completado de búsqueda, ya que deberá ser consultado desde mediante código de cliente.  En ese caso deberemos securizarlo mediante Apache para sólo dar acceso al propio al índice del  autocomplete y sólo a las consultas necesarias. Quizá se pueda hacer en el futuro un monográfico sobre este particular.

Solr no se ocupa por si mismo de la seguridad pero puede ser securizado como otra aplicación web java.

Para acceder a la web de gestión una vez securizado puede usarse un túnel SSH o cualquier otro método.

 

Desplegando Solr

Descargamos Solr desde la web del proyecto http://lucene.apache.org/solr/

En el paquete encontramos documentación, ejemplos y la aplicación propiamente dicha.

Para desplegar Solr tan solo tenemos que copiar el fichero solr.war que encontramos en la ruta examplewebapps del archivo descargado a la ruta de aplicaciones de Tomcat.

cp /root/solr.war /opt/tomcat/webapps/

Tras unos segundos la aplicación se despliega y tenemos un directorio llamado solr en webapps con la aplicación lista para probarla.

Pantalla principal de Solr

Pantalla principal de Solr

 

Si intentamos acceder al administrador no aún no funcionará.

 

Configurando Solr

Para decirle a la aplicación web donde debe buscar la configuración podemos hacerlo mediante un context fragment.

vi /opt/tomcat/conf/Catalina/localhost/solr.xml

añadimos la configuración de la ruta en el disco

<Context docBase="/opt/tomcat/webapps/solr.war" crossContext="true" >
    <Environment name="solr/home" type="java.lang.String" value="/opt/solr" override="true" />
</Context>

creamos la estructura de directorios en la que se almacenaran los datos

mkdir -p /opt/solr/ejemplo/conf

Creamos el fichero de configuración

vi /opt/solr/solr.xml

Y definimos la ruta base del core.

<solr persistent="false">
    <cores>
        <core name="ejemplo" instanceDir="/opt/solr/ejemplo" />
    </cores>
</solr>

 

La configuración básica consiste en dos ficheros ubicados en directorio conf bajo el directorio base, schema.xml y solrconfig.xml que  respectivamente son la definición de los campos del índice y la configuración del core.
Vamos a crear una configuración básica para probar el servicio.

 

vi /opt/solr/ejemplo/conf/schema.xml

Y pegamos el  contenido:

<?xml version="1.0" ?>

<schema name="Ejemplo" version="1.1">
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ISOLatin1AccentFilterFactory"/>
      </analyzer>
    </fieldType>
  </types>
 <fields>
  <field name="id" type="string" indexed="true"  stored="true"  multiValued="false" required="true"/>
  <field name="type" type="string" indexed="true"  stored="true"  multiValued="false" />
  <field name="name" type="text" indexed="true"  stored="true"  multiValued="false" />
 </fields>

 <uniqueKey>id</uniqueKey>
 <defaultSearchField>name</defaultSearchField>
 <solrQueryParser defaultOperator="OR"/>
</schema>

 

Para la configuración

vi /opt/solr/ejemplo/conf/solrconfig.xml

Y pegamos:

<?xml version="1.0" encoding="UTF-8" ?>

<config>

    <luceneMatchVersion>LUCENE_35</luceneMatchVersion>
        <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
    <updateHandler class="solr.DirectUpdateHandler2" />

    <requestDispatcher handleSelect="true" >
        <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
    </requestDispatcher>

    <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
    <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
    <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />

    <admin>
        <defaultQuery>solr</defaultQuery>
        <pingQuery>q=*:*&version=2.0&start=0&rows=0</pingQuery>
   </admin>

</config>

 

Por defecto Solr almacena los datos del índice en un directorio llamado data bajo el directorio base.

Podemos utilizar los ficheros de configuración que vienen en los ejemplos en la ruta .examplemulticorecore0conf

Una vez reiniciado Tomcat nos encontramos los enlaces a la administración del core que hemos creado.

 

Página principal de Solr

Página principal de Solr

Web de administración de Solr

Web de administración de Solr

 

Ya tenemos listo Solr para empezar a trabajar con el.

 

Un comentario para “Instalación de Solr en Tomcat”

  • Mustafa dice:

    Hola, soy un desarrollador frontend.
    Estoy intentando hacer consultas ajax a Solr, pero las consultas las hago a Tomcat que esta conectado con Solr.
    Cuando introduzco la url de la consulta en al campo de url del navegador me devuelve el json correcto, pero si lo intento desde ajax me devuelve un error.
    Lo he intentado con curl y no devuelve nada.
    Agradecería tu ayuda.

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

?>