Installation Apache Solr pour Drupal 6 sur Debian Lenny

 

Le but de cet article est d'installer et d'intégrer le moteur de recherche Apache Solr pour Drupal sur une Debian Lenny.

Installation de composantes nécessaires pour Drupal

Installation LAMP

On installe classiquement toute notre architecture LAMP avec une seule commande :

# apt-get install apache2 libapache2-mod-php5 php5-mysql php5-gd php5-mcrypt php-pear php5-cli php-soap php5-curl mysql-server mysql-client cronolog subversion
# a2enmod rewrite

 

Création du répertoire dédié au site :

# mkdir -p /var/www/drupalsolr.domaine.tld/{var/{log/apache,tmp/upload},tmp}

 

Installation de drush

# cd /opt
# wget http://ftp.drupal.org/files/projects/drush-6.x-3.3.tar.gz
# tar xvzf drush-6.x-3.3.tar.gz
# rm drush-6.x-3.3.tar.gz
# ln -s /opt/drush/drush /usr/bin

Installation de drupal

Voici en quelques commandes comment installer Drupal :

# cd /var/www/drupalsolr.domaine.tld/
# drush dl drupal
# mv drupal* www
# cp www/sites/default/default.settings.php www/sites/default/settings.php
# mkdir www/sites/default/files
# mkdir www/sites/all/{modules,themes}
# wget http://ftp.drupal.org/files/projects/fr-6.x-1.0.tar.gz -O www/fr-6.x-1.0.tar.gz
# tar xvzf www/fr-6.x-1.0.tar.gz -C www/
# rm www/fr-6.x-1.0.tar.gz

Créer la base de données

mysql> create database drupalsolr character set utf8 ;
mysql> grant all privileges on drupalsolr.* to 'drupal_youzer'@'localhost' identified by 'password' with grant option ;

Modifier la ligne de paramétrage de la base de données dans www/sites/default/settings.php :

$db_url = 'mysql://drupal_youzer:password@localhost/drupalsolr';

 

Configuration Apache et droits

Sur mon svn, je met à disposition des fichiers de conf  de vhost apache et un script de gestion des droits :

# cd /var/www/drupalsolr.domaine.tld/
# echo 't' | svn --username anonymous --password anonymous export https://subversion.cheramy.name/admin/drupal/etc
# echo 't' | svn --username anonymous --password anonymous export https://subversion.cheramy.name/admin/drupal/scripts
# sed -i 's/aremplacer/drupalsolr.domaine.tld/g' etc/* scripts/*

Au besoins adaptez les fichiers.

Le fichier etc/apache_80.conf est la configuration du vhost http

Le fichier etc/apache_443.conf est la configuration du vhost https. Attention à bien créer vos certificats (voir article sur les PKI)

Tout deux incluent le fichier etc/core.conf qui contient la configuration générique des vhosts.

Le script scripts/user_rights.sh permet de mettre à jour les droits sur les fichiers.

 

On exécute ce fichier et on crée les liens nécessaires pour activer les vhosts (je suppose ici que vous activez le vhost ssl) :

# ./scripts/user_rights.sh
# cd /etc/apache2/sites-available
# ln -s /var/www/drupalsolr.domaine.tld/etc/apache_80.conf xxx-drupalsolr.domaine.tld_80
# ln -s /var/www/drupalsolr.domaine.tld/etc/apache_443.conf yyy-drupalsolr.domaine.tld_443
# a2enmod ssl
# a2ensite xxx-drupalsolr.domaine.tld_80
# a2ensite yyy-drupalsolr.domaine.tld_443
# /etc/init.d/apache2 reload

 

On peut maintenant finaliser l'install de Drupal via l'interface Web : http://drupalcrm.domaine.tld/install.php

 

Ajout de modules

# cd /var/www/drupalsolr.domaine.tld/www
# drush dl admin
# drush dl backup_migrate
# drush dl securepages
# drush dl securepages_prevent_hijack
# drush dl token
# drush dl pathauto

 

Activer les modules (attention de bien avoir un vhost https pour les modules securepages) :

# drush en admin -y
# drush en backup_migrate -y
# drush en pathauto -y
# drush en securepages -y
# drush en securepages_prevent_hijack -y
# drush cc all

 

Attention si vous n'avez pas de résolution dns à mettre la ligne suivante dans votre fichier /etc/hosts :

127.0.0.1    drupalsolr.guidtz-intra.org

 

Installation d'Apache Solr

Installation de Java

Apache Solr à besoins de tomcat et donc de Java, il faut donc activer les branches non-free des dépôts et installer le jdk de Java6. Voici mon fichier /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

