前回、こんな(Cent OS 7にてオープンソースの検索サーバーFessを導入するまで)記事かきましたけど、なんやかんやあって、Fessを入れ直さなきゃいけないことになったので、せっかくだから最新版を入れようとた際の備忘録。ちなみに、前回のFessはきちんと動いてますが、諸事情により別のサーバーを使わざるを得ないことになったのです。
前回入れたのは、Fessの12.1.2でしたが、2019年6月21日現在の最新は、13.1.0ですので、そのRPM版を入れます。
環境は、お名前.comのVPS(KVM)サーバーで、OSは、CentOS 7です。
https://www.onamae.com/server/vps/
こちらの、6コアCPU、8GBメモリー、HDD800GBになります。
前回のFess 12.1.2をインストールしたサーバーは、CPUはXeonであること以外忘れちゃいましたが、メモリ32GB、SSD900GBくらいだったのでそれに比べるとダウングレードした感も。
前回でサーバーの基礎的な部分を学んだのもあって今回はなかなかスムーズ。無駄の少ない手順だと思います。なぜ、前回、httpやhttpsを許可しているのか今考えると謎ですね・・・成長した証と思うことにします(笑)
Java 11をインストール
Fess 13.1.0には、Java 11で動くってことで、Java 11をインストールします。
# yum install -y java-11-openjdk java-11-openjdk-devel
Elasticsearchのインストール
Fess 13.1.0に対応するElasticsearchは、7.1.Xなのでそれをインストールします。yumでインストールすることにしたんですが、その前にPGP keyのインポートが必要とのことで、こちらを参考にしつつ、インポート。
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
そしたら、elasticsearch.repoファイルを作成します。
# vi /etc/yum.repos.d/elasticsearch.repo
ファイル内容は以下の通り。
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
保存したら、次は、Elasticsearchのインストールです。
# yum install -y elasticsearch
そしたら、Fessの公式インストールガイドにも書いてある通り、ElasticsearchにFess用の設定を記述します。以下のファイルを開いて、
# vi/etc/elasticsearch/elasticsearch.yml
以下を追記します。(とりあえず、最下行に追記しました)
configsync.config_path: /var/lib/elasticsearch/config
Fessのインストール
さて、お待ちかねFessのインストールです。まずは、Fess 13.1.0をダウンロードします。Lオプションでリダイレクトを許可しておかないとダウンロードできないのでご注意。
# curl -OL https://github.com/codelibs/fess/releases/download/fess-13.1.0/fess-13.1.0.rpm
ダウンロードしたら、インストールします。
# rpm -ivh fess-13.1.0.rpm
次に、Fess用のElasticsearchプラグインをインストールします。
# /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.1.0
# /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.1.0
# /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-configsync:7.1.0
# /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-dataformat:7.1.0
# /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.1.0
Fessの設定ファイル(fess.in.sh)も変更します。
# vi /usr/share/fess/bin/fess.in.sh
fess.in.shの中で以下の部分がコメントアウトされているので、コメントアウトは外します。
#ES_HTTP_URL=http://localhost:9200
#FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
↓
ES_HTTP_URL=http://localhost:9200
FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
Fessの起動
そしたらElasticsearchとFessを有効にします。
# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl enable fess.service
ファイアーウォールの設定を変更してFess用のポート8080を許可します。
# firewall-cmd --permanent --add-port=8080/tcp
# firewall-cmd --reload
Fessの前に、Elasticsearchを起動します。
# systemctl start elasticsearch.service
Elasticsearchが動いているか確認します。
# curl localhost:9200
JSONが返ってくれば成功です。そしたら、Fessを起動します。
# systemctl start fess.service
OutOfMemoryエラー発生
これで万事OKかと思ったものの、ログ(/var/log/fess/fess.log)を見るとなんかエラーが起こってました。詳細は割愛しますが、thumbnail関連でヒープメモリー不足を起こしているようでした。
これの設定はどこかと調べていると/etc/fess/fess_config.propertiesに該当の記述がありました。ファイルの中身を見てみましょう。
# vi /etc/fess/fess_config.properties
以下のような記述があり、どうやらthumbnail周りは、128MBとなっていたので、ひとまず256MBまであげてみました。
jvm.thumbnail.options=\
(略)
-Xms128m\n\
-Xmx128m\n\
↓
jvm.thumbnail.options=\
(略)
-Xms256m\n\
-Xmx256m\n\
てか、128MBって昨今だと少ないイメージあるけど、他の人はエラーでてないんだろうか・・・?それはさておき、fessの再起動(一応、daemon-reloadも)します。
# systemctl stop fess.service
# systemctl daemon-reload
# systemctl start fess.service
これでしばらく様子を見ましたが、エラーは起こらなくなりました。
Fessの12.1.2と13.1.0の違い
自分がぱっと使ってみたところで違いというと
- fess.in.shにデフォルトだとES_TRANSPORT_URLの記述がなくなっていました。必要なくなったんでしょうか?
- JSONPがデフォルトだと使えなくなっていました。Fess 12.1.2の時は検索結果のAPI呼び出しで、Same-Origin-Policy回避のためにJSONPを使っていたんですが、こっちのサーバーにFess 13.1.0を入れて呼び出し元のIPをこっちのサーバーIPに変えたらダメでした。FessからJSONPとして返ってこないようでした。どうやら、Fess公式GitHubのコミット内容を見てたら、JSONPはデフォルトだとオフになっているようです。ためしに、api.jsonp.enalled=trueにしてみたんですが、JSONP使えませんでした・・・なんでだろう?でも、CORS設定もいつの間にかどこかのバージョンで追加されているみたいで、デフォルトだとなんでも許可しているみたいで、普通にJSONで呼び出しができましたので、まぁ、いいかというところです。(JSONP→JSONにしたら呼び出し元のVue.jsとtypescriptの関係で、少し苦労したのは内緒です)
- 上述の通り、ヒープメモリー不足が起きました。こっちのサーバーでもFess 12.1.2を入れてみたけど、ヒープメモリー不足は起きなかったので、メモリーを食う作りになったんでしょうか?
新しいサーバーはKVMだからって、初期化を3,4回して、Fessのインストールに関して色々試してみたおかげで、だんだん洗練されてきました(笑)。もう、Fessのインストールは怖くありません。たぶん・・・。