全文検索システムを立ち上げたくなったのでFess環境を構築(1)


WebサイトやECサイトが複数動いていると、1つの画面からまとめて横断検索したいと要望がでてきます。かつては、Google Site Searchがありましたが、2018年4月1日で終了です。Google Site Searchは有料でしたが広告なしでした。無料のGoogle カスタム検索エンジンは無料ですが広告が表示されます。

そこで、検索界隈でちらほら聞く「Fess」を使ってみます。5分で作れる全文検索システムと謳っており、検証目的に1~2週間程度に期間を区切って運用してみることにしました。

運用環境:IBM Bluemix IaaS

旧SoftLayer、現在のBluemix IaaS 上に、下記構成の仮想サーバーを用意します。普段、AWSやAzure、IDCFクラウド環境などを使いますが、Bluemixにはアウトバウンド通信の無料枠があるので長期運用になるとコスト面で有利かもしれません。
また、本番運用ではElasticsearchを別途用意する必要があり、BluemixにCompose for Elasticsearchがあるので、請求書が1つにまとめられて会社の経理を通しやすいという目論見もあります。

  • ロケーション(データセンター):San Jose 3 --> 安くて日本からの接続がしやすい。
  • コンピューティング・インスタンス:2 × 2.0GHz --> 2コアという意味です。
  • RAM:4GB --> ElasticSearchを別途インストールするかもしれないので、4GB以上必要。
  • オペレーティング・システム:Ubuntu Linux 16.04 LTS Xenial Xerus Minimal Install (64 bit)
  • 1番目のディスク:25GB

オーダーし、仮想サーバーが起動するとパブリックIPが1つ割り当てられていますので、PuttyやTera Termなどを使って、SSH接続します。

Fessのインストール

仮想サーバーの初期設定

まず、UFWを用いてファイアウォールを設定します。UFWは、Ubuntuに付属するソフトウェアファイアウォールで非常に簡単に使用できます。

SSH接続用のポートを開放します。
# ufw allow 22/tcp

8080は、Fessで使うポートです。
# ufw allow 8080

ログを取得する設定も実行しましょう。
# ufw logging low

Bluemix IaaSのモニタリングツール用のポート開放
# ufw allow from 10.0.0.0/8 to any port 48000:48020 proto tcp

ファイアウォールを有効化します。
# ufw enable

次に、既存のソフトウェアを更新するとともに、サーバーの時刻表示を日本時間に変更します。ついでにJavaも入れましょう。

# apt-get update -y && apt-get upgrade -y
# apt-get install wget unzip sysv-rc-conf apache2 -y
# timedatectl set-timezone Asia/Tokyo
# add-apt-repository ppa:webupd8team/java -y
# apt-get update -y
# apt-get install oracle-java8-installer -y
# update-alternatives --config java
# nano /etc/environment

    JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre/bin/java" を追記
    Ctrl+xキーを押し、yキーで保存

# source /etc/environment
# reboot

サーバーを再起動し、SSH接続し直します。次は、Fess本体をインストールし、自動起動するシェルスクリプトをセットします。

Fessのインストールとシェルスクリプトの作成

仮想サーバーの初期設定が終わりましたので、本題に入ります。
先ず、Fessの最新版のソースコードのダウンロードURLを確認します。Zip版を使用します。ここでは、11.3.1を使用しています。
https://github.com/codelibs/fess/releases

# cd /usr/local/src/
# wget https://github.com/codelibs/fess/releases/download/fess-11.3.1/fess-11.3.1.zip
# unzip fess-11.3.1.zip
# cd /
# nano fess_start.sh

    #!/bin/sh
    cd /usr/local/src/fess-11.3.1/bin/
    nohup ./fess &
    ps $!
    Ctrl+xキーを押し、yキーで保存

# chmod a+x fess_start.sh
# nano /etc/rc.local

    exit0の前に、./fess_start.sh を追記
    Ctrl+xキーを押し、yキーで保存

# reboot

Fessを終了する場合、Fessのプロセスを終了する必要があります。Fessのプロセス番号を知るには、SSH接続し、下記を実行します。

# ps aux | grep fess

サーバーが再起動され、しばらく待った後、Bluemix IaaSの管理画面に表示されている仮想サーバーのパブリックIPをもとに、http://パブリックIP:8080 にアクセスします。Fessの画面が表示されるはずです。Elasticsearchを用意、連携していないため、開発モードとして起動しています。パブリックIPではなくFQDNを使用する場合は、DNSの方を設定します。

管理画面は、画面右上の「ログイン」をクリックし、ユーザー名とパスワードを入力します。初期設定でともにadminです。

まとめ

仮想サーバーの用意含めて実質30分くらいで用意できました。余裕があれば、不正アクセスを防ぐ「Fail2ban」を追加すれば総当たり攻撃対策になります。Fessの初期設定方法は、公式ドキュメントを見て作業します。