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 を使う準備ができました。やったね。