FESS(ver13.16.0)環境の構築 for WSL2

WSL2上にFESSの環境を構築しようと思い立った。前記事にてUbuntu20.04(WSL2)に対してDockerの環境を構築する備忘録を残した。
本記事ではDockerインストール後の環境に対して、FESSをインストールした備忘録を示す。

WSL上にDockerを構築する記事はこちら
https://qiita.com/YUKI-SOKENDAI/items/8fd0d3ab9ace6ee0c241

***環境構築のバージョン***

- Elasticsearch ver7.16.2
- FESS ver13.16.0
- Java JDK ver11

docker composeを使って全文検索システム「FESS」を構築する方法もある。こちらの方が手軽。
https://mebee.info/2020/07/31/post-13168/

# 目次
1. [開発環境](#開発環境)
1. [インストール](#インストール)
   1. [インストール手順](#インストール手順)
   1. [Java JDKのインストール](#Java-JDKのインストール)
   1. [Elasticsearchのインストール](#Elasticsearchのインストール)
   1. [Elasticsearch pluginのインストール](#Elasticsearch-pluginのインストール)
   1. [FESSのインストール](#FESSのインストール)
   1. [FESSの起動と動作確認](#FESSの起動と動作確認)
1. [セットアップ用シェルスクリプト](#セットアップ用シェルスクリプト)
1. [おわりに](#おわりに)
1. [参考記事](#参考記事)  

# 開発環境
- Windows10 home
- Ubuntu 20.04 on WSL2

# インストール
## インストール手順
1. Java JDKのインストール
1. Elasticsearchのインストール
1. Elasticsearch pluginのインストール
1. FESSのインストール
1. FESSの起動と動作確認

## Java JDKのインストール

```bash
sudo apt-get install -y openjdk-11-jdk
sudo apt-get install -y openjfx
```

## Elasticsearchのインストール
apt-getでインストールできない。apt-getのインストールリストを更新する。

```bash
# install Elasticsearch
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install -y apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update
```

以下のコマンドを実行することでapt-getでインストール可能なelasticsearchの一覧を表示する。

```bash
sudo apt-cache madison elasticsearch
```

ver7.16.2もインストール可能であるはずである。
apt-getでelasticsearchをインストールする。
elasticsearch=7.16.2とするとバージョン7.16.2がインストールできる。

```bash
sudo apt-get install -y elasticsearch=7.16.2
```

## Elasticsearch pluginのインストール
FESSを使う上でElasticsearchを使用する訳だが、使用に当たり、いくつかのプラグインが必要。Elasticsearch ver7.16.2に必要なプラグインをインストール。

```bash
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.16.0
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.16.0
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.16.0
```

configsyncのみelasticsearch-pluginでインストールが出来なかったので、zipファイルをダウンロードし、unzipで展開した。

```bash
sudo mkdir -p /usr/share/elasticsearch/modules/configsync
sudo curl -o /usr/share/elasticsearch/modules/configsync/configsync.zip https://repo.maven.apache.org/maven2/org/codelibs/elasticsearch-configsync/7.16.0/elasticsearch-configsync-7.16.0.zip
sudo unzip /usr/share/elasticsearch/modules/configsync/configsync.zip
sudo rm /usr/share/elasticsearch/modules/configsync/configsync.zip
```


## FESSのインストール
githubからdebファイルをcloneする。
debファイルをdpkgコマンドで展開。

```bash
wget https://github.com/codelibs/fess/releases/download/fess-13.16.0/fess-13.16.0.deb
sudo dpkg -i fess-13.16.0.deb
```

### configファイルなどの編集
#### Elasticsearch
/etc/elasticsearch/elasticsearch.ymlにconfigsync.config_path: /var/lib/elasticsearch/configを追加。nanoかパイプラインで追加する。

方法１

```bash
sudo nano /etc/elasticsearch/elasticsearch.yml
```

方法2

```bash
echo "configsync.config_path: /var/lib/elasticsearch/config" >> /etc/elasticsearch/elasticsearch.yml
```

#### FESS
/usr/share/fess/bin/fess.in.shを編集する。

```bash
sudo nano /usr/share/fess/bin/fess.in.sh
```
/usr/share/fess/bin/fess.in.shを以下のように編集。

```bash
# ES_HTTP_URL=http://localhost:9200
# ES_TRANSPORT_URL=localhost:9300
FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
FESS_JAVA_OPTS="$FESS_JAVA_OPTS -Dfess.port=8080"
```


## FESSの起動と動作確認
ElasticsearchとFESSの起動。
先にElasticsearchを起動する。

```bash
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo /bin/systemctl enable fess.service
sudo /bin/systemctl restart elasticsearch.service
sudo /bin/systemctl restart fess.service
```

ブラウザでhttp://localhost:8080/にアクセスしてみる。
***FESSの画面が表示されれば環境構築完了である。***


# セットアップ用シェルスクリプト
以上のセットアップを行うシェルスクリプトを以下にまとめた。

```bash
# FESS installation shell scripts
# written by Y.Abe

sudo apt-get install -y unzip

# install java
sudo apt-get install -y openjdk-11-jdk
sudo apt-get install -y openjfx

# install Elasticsearch
## Updatet apt-get list
## Import the Elasticsearch PGP Keyedit
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
## Installing from the APT repositoryedit
sudo apt-get install -y apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update
sudo apt-cache madison elasticsearch

# install elasticsearch ver. 7.16.2
sudo apt-get install -y elasticsearch=7.16.2

# auto booting elasticsearch after OS booting
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
# elasticsearch check
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service
sudo systemctl stop elasticsearch.service


### 2022/02/09 stacked install elasticsearch plugins->Solved ###
# install elasticsearch(ver.7.16.2) plugins for FESS(ver.13.16.0)
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.16.0
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.16.0
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.16.0

#sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-configsync:7.16.0
sudo mkdir -p /usr/share/elasticsearch/modules/configsync
sudo curl -o /usr/share/elasticsearch/modules/configsync/configsync.zip https://repo.maven.apache.org/maven2/org/codelibs/elasticsearch-configsync/7.16.0/elasticsearch-configsync-7.16.0.zip
sudo unzip /usr/share/elasticsearch/modules/configsync/configsync.zip
sudo rm /usr/share/elasticsearch/modules/configsync/configsync.zip

#sudo nano /etc/elasticsearch/elasticsearch.yml
echo "configsync.config_path: /var/lib/elasticsearch/config" >> /etc/elasticsearch/elasticsearch.yml

# install FESS ver.13.16.0
wget https://github.com/codelibs/fess/releases/download/fess-13.16.0/fess-13.16.0.deb
sudo dpkg -i fess-13.16.0.deb

# edit FESS config file
sudo nano /usr/share/fess/bin/fess.in.sh
## # ES_HTTP_URL=http://localhost:9200
## # ES_TRANSPORT_URL=localhost:9300
## FESS_DICTIONARY_PATH=/var/lib/elasticsearch/config/
## FESS_JAVA_OPTS="$FESS_JAVA_OPTS -Dfess.port=8080"
# read config file
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo /bin/systemctl enable fess.service
sudo /bin/systemctl restart elasticsearch.service
sudo /bin/systemctl restart fess.service
```

# おわりに
本記事ではWSL2上のUbuntu 20.04にFESSのインストール、環境構築を行う備忘録を残した。FESSはバージョン7.16.2、Elasticsearchはバージョン13.10.0を使用した。別記事でdocker-composeを使ったFESSの環境構築方法なども紹介されている。そちらも参考にすると良いと思う。

- docker composeを使って全文検索システム「FESS」を構築する手順
- https://mebee.info/2020/07/31/post-13168/

本記事にて示した方法に不備、間違いがあればじゃんじゃんコメントください。

# 参考記事
1. Ubuntu 18.04 に Fess 13.7 をインストールしてみる
   - https://qiita.com/tabizou/items/73ec6f868b16ca30aed5
1. Elasticsearchの簡単インストール【Ubuntu 20.04】
   - https://self-development.info/elasticsearch%E3%81%AE%E7%B0%A1%E5%8D%98%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%80%90ubuntu-20-04%E3%80%91/
1. FESSとElasticsearchのバージョン
   - https://fess.codelibs.org/ja/downloads.html
1. FESSインストール
   - https://fess.codelibs.org/ja/13.9/install/install.html
1. Ubuntu 18.04 に fess をインストールする
   - https://qiita.com/kanose_migi/items/40fae1fb7ddd5011ef5c
1. Elasticsearch plugins
   - https://repo1.maven.org/maven2/org/codelibs/
1. Elasticsearch pluginsインストール
   - https://fess.codelibs.org/ja/13.16/install/install.html