Installare un server Apache Solr multiCore su Ubuntu Hardy 8.04

Installare un server Apache Solr multiCore su Ubuntu Hardy 8.04

Apache Solr è "the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, and rich document (e.g., Word, PDF) handling. Solr is highly scalable, providing distributed search and index replication, and it powers the search and navigation features of many of the world's largest internet sites". In pratica un server di ricerca che offre funzionalità avanzate simili ai motori di ricerca web.

Drupal consente di utilizzare Solr come motore di ricerca sostituendo od affiancando il motore di ricerca interno a Drupal stesso (qui la home del progetto Apache Solr Search Integration). Per capire alcune delle funzionalità avanzate che ci permette Solr, è sufficiente dare un'occhiata alla pagina di ricerca di Drupal.org e senza dubbio, una delle caratteristiche più interessanti è la possibilità di effettuare la cosidetta faceted search.

Qualcuno potrebbe chiedermi perchè Ubuntu 8.04 quando è appena uscita la nuova LTS 10.04, il motivo è che Drupal ha qualche rognetta con PHP 5.3 che viene distribuito con Lucid Lynx, quindi dato che la 8.04 avrà supporto ancora fino al 2013, e che è ormai ben collaudata e stabile, potrebbe risultare al momento attuale ancora la scelta ottimale come sistema operativo Ubuntu da installare su un VPS. Solr verrà installato come applicativo java e non utilizzando Tomcat, in quanto la prima opzione consente di configurare più facilmente una configurazione multisito.

Non mi soffermo a descrivere nel dettaglio tutta la procedura di installazione che viene accuratamente descritta in questa pagina http://drupal.org/node/504558 in un dettagliato articolo in 10 pagine. Piuttosto, dato che come anticipavo, quello che mi interessa è installare una configurazione multisito (MultiCore), mi fermo al punto 5 (pagina 5) della guida precedente, arrivando fino a dove spiega come sostituire i file schema.xml e solrconf.xml nella cartella solr-path/example/solr/conf e procederò da lì in avanti.

Quello che descriverò di seguito è come attivare un supporto multisito in solr e come mettere in sicurezza il server in modo che non sia accessibile a tutti. Dato che si dovranno fare diverse operazioni di copia ed incolla sui file, se state lavornado su di un server da remoto via SSH potrebbe essere utile utilizzare Midnight Commander, un clone del vecchio Norton Commander per MS-DOS. Potete installarlo su Ubuntu Linux con il comando sudo apt-get install mc.

Utilizzare un server Solr con più siti web

Per ottimizzare le prestazioni della ricerca potremmo decidere di configurare un VPS dedicato in cui installare Solr. A meno di non avere necessità particolari, quali siti con traffico molto elevato e di conseguenza un volume di ricerche molto elevato, risulta normale pensare di poter condividere Solr tra diversi siti, dopo che abbiamo un VPS dedicato per Solr. Un rapporto uno ad uno, non risulta molto conveniente. Il problema è che se desideriamo utilizzare lo stesso server Solr con più di un sito web, con l'attuale versione del modulo di Drupal, è necessario creare dei file di configurazione differenti per ciascun sito pena la condivisione dei contenuti tra i diversi siti. In pratica, con una semplice installazione di Solr come quella descritta nella guida che ho linkato più sopra, supponendo di avere n siti che condividono lo stesso server Solr per le ricerche, cercando nel sito1, troveremmo tra i risultati della ricerca anche contenuti provenienti da sito2, sito3 etc... e questo non è certo una cosa possibile in condizioni normali.

Supponiamo quindi di avere un sito di nome sito1 ed un altro di nome sito2; la procedura si potrà ripetere in modo simile per tutti i siti che vorremmo aggiungere. Vi segnalo che le procedure descritte sono un adattamento della guida che trovate a questo indirizzo: http://www.anovasolutions.com/content/drupal-apache-solr-search-multi-site-instance-setup.

Supponiamo di aver scaricato ed estratto solr nella cartella /apache-sorl del nostro server. Creiamo una copia della cartella /apache-solr/example e chiamiamola ad esempio drupal-multisite:

sudo cp -R /apache-solr/example/ /apache-solr/drupal-multisite/

Copiamo quindi il file /apache-solr/drupal-multisite/multicore/solr.xml nella cartella /apache-solr/drupal-multisite/solr/solr.xml:

sudo cp /apache-solr/drupal-multisite/multicore/solr.xml /apache-solr/drupal-multisite/solr/solr.xml

All'interno della nuova cartella /apache-solr/drupal-multisite/, eliminiamo le sottocartelle

  • example-DIH
  • exampledocs
  • work
  • multicore

La cartella /apache-solr/drupal-multisite/ dovrebbe quindi apparire come segue (qui la vedere in Midnight Commander):

Dovremmo ora creare le sottocartelle di configurazione per i vari siti web che vogliamo utilizzare con solr. Dovremmo quindi modificare il file solr.xml di conseguenza affinchè la struttura corrisponda a quella di cui abbiamo bisogno.

