Elasticsearch-8.2.2 と 7.17.4 を Windows10 と Ubuntu22 で動かす方法

社内用に Nextcloud サーバーを構築している最中に、全文検索出来るエンジンが有ると言うことなので構築方法の模索と評価していました
そこで Elasticsearch というエンジンを使うと Nextcloud のプラグインで全文検索できるように成りました
で、この Elasticsearc と言うのが結構な曲者で、思わぬ時間を取られてしまったので忘れないように書いておこう…

0.はじまり

普段はさくらインターネットさんのレンタルサーバーで Nextcloud を動かしているのですが、データーベースの都合で最新の Nextcloud を使うことができません
そこで、オンプレミスで動かそう!とおもい、起草時で最新版の Ubuntu (22.04) に Nextcloud (24.0.1) を入れました
プラグインの一覧を見ていた際に、検索 と言う項目にテキストサーチ を見付けたので入れて見ようと思ったのが切っ掛けです

ですが、プラグインを追加してみたのですが、ちっともテキスト検索ができません
 
調べてみると Elasticsearch と言うシステムが必要で、別途インストールする必要が有るという所まで判りました
で、実際の Nextcloud の設定ページはこんな感じになりました

個人情報はないよな…
「ナビゲーションアイコン」と言うのにチェックを入れるとヘッダーのカレンダーの横にルーペのアイコンが表示され、クリックすると検索ページや設定などが表示されます
通常の、通知アイコン(ベルのアイコン)の横の検索でも検索できる様です

これは、普通に検索をかけた場合と全文検索のプションで検索をかけた様子です
Excel のシートと PDF の内部を検索している様子で、結構有り難い機能です
 
Elasticsearch の項目に「サーブレットのアドレス」とあり、ここではローカルを指定していますが、ローカルで動かすにはそれなりのリソースが必要になってしまいます
できれば、どっかの余剰なサーバーに移行できればなぁ..と思って構築する方法の模索をはじめました
最初に見たとき、サーブレットかぁ~と思ったのはないしょ
でも、全文検索と言えば Lucene だよなぁ~
 

1. Elasticsearch

Elasticsearch は Apache の検索エンジンを元にしているようで Java で動きます
鬼門の Java かぁ..
起草時点で Elasticsearch は 7.x と 8.x が有るようです
 
VMware で飼っている Ubuntu に入れて見ました
入れ方などの詳細は別記の予定です
 
試して見たところ、Elasticsearch が常駐して立ち上がり、Nextcloud がそこに問い合わせているようです
http://lohslhost:9200/ へ Nextcloud が問い合わせてその都度、インデックスを作成しているのかな..
 
Nextcloud の設定で、ライブで問い合わせるようです
その場合は occ で fulltextsearch:live -q を指定して、常時起動しないといけないようです
サービスとして登録する方法を説明しているサイトは一杯在りますので必要なら参考するようにします
 
ウチの場合は、そんなにリアルタイムな処理が必要な訳ではありませんので、cron から適度な間隔で fulltextsearch:index -q を実行しようかなぁ…とおもって評価中です
 
実際に、最初に既存のファイのインデックスを作成する必要があるので、手動でイッパツ動かす必要があります
 
sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:index
 
これが動くようになるまでにも、結構な手順が必要でしたが、それは別途…
 

2. Ubuntu

Ubuntu で Elasticsearch を動かすには、配布元のダウンロードページで説明してある apt-get の所をクリックすると説明ページを表示します
Elasticsearch は、なにかライセンスを変更中だそうです
最初に検索して見付けたページでは Elasticsearch 7.x の説明でしたので最初に 古いバージョンをインストールして動かしてみました
 
7.x と 8.x では http から https での接続がデフォルトとなり 8.x ではパスワードを初回の起動時に表示されるログから拾わないといけなくなりました
 
