Guida per installare Apache Solr 5.x su Debian 8 per Drupal

Guida per installare Apache Solr 5.x su Debian 8 per Drupal

Che cos'è Apache Solr e perché è utile nella creazione di siti Drupal

Apache Solr è un software sviluppato appositamente per memorizzare dati ed effettuare ricerche avanzate come la ricerca full text e la ricerca di tipo faceted.

Questa piattaforma è molto utilizzata come motore di ricerca per siti ed applicazioni web in quanto supera i normali limiti dei sistemi di ricerca basati su database tradizionali.

Il CMS Drupal può quindi sfruttare le potenzialità di Apache Solr per offrire funzionalità specifiche. Le tre più comuni sono:

  • Ricerca full text tra i contenuti
  • Ricerca di contenuti simili (similar content)
  • Filtri di tipo faceted

Grazie al modulo Search API ed al modulo connettore Search API Solr, Drupal può agganciarsi ad un server Apache Solr ed effettuare le ricerche usando il modulo Views ed altri moduli specifici in maniera molto semplice e veloce.

In questo articolo verrà illustrato come configurare un server Debian 8 con Apache Solr 5.x. Inoltre sarà spiegato come configurare Apache Solr in modalità multicore, ovvero più istanze di Solr che permettono, ad esempio, di servire diversi siti Drupal.

1) Come installare Apache Solr 5.x su Debian 8

Dopo aver installato e configurato la distribuzione per il suo normale e corretto funzionamento, argomento che non sarà trattato in questa sede, si può cominciare con l'installazione di Apache Solr 5.x.

A differenza delle precedenti versioni di Apache Solr, non è più necessario utilizzare Apache Tomcat per far girare Apache Solr. Sarà sufficiente installare la piattaforma Java 1.7.

1.1) Installare Java 1.7

Su Debian l'installazione di Java è semplice, in questo caso ho scelto di installare la versione headless, ovvero senza il supporto per la GUI.

apt-get install openjdk-7-jre-headless

1.2) Installare Apache Solr 5.x

Per installare Apache Solr si deve scaricare manualmente il pacchetto di installazione ed eseguire uno script che provvederà automaticamente a copiare i file del software e di configurazione nelle giuste destinazioni.

Per comodità il file verrà scaricato su /usr/local/src. Al momento della scrittura di questo articolo la versione più recente di Apache Solr è la 5.3.1.

cd /usr/local/src
wget ftp://ftp.panu.it/pub/mirrors/apache/lucene/solr/5.3.1/solr-5.3.1.tgz
tar xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2
bash ./install_solr_service.sh  solr-5.3.1.tgz

Si può quindi attivare il server e verificarne lo stato con i classici comandi di servizio:

service solr start
service solr status

2) Configurare Apache Solr in modalità multicore per Drupal

2.1) Configurazione modalità multicore di Apache Solr 5.x

Una volta che Apache Solr è installato, si passa alla configurazione della modalità multicore.

La configurazione di default prevede un singolo core in /var/solr, ma basta una semplice modifica al file di configurazione (solr.xml) per rendere il sistema multicore.

Per prima cosa va creata una directory che a sua volta conterrà i vari core e la assegniamo all'utente ed al gruppo solr.

mkdir /var/solr/cores
chown solr:solr /var/solr/cores

Fatto questo basta modificare il file /var/solr/data/solr.xml, aggiungendo il nuovo percorso tramite la direttiva coreRootDirectory nel modo seguente:

<str name="coreRootDirectory">${coreRootDirectory:/var/solr/cores}</str>

La stringa va inserita all'interno della sezione &lt;solr&gt; (fuori dalle altre sottosezioni):

<solr>

  <str name="coreRootDirectory">[...]</str>

  [...]

</solr>

Attenzione: se si salta questo passaggio al successivo riavvio del servizio/server bisognerà ricollegare manualmente i core.

2.2) Configurazione dei singoli core per Drupal

Per configurare un singolo core per poter funzionare con Drupal si deve creare la specifica directory che conterrà il core, le relative sottocartelle e copiare i file di configurazione che si trovano nel modulo Search API Solr.

In questo esempio creiamo un core chiamato core0.

Per prima cosa prepariamo le directory:

mkdir /var/solr/cores/core0
mkdir /var/solr/cores/core0/data
mkdir /var/solr/cores/core0/conf

Fatto questo possiamo scaricare e copiare i file di configurazione specifici per Drupal. Ad oggi la versione di Search API Solr è la 7.x-1.9:

