Skip to content

March 10, 2014

2

Apache Solr ve Tomcat Kurulumu

Apache Solr Kurulumu

Merhaba arkadaşlar, Arama Sunucuları yazısıyla başladığımız yazı dizisini Solr üzerinden detaylı kullanım ve konfigürasyon örnekleriyle devam ettireceğiz.

Bu yazıda klasikleşen haliyle öncelikle kurulumundan başlayacağız. Ama bu defa apt, brew, port gibi paket yöneticileriyle* değil binary dağıtımlarıyla** gerekli tüm yazılımları bir klasörde çalışabilecek şekilde kuracağız.

Solr İçin Gerekli Yazılımlar

Solr, Java ile geliştirilen bir yazılım olduğundan çalışırken -en az- Java Sanal Makine (Java Virtual Machine, JRE)’sine ihtiyaç duyar. En az dedik çünkü debugging yapacaksak ve bazı karakter seti sorunlarından kurtulmamız için Java Geliştirme Kiti (Java Development Kit, JDK) kurmamız gerekir. Bunun dışında Solr’ ı çalıştırabilmek için dahili olarak gelen Jetty Web Sunucunu*** kullanabiliriz. Biz Tomcat ile kullanımını inceleyip kurulumu biraz detaylandıracağız. Ayrıca hemen her bilgisayarda kurulu olan JRE ‘yi kullanmak yerine sadece kurduğumuz Solr’ ın kullanacağı JRE konfigüre edeceğiz. Bir nevi (tam olmasa da) virtual environment (sanal ortam?) yapmaya çalışacağız. Böylece Solr’ ı istediğimiz herhangi bir Java sürümü ile ve tüm dosyaları tek klasörde toplayarak çalıştırabilecek hale geleceğiz. Bu aynı zamanda Solr üzerinde denemeler yapmak için de iyi bir yöntem. Ayrıca, replika**** ve cloud özellikleri için farklı kurulumlar yapıp kendi bilgisayarımızda bunları rahatlıkla denemiş oluruz. Bu ayrıca -çok nadir görülse de- sistem JRE güncellemelerinden olumsuz etkilenmemizin önüne geçer.

Toparlayacak olursak; Apache Tomcat,  Apache Solr, JRE (Java Runtime Environment) yazılımlarına ihtiyacımız olacak. Root dizinde (isterseniz masaüstü ya da tmp dizini de olabilir) solr4 adında bir klasör oluşturup ilgili yazılımları bu klasöre indireceğiz. Şu an yayında olan stabil sürümleri sırasyıla indirip sıkıştırılmış dosyaları açalım/çıkaralım ; Apache Solr 4.7.0Apache Tomcat 8.0.3, JRE ya da JDK (JDK kurulumu bu yazı kapsamında değil)

Yukarıdaki adımları uygulayıp arşiv/zip dosyalarını sildiğimizde /solr4/ klasörü şu klasörleri barındıracak;

  • apache-tomcat-8.0.3/
  • jre1.7.0_51/
  • solr-4.7.0/

Tomcat ve JRE/JDK Kurulumu

Bizim örneğimizdeki versiyon ile belirtecek olursak, apache-tomcat-8.0.3/conf/server.xml dosyasını açıp <Connector port=”8080″ protocol=”HTTP/1.1″ yazan bölümü tomcat için hangi portu kullanmak istiyorsak port özelliğini buna göre değiştirelim. Varsayılan dışında bir kurulum yapmaya çalıştığımız için portu 8082 olarak set ediyoruz. Değişiklik sonrası ilgili satır <Connector port=”8082″ protocol=”HTTP/1.1″ görünümünde olacak.

Bir başka Tomcat ayarı ise yine aynı dosyada (apache-tomcat-8.0.3/conf/server.xml) Tomcat kapatma portunu (shutdown port) değiştirmek olacak. Bunu değiştirmezsek aynı anda çalışan birden fazla Tomcat kullanırken bir Tomcat’ i kapatmanız diğer Tomcat’lerin de durmasına neden olacaktır. İlgili ayar apache-tomcat-8.0.3/conf/server.xml dosyasındaki <Server port=”8005″ shutdown=”SHUTDOWN”> kısmında bulunan port özelliği değiştirmek olacaktır. Biz 8006 olarak set ettik. Değişiklik sonrasında şu şekilde görünecek; <Server port=”8006″ shutdown=”SHUTDOWN”>