deb http://www.backports.org/debian lenny-backports main contrib non-free
deb-src http://www.backports.org/debian lenny-backports main contrib non-free

Puis

# apt-get install sun-java6-jdk

Installation de Tomcat

Malheuresement pour nous Apache Solr à besoins d'une version 6 de Tomcat et la version dans les paquets Debian Lenny est la 5.5.

Il faut donc installer Tomcat à la main :

# cd /opt/
# wget http://apache.osuosl.org/tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz
# tar xvzf apache-tomcat-6.0.29.tar.gz
# rm apache-tomcat-6.0.29.tar.gz
# ln -s /opt/apache-tomcat-6.0.29/ /opt/tomcat6

 

Installation d'Apache Solr

On peut maintenant mettre en place Apache Solr :

# cd /opt
# wget http://apache.osuosl.org/lucene/solr/1.4.1/apache-solr-1.4.1.tgz
# tar xvzf apache-solr-1.4.1.tgz
# rm apache-solr-1.4.1.tgz
# cp apache-solr-1.4.1/dist/apache-solr-1.4.1.war ./tomcat6/webapps/solr.war
# cp -r apache-solr-1.4.1/example/solr ./

 

On configure tomcat pour exécuter solr :

# mkdir -p /opt/tomcat6/conf/Catalina/localhost
# vi /opt/tomcat6/conf/Catalina/localhost/solr.xml
<Context docBase="/opt/tomcat6/webapps/solr.war" debug="0" crossContext="true" >
  <Environment name="solr/home" type="java.lang.String" value="/opt/solr" override="true" />
</Context>

 

Configurer Tomcat

Il faut configurer Tomcat pour supporter l'UTF-8, dans le fichier /opt/tomcat6/conf/server.xml, remplacez le bloc :

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

par

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />

 

C'est aussi dans ce bloc qu'il faut configurer l'adresse de binding de Tomcat pour le faire écouter que sur l'adresse locale, il fait bien sur ensuite faire un proxy avec Apache, mais bon c'est un autre sujet, on limitera l'accès à Tomcat avec la configuration d'un firewall (shorewall par exemple).

 

Il faut aussi créer un utilisateur qui puisse accéder à la partie "manager" de Tomcat, on édite le fichier /opt/tomcat6/conf/tomcat-users.xml :

<tomcat-users>
<role rolename="manager"/>
<user username="tomcat" password="azerty" roles="manager"/>
</tomcat-users>

Démarrage de Tomcat

Vu que l'on a installé Tomcat à la main, il va falloir créer un script de démarrage :

# vi /etc/init.d/tomcat

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre
export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr"
export CATALINA_OPTS="-Xms64m -Xmx64m"

case $1 in
start)
  sh /opt/tomcat6/bin/startup.sh
  ;;
stop)
  sh /opt/tomcat6/bin/shutdown.sh
  ;;
restart)
  sh /opt/tomcat6/bin/shutdown.sh
  sh /opt/tomcat6/bin/startup.sh
  ;;
esac
exit 0

Rendre exécutable ce script puis créer les liens pour les runlevels :

# chmod 755 /etc/init.d/tomcat
# update-rc.d tomcat defaults

 

On démarre Tomcat et pour vérifier que tout marche on peut se connecter sur l'url : http://ip:8080 et http://ip:8080/manager

 

Installation et configuration du module Drupal Apache Solr

Le grand fan de la Salsa du démon (il se reconnaîtra) m'a conseillé de prendre la version Beta du module Apache Solr, on télécharge et installe donc le module Drupal suivant :

# cd /var/www/drupalsolr.guidtz-intra.org/www/sites/all/modules/
# wget http://ftp.drupal.org/files/projects/apachesolr-6.x-2.0-beta3.tar.gz
# tar xvzf apachesolr-6.x-2.0-beta3.tar.gz
# rm apachesolr-6.x-2.0-beta3.tar.gz

Pour configurer Apache Solr pour Drupal, il faut recopier les fichiers schema.xml et solrconfig.xml dans le répertoire /opt/solr/conf.

 

Il faut mettre en place les librairies PHP client pour Solr dans le répertoire du module apachesolr :

# svn checkout -r22 http://solr-php-client.googlecode.com/svn/trunk/ SolrPhpClient

On met à jour les droits du projet et on active le module solr :

# /var/www/drupalsolr.guidtz-intra.org/scripts/user_rights.sh
# cd /var/www/drupalsolr.guidtz-intra.org/www
# drush en apachesolr
drush en apachesolr
The following projects will be enabled: search, apachesolr
Do you really want to continue? (y/n): y
search was enabled successfully.                                                           [ok]
apachesolr was enabled successfully.                                                       [ok]

 

Pour finir on configure le module dans drupal :