Category: Lando
En este pequeño ‘tutorial’ intentaremos plasmar cómo implementar un motor de búsqueda como Solr, dentro de nuestro stack de Drupal + Lando. Incluyendo en nuestra receta de Lando nuestro servicio Solr y configurando posteriormente Drupal para su funcionamiento.
Solr es un motor de búsqueda open source basado en Lucene, software libre de Apache, y escrito en Java. Al implementar un servidor de búsqueda como Solr en nuestros desarrollos, estamos implementando un motor de búsqueda vertical, el cual nos facilitará realizar búsquedas a través de todo nuestro dominio.
Los motores de búsqueda horizontales realizan una búsqueda transversal a través de todos los dominios encontrados, tal como lo realizan Google, Bing…. Un motor de búsqueda vertical, en cambio, se limita a un dominio, un tema o un público objetivo. En el caso que nos ocupa el motor de búsqueda aplicará a nuestro dominio.
Aunque en Drupal ya tenemos las vistas que nos posibilitan realizar búsquedas sobre el contenido creado y filtrar sobre ellas, si manejamos un gran conjunto de datos, contar con un motor de búsquedas vertical nos posibilita mayor versatilidad, escalabilidad y rapidez. Con ella podemos realizar, por ejemplo, búsquedas por campos de texto al mismo tiempo, búsqueda inexacta, clasificación a través de facetas, … Y nos proporciona unos resultados más rápidos al estar la información previamente indexada.
Vamos a trabajar sobre un Drupal 9 con el perfil de instalación umami, el cual ya viene con contenido de demostración por defecto. Y con una receta de Lando con lo justo para correr una versión de Drupal 9.
Creamos la carpeta donde vamos a ejecutar el proyecto e iniciamos un proyecto dupal en lando especificando nuestra ruta actual como árbol de trabajo, para un proyecto en Drupal 9 y siendo nuestra carpeta webroot web:
$ mkdir template-solr
$ lando init
Con esto ya tendremos nuestro archivo .lando.yml en nuestra raíz del proyecto creado con una receta básica para Drupal 9:
name: template-solr
recipe: drupal9
config:
webroot: web
Ahora descargaremos un Drupal 9 con composer instalaremos drush para instalar drupal con el perfil de umami.
$ lando composer create-project drupal/recommended-project drupal
$ mv drupal/* .
$ mv drupal/.* .
$ rm -rf drupal
$ lando rebuild -y
$ lando composer require drush/drush
$ lando info
$ lando drush si demo_umami --site-name="Solr demo" --account-name=admin --account-pass=admin --account-mail=mail@example.com
Como podemos observar hemos dejado el comando ‘drush si’ para poder interactuar y especificar los datos de acceso a la base de datos proporcionados por el comando ‘lando info’. También podríamos haberlos especificado dentro del comando drush.
Y ya tenemos nuestro sitio preparado para configurarlo.
Previamente descargaremos los módulos Search Api y Search Api Solr necesarios, con composer en nuestro site, ya que lo necesitaremos para una configuración posterior en nuestro contenedor. Para ello ejecutaremos:
$ lando composer require drupal/search_api drupal/search_api_solr
Una vez descargados los módulos podemos instalar instalar estos y continuar con nuestra configuración.
$ lando drush en search_api search_api_solr -y
Para empezar a trabajar con Solr primero debemos tener un contenedor con el servicio de Solr corriendo. Para ello lando viene con la capacidad de correr un servicio de [Solr]([Solr | Lando](https://docs.lando.dev/config/solr.html)){:target=”_blank”} listo para usar. Por lo que en nuestro archivo .lando.yml de la raíz del proyecto, nos bastaría con añadir lo siguiente: |
proxy:
solr:
- admin.solr.lndo.site:8983
services:
solr:
type: solr:8
portforward: true
core: drupal9
config:
dir: web/modules/contrib/search_api_solr/solr-conf-templates/8.x
Donde:
‘Proxy’ especificamos que nuestro servicio de nombre ‘solr’ será accesible desde ese dominio con ese puerto para monitorear el servicio.
‘Services’ Aquí es donde podemos añadir y extender nuestros servicios de nuestra configuración de lando.
‘Solr’ Nombre de nuestro servicio.
‘type’ Nuestro tipo de servicio, en este caso Solr en su versión 8.
‘portforward’ Al especificar esta variable como true, nos permitirá acceder a este servicio externamente. [Más info]([Solr | Lando](https://docs.lando.dev/config/solr.html#configuration)){:target=”_blank”} |
‘core’ Digamos que este es el ‘núcleo’ en el cual se va a indexar toda la información. Incluyendo los archivos de configuración y esquemas.
Por lo que nuestro archivo .lando.yml quedaría de la siguiente manera:
Pues con esto tendríamos que ejecutar el comando $ lando rebuild -y
para que lando nos cree el nuevo servicio que hemos configurado.
Una vez configurado corriendo nuestro servicio con nuestra configuración especificada podemos empezar a configurarlo desde Drupal. Para nos logueamos como administrador y nos dirigimos a /admin/config/search/search-api. Donde nos encontraremos lo siguiente:
Si pulsamos sobre añadir servidor, podremos configurar nuestro servidor solr, recién creado:
Una vez pulsado sobre guardar lo más probable es que nos dé el siguiente error:
You are using an incompatible Solr schema. Please follow the instructions described in the INSTALL.md file for setting up Solr
Por lo que tendremos que aplicar una configuración diferente. Para ello nos descargaremos el archivo .zip comprimido que nos sugiere la página de visualización de nuestro servidor solr. Pulsamos sobre ‘+get config.zip’:
Ahora debemos crear en la raíz de nuestro proyecto una carpeta donde descomprimir la el .zip descargado. En la raíz de nuestro proyecto ejecutamos:
$ mkdir -p config/solr-conf/8.x
Una vez creada nuestra carpeta, descomprimimos aquí, en nuestro caso, el archivo ‘solr_8.x_config.zip’ descargado. Una vez realizado tendremos que cambiar la configuración en nuestro archivo .lando.yml del proyecto por lo siguiente:
services:
search:
type: solr:8
portforward: true
core: drupal9
config:
dir: config/solr-conf/8.x
Quedando nuestro árbol de trabajo y archivo .lando.yml:
Una vez realizado esto volveremos a ejecutar el comando lando rebuild -y
Si volvemos a la página de visualización de nuestro servidor veremos que ahora sí, nuestro servidor no nos da ningún error y se conecta correctamente.
Y si visitamos nuestro dominio http://admin.solr.lndo.site/solr en el cual monitoreamos nuestro solr, también podremos ver que conecta correctamente con nuestra drupal:
Como hemos visto, lando proporciona a partir de unos pocos pasos la posibilidad de incluir en nuestros desarrollos un contenedor de Solr sin mucho sacrificio. Todas las configuraciones creadas en drupal serían convenientes incluirlas en nuestros setting.local.php o quitar bajo seguimiento las configuraciones relativas a solr, al ejecutar la importación de los archivos. Para prevenir que estas configuraciones en local sean subidas a otros entornos como de pruebas o producción.