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.