Tomcat’ i kendi indirdiğimiz JRE versiyonuyla çalıştırabilmek için apache-tomcat-8.0.3/bin/setenv.sh dosyasını oluşturup içine “JRE_HOME=/solr4/jre1.7.0_51” yazmamız yeterli. Bu dosyayı oluşturmazsak Tomcat sistemin varsayılan JRE veya JDK path değişkenlerini okuyacaktır. Konsoldan yapmak için  echo “JRE_HOME=/tmp/solr4/jre1.7.0_51” > /solr4/apache-tomcat-8.0.3/bin/setenv.sh

Mac kullanıcıları JRE ayarı için JRE_HOME=/solr4/jre1.7.0_51/Contents/Home şeklinde ayarlamaları gerekmekte.

JDK ile çalıştırmak isterseniz JAVA_HOME değişkenini ayarlamanız gerekiyor. Catalina, JRE_HOME ayarlanmamışsa JAVA_HOME değişkenini okuduğunu söylüyor (apache-tomcat-8.0.3/bin/catalina.sh dosyasındaki direktifleri okumanız faydalı olabilir).

Apache Tomcat Welcome PageBu ayarı yaptıktan sonra tomcat sunucusu kendi halinde çalışabiliyor olacak. Tomcat sunucusunu Catalina servlet konteyner (servlet container) ayar klasörü oluşması için  başlatıp durduracağız. Bunu yapmak için apache-tomcat-8.0.3/bin/ klasörü altında bulunan .sh uzantılı dosyalara çalıştırma izni vermemiz (chmod +x ./apache-tomcat-8.0.3/bin/*.sh) gerekiyor. Daha sonra Tomcat’i çalıştırmak için ./apache-tomcat-8.0.3/bin/startup.sh durdurmak içinse ./apache-tomcat-8.0.3/bin/shutdown.sh komutlarını kullanıyoruz. Tomcat düzgün çalışıyorsa yukarıdaki kurulum ayarlarıyla erişmek için http://localhost:8082 adresine girdiğimizde yandaki resmi görebiliyor olmalıyız.

Solr Kurulumu

Solr kurulumuna Solr ile gelen kütüphaneleri Apache lib klasörüne kopyalayarak başlayabiliriz. solr-4.7.0/example/lib/ext/ içindeki tüm dosyaları apache-tomcat-8.0.3/lib/ klasörü içine kopyalayalım.

Solr data ve konfigürasyon dosyalarını tutacak bir klasör oluşturuyoruz. Klasör adı solr_home olsun. Bu klasörü oluşturduktan sonra /solr4/ klasörü şu şekilde görünecek.

  • apache-tomcat-8.0.3/
  • jre1.7.0_51/
  • solr-4.7.0/
  • solr_home/

Sonrasında Solr ile gelen örnek uygulamayı (solr-4.7.0/example/solr/ dizini içindeki her şeyi) solr_home dizinine kopyalayalım. Bu örnek uygulama Solr ‘a ait bir çok özelliğin konfigürasyonu bulundurduğu için yeni başlayanlar için çok faydalı olacaktır.

Bu konfigürasyonla Solr’ ın kütüphaneleri bulabilmesi için solr_home/collection1/conf/solrconfig.xml dosyası içinde <lib dir=”../../../ yazan kısmı <lib dir=”../../solr-4.7.0/ olarak değiştirelim.

Şimdi de Solr uygulamasını Tomcat’ e tanımlamaya (böylece Tomcat çalışırken deploy olmasını sağlamaya) çalışalım. Bunun için apache-tomcat-8.0.3/conf/Catalina/localhost/ solr.xml klasörü içinde solr.xml dosyası oluşturup içinde aşağıdaki konfigürasyonu yazalım;

<?xml version="1.0" encoding="UTF-8" ?>
<Context 
    docBase="/solr4/solr-4.7.0/example/webapps/solr.war"
    allowlinking="true"
    crosscontext="true"
    debug="0"
    antiResourceLocking="false"
    privileged="true">
  <Environment name="solr/home" override="true" type="java.lang.String" value="/solr4/solr_home" />
</Context>

Son olarak Solr uygulama ayarını da yapalım. Bunun için solr_home dizini içinde solr.xml dosyası oluşturalım ve içine aşağıdaki konfigürasyonu yazalım. Burada hostPort özelliğine Solr ‘ın kullanacağı portu yazıyoruz.

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="8082" hostContext="${hostContext:}">
    <core config="solrconfig.xml" name="collection1" instanceDir="collection1" schema="schema.xml" dataDir="data"/>
  </cores>
</solr>

Apache Solr4 HomepageYukarıdaki işlemleri tamamladıktan sonra http://localhost:8082/solr adresine girdiğimizde yandaki resimde bulunan Solr yönetim arayüzü önümüze geliyor olması gerekiyor. Solr yönetim paneli anasayfasında Solr versiyonunu (solr-spec), Lucene versiyonunu (lucene-spec), JVM başlığı altında Java versiyonunu (Runtime), yine JVM başlığı altında Catalina pathlerini görebilirsiniz (Args). Bu bilgiler yukarıdaki kurulumu düzgün gerçekleştirip gerçekleştiremediğimizin doğrulaması olacak. Yandaki resimde /tmp klasörü altına kurulmuş bir Solr ‘ın yönetim paneli anasayfası görünmekte. Diğer direktifleri görmek/doğrulamak için http://localhost:8082/solr/#/~java-propertis adresini kullanabilirsiniz.

Solr Kurulum Scripti

Bu işlemleri konsoldan yapmak isterseniz gerekli komutlar aşağıdaki gibidir (kullanmadan önce sisteminizin yedeğini almanız önerilir). Ayrıca bir sonraki yazıda replika kurarken, daha sonra cloud kurulumunda shardening***** ile birlikte replika kurarken (4 ayrı server kurulumunu simüle edeceğiz) bu kod bize biraz yardımcı olacak.

############ kurulum icin basit ayarlar, istedigimiz sekilde degistirebiliriz ###########
export SOLR_DIR='solr4'      # tum uygulama, konfigurasyon ve datalarin olacagi klasor
export SOLR_PORT='8082'      # solr'i kullanmak istedigimiz port
export TOMCAT_MPORT='8006'   # tomcat yonetim portu
export SOLR_VER='4.7.0'      # kullanmak istedigimiz solr versionu
export TOMCAT_VER='8.0.3'    # kullanmak istedigimiz tomcat versionu 
export SOLR_HOME='solr_home' # solr'a ait data ve konfigurasyonlarin bulunacagi klasor 
if [ -d "/Applications/" ]
then
  export JRE_URL='http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jre-7u51-macosx-x64.tar.gz'  # MacOS x64
else
  export JRE_URL='http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jre-7u51-linux-x64.tar.gz' # linux x64
fi
############ kurulum icin basit ayarlar, istedigimiz sekilde degistirebiliriz ###########

mkdir $SOLR_DIR # solr klasorunu olustur
cd $SOLR_DIR    # solr klasorune gir

# solr klasorunu diger islemler icin degiskene set et
export MYHOME=`pwd` #echo $MYHOME 

# ilgili solr, tomcat ve jre versiyonunu indir
wget "http://www.eu.apache.org/dist/lucene/solr/$SOLR_VER/solr-$SOLR_VER.zip"
wget "http://www.eu.apache.org/dist/tomcat/tomcat-`echo $TOMCAT_VER |cut -d'.' -f1`/v$TOMCAT_VER/bin/apache-tomcat-$TOMCAT_VER.zip"
wget -O jre.tar.gz --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" $JRE_URL jre.tar.gz

# indirilen zipli solr ve tomcat dosyalarini ac ve zipli dosyalari sil
unzip "apache-tomcat-$TOMCAT_VER.zip" && unzip "solr-$SOLR_VER.zip"
rm "apache-tomcat-$TOMCAT_VER.zip" && rm "solr-$SOLR_VER.zip"

# jre' yi arsivden cikart ve arsiv dosyasini sil
tar -xzvf jre.tar.gz && rm jre.tar.gz

# cikarlina jre klasorunu jre olarak yeniden adlandir
for file in jre*.jre; do mv "$file" "jre"; done

# sistem varsayilan JRE 'si yerine indirdigimiz jre'yi kullan
if [ -d "/Applications/" ]
then
  echo "JRE_HOME=$MYHOME/jre/Contents/Home" >  apache-tomcat-$TOMCAT_VER/bin/setenv.sh # MacOS x64
else
  echo "JRE_HOME=$MYHOME/jre" >  apache-tomcat-$TOMCAT_VER/bin/setenv.sh # linux x64
fi

# tomcat portunu istenilen portla degistir
sed -i.bak 's%%%g' apache-tomcat-$TOMCAT_VER/conf/server.xml

# tomcat/bin klasoru icindeki .sh uzantili dosyalara calistirma izni ver
chmod +x ./apache-tomcat-$TOMCAT_VER/bin/*.sh

./apache-tomcat-$TOMCAT_VER/bin/startup.sh # tomcat'i baslat
sleep 8 # tomcat'in hazir olmasi icin bir sure bekle (8 saniye)
./apache-tomcat-$TOMCAT_VER/bin/shutdown.sh # tomcat'i durdur

# solr ile gelen kutuphaneleri tomcat/lib klasorune kopyala
cp solr-$SOLR_VER/example/lib/ext/* apache-tomcat-$TOMCAT_VER/lib/

mkdir $SOLR_HOME # solr home klasorunu olustur

# solr ile gelen ornek solr uygulamasini solr home dizinine kopyala
cp -r solr-$SOLR_VER/example/solr/* $SOLR_HOME/

# solr'in basvuracagi kutuphane yolunu guncelle
sed -i.bak 's%

' > apache-tomcat-$TOMCAT_VER/conf/Catalina/localhost/solr.xml

# solr'i tek core ile calisacak sekilde konfigure et
echo '

' > $SOLR_HOME/solr.xml

 # tomcat'i baslat
./apache-tomcat-$TOMCAT_VER/bin/startup.sh

Sonuç:

Kurulum işlemi biraz kafa karıştırıyor gibi görünüyor olabilir, ayrıca paket yöneticilerini kullanarak tek komut ile yüklemeyi çok kolay gerçekleştirebilirsiz de. Bunu seçmeme nedenlerime gelince;

  • Bilgisayardan anladığımı zannetsem de Ubuntu üzerinde bir çok JRE/JDK kurulu olmasına rağmen varsayılan JRE 1.6 ‘ya ayarlı olduğundan sürekli hata almam. .bash_profile vd. dosyaları, sembolik linkleri tek tek karıştırıp doğrusu set etmem gerekiyor muhtemelen ya da bilgisayarcı çağırmam gerekiyor 🙂
  • Son uygulama sürümleri için işletim sisteminizi yükseltme zorunluluğu veya paket yöneticinizin sürümünü kullanmak zorunda kalmam,
  • Tek bilgisayarda aynı anda birden çok kopya/örnek (instance) çalıştırmayı veya farklı Solr/Tomcat kombinasyonlarını test etmeyi istemem,
  • Windows kullananlar için biraz daha platform bağımsız bir anlatım olmasını istemem (en azından hangi dosyalara path ve direktifler eklendiği anlaşılabiliyor)

Eğer kurulum yaptığım klasörü taşıdığımda da Solr çalışmaya devam etsin derseniz https://gist.github.com/mustafakirimli/9430373 adresindeki relative path ile konfigüre edilmiş kurulum scriptini kullanabilirsiniz.

Kaynak:

https://wiki.apache.org/solr/SolrInstall
https://gist.github.com/mustafakirimli/9416138
https://gist.github.com/mustafakirimli/9430373 (relative path ile)
http://en.wikipedia.org/wiki/Apache_Tomcat#Catalina

———————————————————————–
* Paket Yöneticileri
** Yazılım Dağıtımı
*** Jetty Web Sunucusu
**** Replika
***** Shard

Sizin fikriniz nedir? Lütfen aşağıdaki formu kullanarak yorum yapın.

(gerekli)
(gerekli)