Il semble assez courant d'utiliser le moteur d'indexation Apache Solr pour Drupal via la panoplie de module autour de Search API.
Mais installer Solr n'est pas aussi simple qu'installer un module Drupal. Voici donc un guide d'installation, basé sur Debian Jessie.
Apache Solr en développé en Java, il nous faut donc installer la plateforme d'execution JRE (Java Runtime Environment).
Verifions d'abord que Java ne soit pas déja installé
java -version
Si cette commande retourne une erreur du type "The program java can be found in the following packages", alors Java n'est pas présent. Nous devons l'installer
apt install default-jre
Note: d'autres préféreront installer openjdk
avec la commande suivante :
apt install openjdk-7-jre
ou, si les jessie-backports
sont activés :
apt install openjdk-8-jre
1/ Se placer dans un dossier temporaire
cd /tmp
2/ Télécharger la version 5.4.1 d'Apache Solr, compatible avec le module Search API Solr
wget https://archive.apache.org/dist/lucene/solr/5.4.1/solr-5.4.1.tgz
3/ Décompresser l'archive pour lancer le script d'installation
tar xzf solr-5.4.1.tgz solr-5.4.1/bin/install_solr_service.sh --strip-components=2
bash ./install_solr_service.sh solr-5.4.1.tgz
Ce script installe Apache Solr, ajoute un utilisateur unix solr
, et configure un service
unix pour permettre de démarrer ou d'arrêter le daemon.
Pour être sur qu'Apache Solr sera démarré lors d'un redémarrage du serveur, il faut activer ce service :
systemctl enable solr.service
## Création d'un index
Apache Solr permet de gérer plusieurs index. Nous allons en activer un, appelé exemple
mkdir /var/solr/data/exemple
chown -R solr:solr /var/solr/data/exemple/
## Protection de l'interface d'administration
A cette étape, l'interface d'administration du serveur Solr est publiquement accessible à l'adresse http://IP.DE.MON.SERVEUR:8983
(8983
étant le port par défaut d'un serveur Solr). Ça n'est pas forcement souhaitable, une personne mal intentionnée pourrait vider l'index ou effectuer d'autres taches d'administration.
Nous allons donc configurer Solr (via son serveur HTTP Jetty) pour être accessible uniquement via l'IP locale.
Dans le fichier /opt/solr/server/etc/jetty-http.xml
, cherchez la ligne contenant le terme jetty.host
et ajouter l'attribut default="127.0.0.1"
.
Nous devons obtenir la ligne suivante :
<Set name="host"><Property name="jetty.host" default="127.0.0.1" /></Set>
Ainsi, l'interface d'administration est uniquement accessible à l'adresse http://127.0.0.1:8983
. C'est plus sécurisé, mais finalement pas pratique car on ne peut pas y acceder depuis notre navigateur.
## Proxy
Mettons en place un Proxy Apache afin d'acceder à cette interface d'administration depuis l'exterieur.
Note : La configuration pour Nginx ne devrait pas être trop différente.
1/ Activer les modules proxy/http pour Apache
a2enmod proxy
a2enmod proxy_http
2/ Créer un VirtualHost
Ajouter un fichier /etc/apache2/sites-available/solr.conf
et ajouter la configuration suivante :
<VirtualHost *:80>
# URL pour l'interface d'administration Solr
ServerName solr.mon-site.fr
# Réécriture des URL
RewriteEngine On
RewriteRule ^\/solr(.*)$ $1 [L,R]
# Configuration du proxy
ProxyPreserveHost off
ProxyRequests off
ProxyPass / http://127.0.0.1:8983/solr/
ProxyPassReverse / http://127.0.0.1:8983/solr/
# Protection par mot de passe de cette url
<Proxy *>
Order deny,allow
Allow from all
AuthType Basic
AuthName "Password Required"
AuthUserFile /etc/apache2/conf/.solr-htpasswd
Require valid-user
</Proxy>
</VirtualHost>
3/ Mot de passe
L'accès à l'interface d'administration sera protégée par un mot de passe, il nous faut le définir. En supposant que le paquet apache2-utils
soit installé, definissons notre mot de passe avec la commande suivante :
htpasswd -c /etc/apache2/conf/.solr-htpasswd solr
Cette commande vous demande de saisir un mot de passe (ou mieux, une phrase de passe).
Ici solr
est l'identifiant associé au mot de passe. Nous sommes libre de le choisir.
4/ Relancer Apache
apache2ctl graceful
Si tout c'est bien passé, on doit pouvoir acceder a l'interface d'administration de notre serveur Apache Solr a l'adresse définie dans notre VirtualHost Apache, ici http://solr.mon-site.fr
, en utilisant le mot de passe généré.
Différentes ressources qui m'ont aidé pour l'installation.
- https://www.digitalocean.com/community/tutorials/how-to-install-java-on-ubuntu-with-apt-get
- https://www.digitalocean.com/community/tutorials/how-to-install-solr-5-2-1-on-ubuntu-14-04
- https://cwiki.apache.org/confluence/display/solr/Taking+Solr+to+Production
- https://zds-site.readthedocs.io/fr/latest/install/deploy-in-production.html#configuration-solr
- https://www.drupal.org/node/1999280
- https://serverfault.com/questions/547010/solr-reverse-proxy-apache2
- https://stackoverflow.com/questions/23526342/reverse-proxy-solr-behind-apache-web-server