Come detto poc'anzi, supponiamo di avere 2 siti web Drupal, sito1 e sito2, vediamo come fare. Anzitutto sostituiamo i file di configurazione schema.xml e solrconfig.xml che troviamo nella cartella /apache-solr/drupal-multisite/solr/conf con quelli presenti nel modulo Drupal apachesolr (vedi http://drupal.org/node/504696 ). Fatto questo, creiamo le seguanti cartelle in /apache-solr/drupal-multisite/solr:

cd /apache-solr/drupal-multisite/solr mkdir site1 mkdir site2

E copiamo la cartella /apache-solr/drupal-multisite/solr/conf in ciascuna delle due cartelle appena create:

cp -R /apache-solr/drupal-multisite/solr/conf /apache-solr/drupal-multisite/solr/site1/conf
cp -R /apache-solr/drupal-multisite/solr/conf /apache-solr/drupal-multisite/solr/site2/conf

a questo punto è possibile anche eliminare la cartella /apache-solr/drupal-multisite/solr/conf ma ricordatevi che potrebbe tornarvi utile in futuro per aggiungere altri siti web con cui utilizzare Solr (in alternativa potete clonare una delle cartelle di sottosito già esistenti, avendo però l'accuratezza di eliminare il contenuto della cartella data contenente i dati di indicizzazione del vostro sito.

rm -r /apache-solr/drupal-multisite/solr/conf

Editiamo il file /apache-solr/drupal-multisite/solr/solr.xml per adattarlo alla nostra configurazione:

nano /apache-solr/drupal-multisite/solr/solr.xml

In base alla struttura che ho appena creato, questo è l'adattamento del file solr.xml:

<solr persistent="true" sharedLib="lib">
   <cores adminPath="/admin/cores">
     <core name="site1" instanceDir="site1" />
     <core name="site2" instanceDir="site2" />
   </cores>
</solr>

Per default i file dei dati di indicizzazione saranno salvati nelle sottocartelle data di ciascun sito (nel nostro caso per sito1 ad esempio in /apache-solr/drupal-multisite/solr/site1/data/), ma è possibile specificare il path aggiungendo una property a ciascun core, ad esempio:

<solr persistent="true" sharedLib="../lib">
 <cores adminPath="/admin/cores">
  <core name="site1" instanceDir="site1">
   <property name="dataDir" value="/var/lib/solr/site1" />
  </core>
  <core name="site2" instanceDir="site2">
   <property name="dataDir" value="/var/lib/solr/site2" />
  </core>
 </cores>
</solr>

Salviamo ed usciamo. A questo punto possiamo eseguire solr per testarne il funzionamento:

cd /apache-solr/drupal-multisite/solr
java -jar start.jar

Apriamo il browser all'indirizzo del nostro server porta 8983 (dovrete sostituire 192.168.0.120 con l'IP del vostro server):

http://192.168.0.120:8983/solr/

e dovremmo visualizzare la seguente pagina:

Per connettersi a solr con il relativo sito web sarà sufficiente specificare il percorso /solr/site1 o /solr/site2 nella pagina di configurazione di Drupal.

Per maggiori informazioni sui parametri di configurazione impostabili in solr.xml, vi rimando al wiki ufficiale http://wiki.apache.org/solr/CoreAdmin.

Per eseguire solr ad ogni avvio del server, vi rimando alla procedura descritta molto bene in questo articolo: http://drupal.org/node/507292.

Se desiderate invece eseguire solr manualmente ad ogni riavvio, ma evitare che il processo venga chiuso chiudendo la sessione di terminale che state utilizzando, potete eseguire il comando:

nohup java -jar start.jar >logfile 2>&1 &;

Trovate in ogni caso tutto ben spiegato in questa pagina: http://drupal.org/node/504696

Mettere in sicurezza il server SOLR

Come possiamo verificare connettendoci da un qualunque browser, la console di "amministrazione" del nostro server Sorl, risulta accessibile a chiunque all'indirizzo

http://miosito:8983/solr

In parole povere significa che chiunque venisse a conoscenza dell'esistenza del nostro server Solr potrebbe accedere al database e fare ricerche, leggere i parametri di configurazione ed addirittura utilizzare il proprio sito con il nostro server, e questa potrebbe non essere una cosa molto piacevole. Possiamo quindi configurare il firewall per limitare l'accesso al nostro server Sorl. Con ufw (ubuntu firewall) è piuttosto semplice:

sudo ufw allow ssh/tcp
sudo ufw logging on
sudo ufw allow from 192.168.1.100 to any port 8983
sudo ufw enable

In pratica abbiamo abilitato il firewall, e limitato l'accesso alle sole connessioni ssh (porta 22) e alla porta 8080 solo accessi dalla macchina identificata dall'IP 192.168.1.100. Possiamo ipotizzare che tale IP sia quello del nostro server di produzione dove sono installati i vari siti web Drupal che utilizzeranno sorl come motore di ricerca.

Per visualizzare lo stato del nostro firewall:

sudo ufw status

Maggiori info su ufw:

  1. https://wiki.ubuntu.com/UncomplicatedFirewall?action=show&redirect=UbuntuFirewall#Introduction
  2. https://help.ubuntu.com/10.04/serverguide/C/firewall.html