user@user:~$ curl 127.0.0.1:9200
{
"name" : "user",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "c2PZTIczTS-KA0XXXXX-XX",
"version" : {
"number" : "7.17.4",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "79878662c54c886ae89206c685d9f1XXXXXXXXXX",
"build_date" : "2022-05-18T18:04:20.964345128Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
user@user:~$

これは、Elasticsearch 7.x を動かして有るサーバーで動作確認をした応答です

3.

Widows は、そのまま配布元で配布しているものを拾ってきて解凍すれば動きますのでインストールに関しての特記はありません
起草時点では Elasticsearch-8.2.2 を配布していましたので拾ってきました
 
.zip で配布されているものを拾ってきて、適切なフォルダーに解凍します
 
最初に解凍したフォルダーの bin¥elasticsearch.bat のプロパティーを選択して「全般」の「セキュリティー」を確認して「許可」します
 
次に、コマンドプロンプトで解凍したフォルダーに移動したら bin¥elasticsearch.bat を起動します
暫く沈黙した後、一杯ログを吐き出します
 

------------------------------------------------------------------------------------------------------------------------
-> Elasticsearch security features have been automatically configured!
-> Authentication is enabled and cluster connections are encrypted.
 
-> Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
QkZ5a8YfLugH6L1SXXXX
 
-> HTTP CA certificate SHA-256 fingerprint:
d51434d37ba09f94ace0eeed136a7e5ddcbdf952652841e5f6183f1c300XXXXX
 
-> Configure Kibana to use this cluster:
* Run Kibana and click the configuration link in the terminal when Kibana starts.
* Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  XXXXXXXXXXI4LjIuMiIsImFkciI6WyIxNzIuMTYuMjA1Ljk1OjkyMDAiXSwiZmdyIjoiZDUxNDM0ZDM3YmEwOWY5NGFjZTBlZWVkMTM2YTdlNWRkY2JkZjk1MjY1Mjg0MWU1ZjYxODNmMWMzMDBmODJjZCIsImtleSI6IjNOdV9Jb0VCZ2NYOTFLeVBfaGFpOmdjQ2g3MjlOUzNpOEw2NWpCXXXXXXXXXX==
 
-> Configure other nodes to join this cluster:
* On this node:
- Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
- Uncomment the transport.host setting at the end of config/elasticsearch.yml.
- Restart Elasticsearch.
* On other nodes:
- Start Elasticsearch with `bin/elasticsearch --enrollment-token `, using the enrollment token that you generated.
------------------------------------------------------------------------------------------------------------------------
 

 
こんな感じで途中にパスワードが表示されていますので、メモを取るなりしておきます
ログにでも吐いてくれると良いんですが、まだまだ修行中なので見付けることができませんでした
パスワードが表示している上の行にパスワードのリセット方法が書いてありますので、どうしても思い出せない場合はパスワードをリセットしましょう ^^/
 
で、curl で動作確認しようとすると次の様になります

C:\Users\user>curl 127.0.0.1:9200
curl: (52) Empty reply from server
 
C:\Users\user>

 
ここで、curl で承認させる方法がちょっと判らなかったので ブラウザーでアクセスしてみます
多分、base64 とかでエンコードして送らないとダメだと思うのですが、調査は先に送っておきます(今回はコレが主題ではない ^^; )
※ 追記参照
 

 

 
https:// でアクセスしてます
 
アカウントを聞いてきますので、elastic と、さっきのログで控えたパスワードを入力します
 
ちょこっと書きましたが、Elasticsearch が 8.x になって http -> https に既定が変更されたそうです
で、こうなったそうです
 
特にこれでも問題は無いのですが、7.x と同じモード (http で利用できる) にする方法も有り、それも余り面倒ではありません
 
追記:
 

C:\Users\user>curl.exe https://elastic:QkZ5a8YfLugH6L1XXXXX@127.0.0.1:9200 -k
{
"name" : "DESKTOP-XXXXXXX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "8fQ5Blq1QHuqXXXXXXXXXX",
"version" : {
"number" : "8.2.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "9876968ef3c745186b94fdabd4483eXXXXXXXXXX",
"build_date" : "2022-05-25T15:47:06.259735307Z",
"build_snapshot" : false,
"lucene_version" : "9.1.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
 
C:\Users\user>

アクセスできました!
そうだ! -k オプションだ!
 
Nextcloud のサーブレット欄の設定はこんな感じで行います
 
ちなみに この URL をブラウザーで指定しても認証します
 

4. 設定

以下、Nextcloud は Ubuntu で、Elasticsearch は と Ubuntu の両方で動きます
Nextcloud の「設定」-「全文検索」-「サーブレットのアドレス」を適宜、切り替えています
 
172.16.XXX.XXX とる場合は に向けて、127.0.0.1 とある場合は Windows のコマンドプロンプトと Linux のコマンドとも自局に向けて処理していますので、適宜に読み替えてください
 
Elasticsearch を解凍したフォルダーの config/elasticsearch.yml がテキストの設定ファイルです
この中に

# Enable security features
xpack.security.enabled: true

 
このように設定されていますので、これを false に変更して再起動すれば 7.x と同じように認証無しで動きます
せっかくセキュアに成ったのに戻してしまうのはどうかとも思うのですが、オンプレミスで動かすので問題も起きにくいと思います
 
Elasticsearch は起動したバッチファイルに CTRL+C を送信すれば停止します
 

C:\Users\user>curl.exe http://127.0.0.1:9200
{
"name" : "DESKTOP-XXXXXXX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "8fQ5Blq1QHuqXyUXXXXXXX",
"version" : {
"number" : "8.2.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "9876968ef3c745186b94fdabd4483e014XXXXXXX",
"build_date" : "2022-05-25T15:47:06.259735307Z",
"build_snapshot" : false,
"lucene_version" : "9.1.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
 
C:\Users\user>

 
こんな感じで応答してくれました
上の追記分と同じですよね…
 
余談:
R:\elasticsearch-8.2.2>bin\elasticsearch.bat --help
Starts Elasticsearch
 
Option Description
------ -----------
-E <KeyValuePair> Configure a setting
-V, --version Prints Elasticsearch version information and exits
-d, --daemonize Starts Elasticsearch in the background
-h, --help Show help
-p, --pidfile <Path> Creates a pid file in the specified path on start
-q, --quiet Turns off standard output/error streams logging in console
-s, --silent Show minimal output
-v, --verbose Show verbose output
 
R:\elasticsearch-8.2.2>

この -E オプションを指定するとちょっとしたパラメータの確認などが楽になります
-E discovery.type=single-node -E network.host=172.16.XXX.XXX の様に指定します
 
 
5. 上手く動かない

https で接続するモードでは、Nextcloud が上手く動かないようです
(追記:うそですので以下を確認してください)
# Enable security features
xpack.security.enabled: true

このモードの時に動作確認すると、こんな感じです
user@user:/var/www/nextcloud$ sudo -u www-data -g www-data php -f occ fulltextsearch:check
Full text search 24.0.0
 
- Search Platform:
Elasticsearch 24.0.0 (Selected)
{
"elastic_host": [
"https://elastic:********@172.16.XXX.XXX:9200"
],
"elastic_index": "nextcloud_index",
"fields_limit": "10000",
"es_ver_below66": "0",
"analyzer_tokenizer": "standard"
}
 
- Content Providers:
Files 24.0.0
{
"files_local": "1",
"files_external": "1",
"files_group_folders": "0",
"files_encrypted": "0",
"files_federated": "0",
"files_size": "32768",
"files_pdf": "1",
"files_office": "1",
"files_image": "0",
"files_audio": "0"
}
user@user:/var/www/nextcloud$ sudo -u www-data -g www-data php -f occ fulltextsearch:test
 
.Testing your current setup:
Creating mocked content provider. ok
Testing mocked provider: get indexable documents. (2 items) ok
Loading search platform. (Elasticsearch) ok
Testing search platform. fail
In StaticNoPingConnectionPool.php line 64:
 
No alive nodes found in your cluster
 
 
fulltextsearch:test [--output [OUTPUT]] [-j|--json] [-d|--platform_delay PLATFORM_DELAY]
 
user@user:/var/www/nextcloud$ sudo -u www-data -g www-data php -f occ fulltextsearch:reset
reset.
user@user:/var/www/nextcloud$ sudo -u www-data -g www-data php -f occ fulltextsearch:index
 
Options: []
Memory:
lq Indexing qqqq
x Action:
x Provider: Account:
x Document:
x Info:
x Title:
x Content size:
x Chunk: /
x Progress: /
mqq
lq Results qqqq
x Result: 0/0
x Index:
x Status:
x Message:
x
x
mqq
lq Errors qqqq
x Error: 0/0
x Index:
x Exception:
x Message:
x
x
mqq
## x:first result ## c/v:prec/next result ## b:last result
## f:first error ## h/j:prec/next error ## d:delete error ## l:last error
## q:quit ## p:pause
 
In Connection.php line 675:
 
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/nextcloud_index] contains unrecognized parameter: [include_type_name]"}],"type
":"illegal_argument_exception","reason":"request [/nextcloud_index] contains unrecognized parameter: [include_type_name]"},"status":400}
 
 
fulltextsearch:index [--output [OUTPUT]] [-r|--no-readline] [--] []
 
user@user:/var/www/nextcloud$

 
調べたら、Elasticsearch 8.x は Nextcloud 24 で利用できないそうです
https://github.com/nextcloud/fulltextsearch/issues/525
 
これによると、include_type_name というパラメータが 8.x で廃止になりエラーするそうです
:先人の教えを無視すると無駄に時間を喰う…
 
残念…
 
6. 旧版を入手

起草時点では、旧版は配布元のページの Summary 欄の 「View past releases →」を辿ると入手出来ます
起草時点で 版は elasticsearch-7.17.4 が入手可能です
32bit 版は無い様で 32bit の余剰機では動かない…
 
入手したら、.bat のプロパティーを確認して起動する…
C:\Users\user>curl.exe http://127.0.0.1:9200/
{
"name" : "DESKTOP-XXXXXXX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IoZUg33MQKW5XXXXXXXXXX",
"version" : {
"number" : "7.17.4",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "79878662c54c886ae89206c685d9f1051a9d6411",
"build_date" : "2022-05-18T18:04:20.964345128Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
 
C:\Users\user>

ここまでは問題なし…
C:\Users\user>curl.exe http://172.16.XXX.XXX:9200/
curl: (7) Failed to connect to 172.16.XXX.XXX port 9200 after 2009 ms: Connection refused
 
C:\Users\user>

うーん、ネットワークの指定をしないとだめか..
elasticsearch.yml の次の指定を修正して見る
network.host: 172.16.XXX.XXX
http.port: 9200

まだ、リフューズされてしまうなぁ…
あ!さっきまで散々調べた single-node を指定しないとダメか!
R:\elasticsearch-7.17.4>bin\elasticsearch.bat -E discovery.type=single-node
単発の調整ならこれの方が楽!
C:\Users\user>curl.exe http://172.16.XXX.XXX:9200/
{
"name" : "DESKTOP-XXXXXXX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IoZUg33MQKW5XXXXXXXXXX",
"version" : {
"number" : "7.17.4",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "79878662c54c886ae89206c685d9f1051a9d6411",
"build_date" : "2022-05-18T18:04:20.964345128Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
 
C:\Users\user>

繋がった!
で動く Elasticsearch に向けて Nextcloud のサーブレットのアドレスを設定し直して、Ubuntu の Nextcloud で試して見よう!
root@user:~# sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:check -q
{
"elastic_host": [
"http://172.16.XXX.XXX:9200"
],
"elastic_index": "nextcloud_index",
"fields_limit": "10000",
"es_ver_below66": "0",
"analyzer_tokenizer": "standard"
}{
"files_local": "1",
"files_external": "1",
"files_group_folders": "0",
"files_encrypted": "0",
"files_federated": "0",
"files_size": "32768",
"files_pdf": "1",
"files_office": "1",
"files_image": "0",
"files_audio": "0"
}

を!良い感じ ^^b
root@user:~# sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:test -q
 
In IndexService.php line 251:
 
please add ingest-attachment plugin to elasticsearch
 
fulltextsearch:test [--output [OUTPUT]] [-j|--json] [-d|--platform_delay PLATFORM_DELAY]

これは、前に見たことがある!
https://www.elastic.co/guide/en/elasticsearch/plugins/current/ingest-attachment.html
 
プラグインをインストールするバッチファイル elasticsearch-plugin.bat のプロパティーを確認して、セキュリティーの「許可」をチェックして実行します
R:\elasticsearch-7.17.4> bin\elasticsearch-plugin.bat install ingest-attachment
-> Installing ingest-attachment
-> Downloading ingest-attachment from elastic
[=================================================] 100%??
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.security.SecurityPermission createAccessControlContext
See https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
 
Continue with installation? [y/N]Y
-> Installed ingest-attachment
-> Please restart Elasticsearch to activate any plugins installed
 
R:\elasticsearch-7.17.4>

ダウンロードして、解凍したフォルダーに有る plugin フォルダーにダウンロードしてきます
再度 Nextcloud で fulltextsearch:text を実行してみます
root@user:~# sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:test
 
.Testing your current setup:
Creating mocked content provider. ok
Testing mocked provider: get indexable documents. (2 items) ok
Loading search platform. (Elasticsearch) ok
Testing search platform. ok
Locking process ok
Removing test. ok
Pausing 3 seconds 1 2 3 ok
Initializing index mapping. ok
Indexing generated documents. ok
Pausing 3 seconds 1 2 3 ok
Retreiving content from a big index (license). (size: 32386) ok
Comparing document with source. ok
Searching basic keywords:
- 'test' (result: 1, expected: ["simple"]) ok
- 'document is a simple test' (result: 2, expected: ["simple","license"]) ok
- '"document is a test"' (result: 0, expected: []) ok
- '"document is a simple test"' (result: 1, expected: ["simple"]) ok
- 'document is a simple -test' (result: 1, expected: ["license"]) ok
- 'document is a simple +test' (result: 1, expected: ["simple"]) ok
- '-document is a simple test' (result: 0, expected: []) ok
- 'document is a simple +test +testing' (result: 1, expected: ["simple"]) ok
- 'document is a simple +test -testing' (result: 0, expected: []) ok
- 'document is a +simple -test -testing' (result: 0, expected: []) ok
- '+document is a simple -test -testing' (result: 1, expected: ["license"]) ok
- 'document is a +simple -license +testing' (result: 1, expected: ["simple"]) ok
Updating documents access. ok
Pausing 3 seconds 1 2 3 ok
Searching with group access rights:
- 'license' - [] - (result: 0, expected: []) ok
- 'license' - ["group_1"] - (result: 1, expected: ["license"]) ok
- 'license' - ["group_1","group_2"] - (result: 1, expected: ["license"]) ok
- 'license' - ["group_3","group_2"] - (result: 1, expected: ["license"]) ok
- 'license' - ["group_3"] - (result: 0, expected: []) ok
Searching with share rights:
- 'license' - notuser - (result: 0, expected: []) ok
- 'license' - user2 - (result: 1, expected: ["license"]) ok
- 'license' - user3 - (result: 1, expected: ["license"]) ok
Removing test. ok
Unlocking process ok
root@user:~#

お~
うまく行ったようです
次は、インデックスの再作成です
root@user:~# sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:index
 
Options: []
Memory: 57 MB
lq Indexing qqqq
x Action: indexDocument
x Provider: Files Account: admin
x Document: 1786
x Info: application/vnd.oasis.opendocument.presentation
x Title: 要望管理使用法.odp
x Content size: 336456
x Chunk: 18/18
x Progress: all/1
mqq
lq Results qqqq
x Result: 16/16
x Index: files:1786
x Status: ok
x Message: {"_index":"nextcloud_index","_type":"_doc","_id":"files:1786","_version":1,"result":"created","_shards":{"total":2,
x "successful":1,"failed":0},"_seq_no":25,"_primary_term":1}
x
mqq
lq Errors qqqq
x Error: 0/0
x Index:
x Exception:
x Message:
x
x
mqq
## x:first result ## c/v:prec/next result ## b:last result
## f:first error ## h/j:prec/next error ## d:delete error ## l:last error
## q:quit ## p:pause
root@user:~#

もう、言うこと無しです ^^/

 
この前の全文検索と同じように検索してきました
検索時間が5倍くらい速くなってますね…
 
インデクスは Elasticsearch を解凍したフォルダーに data というフォルダーを作成して格納するようです
格納サイズは確認していませんが、Nextcloud で指定したサイズが上限になると思います
 
7. jvm.options

最初びっくりしたのが、Elasticsearch を起動すると実メモリーの余っている分をほとんど消費されてしまうって事です
Java はよく解りませんが、Elasticsearch の説明でには適切な容量を確保するように設定すると書いてあったような、なかったような…
 
で、32GB の のメモリーを 16GB も一瞬にして占有されてしまいました
どれだけヒープ領域を使っているかはログに書いてありました (16GB と有りました)
 
さらに、これは常駐しますので返却して貰えないようです
ザッと調べた限りでは、ガーベージコレクションとして管理されている様子で、どの時点で解放してくれるのか Elasticsearch の詳細がよく解りませんので不明です
と、思って居たら config/ に設定ファイルらしきものがあったので覗いてみました
 
jvm.options の最初の方にヒープ領域のサイズ設定がコメントアウトされています
これを適切に設定すれば良いと思います
せめて 2GB だよなぁ…
## -Xms4g
## -Xmx4g
-Xms1g
-Xmx1g

ケチって 1GB にしました(検索のレスポンスに影響するかも…)
 
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#heap-size-settings
詳しくはここを見て下さい
 
こりゃ 32bit 機で動かそうと思わないよね ^^;
 
追記:
gc.log と言うガーベージコレクションのログだと思うファイルがあるのですが、30分ごとに更新されていますので、30分ごとに調整される可能性があります
(ログの内容を理解できるほどの根性がないので、これも先送りかな..)
 

8. 常駐化

Ubuntu を再起動する度に fulltextsearch:live -q を実行するのが面倒な場合は サービスとして自動的に起動させます
 
https://www.orzs.tech/use-elasticsearch-in-nextcloud/
こちらのサイトを参考にしました
 
user@user:~$ cat nextcloud-fulltext-elasticsearch-worker.service
[Unit]
Description=Elasticsearch Worker for Nextcloud Fulltext Search
After=network.target
 
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/nextcloud
ExecStart=/usr/bin/php /var/www/nextcloud/occ fulltextsearch:live -q
ExecStop=/usr/bin/php /var/www/nextcloud/occ fulltextsearch:stop
Nice=19
Restart=always
 
[Install]
WantedBy=multi-user.target
user@user:~$ ps aux | grep php
root 708 0.0 0.2 293180 45096 ? Ss 12:59 0:00 php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)
www-data 930 0.2 0.7 366568 114104 ? S 12:59 0:09 php-fpm: pool www
www-data 1359 0.1 0.5 344304 90960 ? S 13:01 0:07 php-fpm: pool www
www-data 1796 0.0 0.5 201084 84312 ? SNs 14:02 0:00 /usr/bin/php /var/www/nextcloud/occ fulltextsearch:live -q
www-data 1808 0.1 0.4 372016 68680 ? S 14:03 0:01 php-fpm: pool www
user 2091 0.0 0.0 6608 2304 pts/0 S+ 14:16 0:00 grep --color=auto php
user@user:~$ sudo service nextcloud-fulltext-elasticsearch-worker status
● nextcloud-fulltext-elasticsearch-worker.service - Elasticsearch Worker for Nextcloud Fulltext Search
Loaded: loaded (/etc/systemd/system/nextcloud-fulltext-elasticsearch-worker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-06-08 14:02:51 JST; 1min 20s ago
Main PID: 1796 (php)
Tasks: 1 (limit: 18868)
Memory: 47.1M
CPU: 288ms
CGroup: /system.slice/nextcloud-fulltext-elasticsearch-worker.service
mq1796 /usr/bin/php /var/www/nextcloud/occ fulltextsearch:live -q
 
Jun 08 14:02:51 user systemd[1]: Started Elasticsearch Worker for Nextcloud Fulltext Search.
user@user:~$

まるまる移させてもらいましたので、www-data で動いてるし Description 等もそのまま表示されていますね ^^b
あ、キチンと nice 値も 19 になってました
 
 

9. 最後に

  • Nextcloud 24.0.1 で Elasticsearch を使う場合は、7.x 系列を使いましょう!
  • Elasticsearch をローカル以外から使う場合は network.host: 172.16.XXX.XXX と指定をしましょう
  • Elasticsearch にnetwork.host の指定をしたら discovery.type: singie-node の指定をしましょう
  • Elasticsearch をコマンドプロンプトで動かす前に chcp 65001 を実行しておくと吉
  • 多分 より Ubuntu の apt で管理した方が簡単
  • 先達の記録には何かしらの意味が在る

もちろん、高度なクラスタシステムを組んで処理する場合は別!
Elasticsearch を Nextcloud からテストして見る手順

  1. sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:check
  2. sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:test
  3. sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:reset
  4. sudo -u www-data -g www-data php -f /var/www/nextcloud/occ fulltextsearch:index

あとは、fulltextsearch:live と、 側でサービスかデーモンモードで Elasticsearch を動かす

 

 

追記よてい…
 Java の設定
  ヒープ領域の使用量の設定 完
  ログのサイズの確認 log4j2 の設定ファイルがあり 2GB で処理される(要確認)
 cron 作戦の顛末
  fulltestsearch:index -q が失敗するとエラーが返されるので cron の MAILTO へメールが送信されてくるので失敗が把握できるかな?
側の設定
  動かし方の設定など (デーモンモードで起動する、サービスとして登録する、更新の方法など)

コメントを残す

メールアドレスが公開されることはありません。