By

Instalar Solr en Jetty

Hace ya más de un mes que no pasaba por aquí más que para ver las estadísticas del blog; así que ya es hora de que me siente a escribir algo y compartir con el resto de internet.

Hoy vengo hablando, o escribiendo, sobre cómo instalar / montar una instancia de Solr sobre Jetty, porque esta semana pasada me surgió la necesidad de montar una instancia y hemos tenido que pelear un poco para hacerlo, así que he decidido crear una receta muy simple para tenerlo funcionando rápidamente y siguiendo unos pasos muy sencillos. Pero empecemos por el principio…

¿Qué es Solr?

Solr es la plataforma de búsqueda de código abierto del proyecto Apache Lucene. Es una plataforma de búsqueda muy popular y rápida; está escrita en Java y se ejecuta de forma independiente dentro de un servidor de aplicaciones como pueder ser Tomcat o Jetty. Podéis encontrar mucha más información de Sorl en su página oficial.

Preparativos

Antes de empezar con la instalación de Solr necesitamos tener instalados varios paquetes en nuestro sistema. En mi caso, y a la hora de escribir este post, estoy utilizando una distribución Ubuntu; y muchos pensaréis que es tan fácil como hacer un apt-get install solr-jetty solr-common pero mi necesidad surgió en una distribución Debian Squeeze, y no contaba con Solr en mi sistema de paquetería. De todas formas, este post tiene como fin poder instalar un Solr sin necesidad de utilizar el sistema de paquetería de nuestra distribución y poder utilizar una versión más nueva de Solr que la empaquetada en esta. Así que necesitaremos:

Java

Necesitaremos la máquina virtual de Java para poder ejecutar Solr dentro de nuestro contenedor de aplicaciones Jetty. Podemos buscar el paquete referente a openjdk en nuestra distribución. En mi caso, tengo instalado varios paquetes referentes a openjdk-7:

$ dpkg -l |grep openjdk |awk '{print $2}'
openjdk-7-jre:amd64
openjdk-7-jre-headless:amd64
openjdk-7-jre-lib

Para comprobar que tenemos java correctamente instalado y conocer la versión que vamos a utilizar podemos ejecutar la siguiente instrucción:

$ java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Jetty

Instalaremos el servidor de aplicaciones Jetty utilizando nuestro sistema de paquetería igual que hemos hecho con Java. Así que en distribuciones basadas en Debian utilizaremos la siguiente instrucción para su instalación:

$ sudo apt-get install jetty libjetty-extra

Solr

Como he comentado antes, en este caso no vamos a instalar Solr desde el sistema de paquetería, pues yo no tuve esa posibilidad y mi intención es compartir la forma de hacerlo de que exista un paquete en los repositorios, como era mi caso.

Descargar y descomprimir Solr

Descargaremos y descomprimiremos la última versión disponible de Solr en este momento, la versión 4.2.1:

$ cd /opt
$ sudo wget http://apache.rediris.es/lucene/solr/4.2.1/solr-4.2.1.tgz
$ tar xzf solr-4.2.1.tgz && mv solr-4.2.1 solr

Crearemos el directorio /usr/share/solr y descomprimiremos dentro de él el contenido de dist/solr-4.2.1.war:

$ sudo mkdir /usr/share/solr
$ cd /usr/share/solr
$ sudo unzip /opt/solr/dist/solr-4.2.1.war

Esta última instrucción descomprime los ficheros web de Solr en el directorio /usr/share/solr teniendo este el siguiente contenido:

$ ls
admin.html  css  favicon.ico  img  js  META-INF  mgc  solr.xml  tpl  WEB-INF

Añadiendo Solr a Jetty

Para instalar Solr como aplicación dentro de Jetty, crearemos un enlace simbólico de /usr/share/solr en /usr/share/jetty/webapps:

$ sudo ln -s /usr/share/solr /usr/share/jetty/webbaps/solr

NOTA: /usr/share/jetty es el directorio donde se encuentra instalado Jetty en nuestra distribución. Puedes consultarlo ejecutando: dpkg -L jetty.

Esto quiere decir que nuestra instancia de Solr va a ser accesible en http://localhost:8080/solr

Configurando Jetty

Editaremos el fichero /etc/default/jetty a través del cual podremos modificar el comportamiento de éste sin necesidad de modificar sus ficheros de configuración XML.

En mi caso he incluido las siguientes lineas:

NO_START=0
VERBOSE=yes
JETTY_PORT=8080
JETTY_HOST=0.0.0.0
JAVA_OPTIONS="-Dsolr.solr.home=/usr/share/solr $JAVA_OPTIONS"
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
  • NO_START=0: permite que Jetty se ejecute. Si el valor es 1, Jetty no podrá ejecutarse.
  • VERBOSE=yes: indica a Jetty que queremos que nos muestra mucha más información durante su ejecución. Muy recomendable sobre todo cuando se intenta depurar un error.
  • JETTY_PORT=8080: puerto en el que escuchará Jetty. En este caso se utiliza el puerto por defecto, pero se puede establecer cualquier otro siempre y cuand o no se encuentra ya en uso en el sistema.
  • JETTY_HOST=0.0.0.0: indica a Jetty que escuche en todas las interfaces de red y no solo en localhost. Aunque es recomendable que escuche solo en localhost, sobre todo si se encuentra instalada en el mismo servidor donde se encuentra la aplicación.
  • JAVA_OPTIONS: opciones y parámetros que se pueden pasar a la máquina virtual de Java.
  • JAVA_HOME: indica el directorio HOME de la máquina virtual de Java. Es posible descubrirlo ejecutando dpkg -L openjdk-7-jre.

Añadiendo Cores a Solr

Es necesario configurar al menos un Core en Solr para que podamos hacer uso de él, así que editaremos el fichero /usr/share/solr/solr.xml:

$ sudo vim /usr/share/solr/solr.xml

y añadiremos algo como lo siguiente:

<solr persistent="true">
    <cores adminPath="/admin/cores">
    <core name="mysitename" instanceDir="mysitename" dataDir="/var/lib/solr/mysitename/data" />
    </cores>
</solr>

Esto añade un Core llamado mysitename. Ahora crearemos el directorio del Core que acabamos de configurar:

$ sudo mkdir -p /var/lib/solr/mysitename/data

Y establecemos jetty como propietario y grupo a los directorios /var/lib/solr /usr/share/solr:

$ sudo chown -R jetty:jetty /var/lib/solr/
$ sudo chown -R jetty:jetty /usr/share/solr

Configurando el Core

Tal y como hemos hecho antes, tenemos que crear el directorio que alojará la configuración para el Core mysitename:

$ sudo mkdir -p /usr/share/solr/mysitename

Y si aún no tenemos una configuración disponible, podemos copiar la configuración de ejemplo que viene incluida con Solr y que se encuentra en el directorio example:

$ sudo cp -r /opt/solr/example/solr/collection1/conf/ /usr/share/solr/mysitename/

Reiniciar Jetty

Por último y para terminar solo nos quedaría reiniciar el servido Jetty:

$ sudo service jetty restart

Si todo va bien, Solr debería estar accesible en http://localhost:8080/solr

Y esto es todo! Espero que os sirva de ayuda, a mi seguro que me va a ser muy útil cuando tenga que montar un Solr de nuevo.

Un saludo, Manu.