おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

solr をさくらVPSのサーバで使う

rails の本番サーバ(さくらVPS)に全文検索エンジンの Sunspot をインストールするまでの設定をまとめました。

前提

sunspot を使っているRailsアプリを/opt/yourapp/currentに置いていて、かつ同じサーバで solr サーバを立てる前提です。別サーバに solr を立てる場合もそれほど手順は変わらないと思うので、適宜脳内変換してください。

ほとんどの部分は Ubuntu 10.04 Tomcat6 and Solr 1.4 Installation Steps: · sunspot/sunspot Wiki と同じです。

関連ライブラリのインストール

java と ant を yum でインストールします。

sudo yum install java-1.7.0-openjdk.x86_64 ant.x86_64

solr 用のユーザ solr を作っておきます。

sudo useradd solr

tomcat をインストール。tomcat7系だとなにやら不具合あるらしいので、安全策で6系をダウンロード。

cd /opt
sudo wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.tar.gz
sudo tar zxvf apache-tomcat-6.0.36.tar.gz
sudo mv apache-tomcat-6.0.36 tomcat6
sudo chown solr:solr -R tomcat6

tomcat 管理用ユーザの設定をします。

sudo emacs tomcat6/conf/tomcat-users.xml 

下記を追記。password は適宜変更してください。

  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="yourpassword" roles="manager,admin"/>

tomcatが動くかテスト。

sudo tomcat6/bin/catalina.sh run

Server startup in 666 msみたいなのが表示されたらおkなので ctrl-c で止めます。続いて tomcat の init script を用意します。

cd /etc/init.d
sudo wget https://gist.github.com/willnet/4461426/raw/6d629796c1db89f4bfa434fdf133dfc48ee7db16/tomcat6
sudo chmod 755 tomcat6

できたら一応ちゃんと動くかチェックします。

sudo /etc/init.d/tomcat6 start
sudo /etc/init.d/tomcat6 stop

solr のインストール

続いて solr をインストールします。最近は4系がでていますが、すんなり導入できるか心配だったので安全策で 1.4 系を入れることにします。ホームディレクトリに solr をダウンロード。

cd
wget http://archive.apache.org/dist/lucene/solr/1.4.1/apache-solr-1.4.1.zip
unzip apache-solr-1.4.1.zip
cd apache-solr-1.4.1/
ant dist
ant example

solr 単体で動くかテスト。

cd example
java -jar start.jar

http://yourdomain:8983/solr/adminにアクセスしてちゃんとページが表示されたらおkです。yourdomain の部分は適宜変更してください。表示を確認できたら ctrl-c でサーバを止めます。

solr の設定

続いて solr の設定。

cd /opt
sudo mkdir -p solr/example
sudo cp -r ~/apache-solr-1.4.1/example/solr/* solr/example
sudo cp ~/apache-solr-1.4.1/dist/apache-solr-1.4.1.war solr/example/
sudo emacs /opt/tomcat6/conf/Catalina/localhost/solr.xml

下記のように書きます。

<Context docBase="/opt/solr/example/apache-solr-1.4.1.war" debug="0" crossContext="true">
  <Environment name="solr/home" type="java.lang.String" value="/opt/solr/example" override="true"/>
</Context>

所有ユーザを変更しておきます。

sudo chown solr:solr /opt/tomcat6/conf/Catalina/localhost/solr.xml

コンフィグファイルをバックアップ。

sudo mv /opt/solr/example/conf/solrconfig.xml /opt/solr/example/conf/solfconfig.xml.original.bck

さらに、 rails アプリにある solrconfig.xml をコピーします。最初シンボリックリンクでどうにかしようかと考えたけれど、solr と rails を別サーバにしたら結局分けないといけないのでコピーで対応しました。

sudo cp  /opt/yourapp/current/solr/conf/solrconfig.xml /opt/solr/example/conf/
sudo emacs /opt/solr/example/conf/solrconfig.xml

下記の行を

<dataDir>${solr.data.dir:./solr/data}</dataDir>

下記のように変更します。

<dataDir>${solr.data.dir:/opt/solr/example/data}</dataDir>

schema.xml も同様にコピー。

sudo mv /opt/solr/example/conf/schema.xml /opt/solr/example/conf/schema.xml.original.bck 
sudo cp /opt/yourapp/current/solr/conf/schema.xml /opt/solr/example/conf

所有ユーザを変更します。

sudo chown -R solr:solr /opt/solr

solr の確認

これで solr 側の設定も完了なはずなので、tomcat を起動します。

sudo service tomcat6 start

そして http://yourapp:8080/solr/admin にアクセスするとエラー。あれれ…。直接 tomcat を起動してみます。

sudo service tomcat6 stop
sudo /opt/tomcat6/bin/catalina.sh run

これで http://yourapp:8080/solr/admin にアクセスするとちゃんと表示されます。ctrl-c で止めて再度 service から起動すると

sudo service tomcat6 start

なぜかちゃんと表示されます…。とりあえずこれでおkのようです。なんででしょう。

sunspot の設定

最後にRails.root/conf/sunspot.yml を編集します。

production:
  solr:
    hostname: localhost
    port: 8080
    log_level: WARNING

これで production 環境で solr を使う準備ができました。やったね。