cd /usr/local/src
wget http://ftp.drupal.org/files/projects/search_api_solr-7.x-1.9.tar.gz
tar zxf search_api_solr-7.x-1.9.tar.gz
cp search_api_solr/solr-conf/5.x/* /var/solr/cores/core0/conf
chown solr:solr /var/solr/cores/core0 -R

Si può iterare questo passaggio per ogni core che si desidera creare.

3) Inizializzare i core tramite l'interfaccia di amministrazione di Apache Solr

Arrivati a questo punto, si potrà accedere all'interfaccia di amministrazione di Apache Solr via web puntando il browser all'indirizzo IP della macchina sulla porta 8983. Ad esempio, se il server è in locale, l'indirizzo è: http://localhost:8983.

Per inizializzare un core basta andare su "Core Admin" e cliccare il pulsante "Add Core" (vedi immagine).

Esempio configurazione core Solr 5.x da interfaccia web

Se si sta seguendo passo passo questa guida, per configurare il "core0" del passaggio precedente basterà impostare il parametro name ed il parametro instanceDir con i seguenti valori:

  • name: core0
  • instanceDir: /var/solr/cores/core0

Gli altri tre parametri (dataDir, config e schema) restano invariati.

Anche in questo caso si può ripetere l'operazione per ciascun core.

Da questo momento in poi i core Apache Solr sono attivi e funzionanti.

4) Collegare Drupal al server Apache Solr tramite Search API

A questo punto la configurazione del backend è pressoché ultimata. Si deve pertanto configurare Drupal.

Dopo aver installato i moduli search_api e search_api_solr, la configurazione è piuttosto facile. Da /admin/config/search/search_api si può scegliere la voce "Add server" per configurare il nuovo server al quale si dovrà impostare un nome e come "Service class" andrà scelta l'opzione "Solr service".

Esempio configurazione Drupal Search API per connessione a Apache Solr

I parametri predefiniti per il servizio Apache Solr sono praticamente tutti corretti. Basta accertarsi che:

  • La porta "Solr port" sia la 8983, non la 8080.
  • L'indirizzo dell'host "Solr host" sia quello dove è installato Solr.
  • Il percorso "Solr path" deve essere /solr/core0 (nel caso del core esposto nell'esempio di questa guida).
  • Nelle impostazioni avanzate va selezionata manualmente la versione 5.x di Apache Solr su "Solr version override".

Se tutto è stato configurato correttamente, dopo aver salvato le impostazioni, nella schermata di riepilogo del server di Search API dovrebbe apparire la scritta The Solr server could be reached.

Fatto questo si può configurare un indice gestito da Search API che utilizzi il server appena configurato come backend. Per maggiori info sulla configurazione dell'indice di Search API si rimanda alla documentazione ufficiale.

Passo 5: Rendere sicura l'installazione di Apache Solr tramite iptables

Il setup descritto fino ad ora non considera eventuali problematiche relative alla sicurezza del sistema. Qui di seguito verrà mostrato un modo per impedire accessi al server Apache Solr da IP non autorizzati.

Per farlo si usa il classico iptables che apre la porta 8983 solo alle connessioni da localhost e da specifici IP, bloccando tutte le altre connessioni.

iptables -A INPUT -p tcp -s localhost --dport 8983 -j ACCEPT
iptables -A INPUT -p tcp -s IP_SERVER_DRUPAL_1 --dport 8983 -j ACCEPT
[...]
iptables -A INPUT -p tcp -s IP_SERVER_DRUPAL_n --dport 8983 -j ACCEPT
iptables -A INPUT -p tcp --dport 8983 -j DROP

Da questo momento in poi Apache Solr, e di conseguenza anche l'interfaccia web, non sarà più accessibile da remoto.

Per accedere al server Solr da una postazione remota si può comunque usare un tunnel SSH ed esporre in locale la porta 8983.

Complimenti per il blog, molto curato e devo dire che spieghi in modo perfetto e intuitivo come procedere all'installazione, complimenti.

Complimenti per la spiegazione dettagliata, quindi come motore di ricerca è superiore a Google?

Grazie per i complimenti Frano e Michele (che a quanto pare siete la stessa persona). In ogni caso Apache Solr non è un motore di ricerca web come Google, bensì è un software Open Source per effettuare ricerche all'interno di basi di dati.

Complimenti, un software Open Source che userò sicuramente.