Using Solr With TYPO3 On Debian Squeeze

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Follow me on Twitter

TYPO3's default search extension called "Indexed Search" is fine for small web sites, but if your web site is bigger (> 500 pages), it is getting very slow. Fortunately, you can replace it with a search extension that uses the ultra-fast Apache Solr search server. This tutorial explains how to use Apache Solr with TYPO3 on Debian Squeeze.

I do not issue any guarantee that this will work for you!

 

1 Preliminary Note

In this tutorial I'm using two servers:

  • server1.example.com (IP: 192.168.0.100): web server where the TYPO3 4.7 Introduction package is installed (in the www.example.com vhost).
  • server2.example.com (IP: 192.168.0.101): separate server where I will install Apache Solr.

Of course, it's possible to install Solr on the same system as the web server; however, I'd like to split up both services so that they do not impact each other's performance.

 

2 Installing Solr

server2.example.com:

Open /etc/apt/sources.list...

vi /etc/apt/sources.list

... and make sure you have the contrib and non-free repositories enabled:

deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.de.debian.org/debian/ squeeze main contrib non-free

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

deb http://ftp.de.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main contrib non-free

Update your packages database...

apt-get update

... and install Java:

apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre unzip
update-alternatives --config java
update-alternatives --config javac

The TYPO3 project provides a Solr installation script which we download as follows:

wget http://forge.typo3.org/projects/extension-solr/repository/revisions/master/raw/resources/shell/install-solr.sh
chmod 755 install-solr.sh

Now we install Solr. By default (if you don't provide any languages as parameters), Solr is installed with support for the English language only; if you need support for more languages, just append them to the command, e.g. like this:

./install-solr.sh german english french

This installs a Tomcat server (where Solr is run on) and Solr. By default, Tomcat listens on 127.0.0.1 only; because we want to access Solr from a remote host, we must configure Tomcat to listen on all interfaces, therefore we replace 127.0.0.1 with 0.0.0.0 in /opt/solr-tomcat/tomcat/conf/server.xml:

vi /opt/solr-tomcat/tomcat/conf/server.xml
[...]
    <Connector port="8080" protocol="HTTP/1.1"
               maxHttpHeaderSize="65536"
               connectionTimeout="20000"
               redirectPort="8443"
               address="0.0.0.0"
               URIEncoding="UTF-8" />
[...]

Restart Tomcat:

/opt/solr-tomcat/tomcat/bin/shutdown.sh
/opt/solr-tomcat/tomcat/bin/startup.sh

Next we can configure cores in Solr. By default, an English core is already configured; if you need more languages, you can add them to /opt/solr-tomcat/solr/solr.xml, e.g. like this:

vi /opt/solr-tomcat/solr/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
        <cores adminPath="/admin/cores" shareSchema="true">
                <core name="core_en" instanceDir="typo3cores" schema="english/schema.xml" dataDir="data/core_en" />
                <core name="core_de" instanceDir="typo3cores" schema="german/schema.xml" dataDir="data/core_de" />
                <core name="core_fr" instanceDir="typo3cores" schema="french/schema.xml" dataDir="data/core_fr" />
        </cores>
</solr>

Restart Solr afterwards:

/opt/solr-tomcat/tomcat/bin/shutdown.sh
/opt/solr-tomcat/tomcat/bin/startup.sh

Because we don't want to start Tomcat manually each time the server is booted, we can add the Tomcat startup command to /etc/rc.local:

vi /etc/rc.local
[...]
/opt/solr-tomcat/tomcat/bin/startup.sh
[...]

 

2.1 Adding Authentication To Solr

Because Solr is listening on all interfaces, it is a good idea to add authentication to it. I will now configure the user user1 with the password secret for the English core.

Open /opt/solr-tomcat/tomcat/conf/web.xml...

vi /opt/solr-tomcat/tomcat/conf/web.xml

... and add the following section somewhere inside the <web-app> container:

[...]
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Solr authenticated application</web-resource-name>
      <url-pattern>/core_en/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>role1</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Admin and Update protection</realm-name>
  </login-config>
[...]

As you see, this is valid for the English core only (<url-pattern>/core_en/*</url-pattern>), and I've configured this for the role role1, so valid users must belong to that role. To add the user user1 with his password to that role, open /opt/solr-tomcat/tomcat/conf/tomcat-users.xml...

vi /opt/solr-tomcat/tomcat/conf/tomcat-users.xml

... and add the following section inside the <tomcat-users> container:

[...]
  <role rolename="role1"/>
  <user username="user1" password="secret" roles="role1"/>
[...]

Restart Tomcat afterwards:

/opt/solr-tomcat/tomcat/bin/shutdown.sh
/opt/solr-tomcat/tomcat/bin/startup.sh

You can now open a browser and visit Solr under http://192.168.0.101:8080/solr where you should see all configured cores:

When you visit the English core (for which we have just configured authentication), you should be asked for a username and a password:

After successful authentication, you should see the following page which means Solr is running successfully:

Share this page:

0 Comment(s)