オープンソースのwikiであるcrowiをインストールして検索ができなくてハマったのでその時のメモですにゃん😸。こんなアフォはワイくらいかもしれんけどおんなじようなアフォの子がいたら参考にしてほしいにゃん。
環境
- CentOS 7.7
- crowi 1.7.9
- JDK8
- ElasticSearch 6.8.3 (yumで入れただけ)
- ElasticSearchのプラグインkuromojiは入れた
設定内容はこんな感じ
$ cat /etc/sysconfig/crowi
PORT=3000
NODE_ENV=production
MONGO_URI="mongodb://crowi:(あなたのパスワード)/crowi"
REDIS_URL="redis://localhost:6379"
ELASTICSEARCH_URI="http://localhost:9200"
PASSWORD_SEED="あなたのパスワードシード"
FILE_UPLOAD=local
結論からいうと設定は上記で間違ってなかったです。
症状
- crowiの検索以外の機能は正常に動作している。
- crowiの検索バーはページトップに表示されていて検索はできる。
- 検索するとすぐにもどってきて「No page found with (検索キーワード)」みたいに表示される。検索結果が一つもヒットしない。
- crowiの管理画面から「管理>検索管理>BUILD INDEX」は実行したが症状は変わらない。
原因を調べてみる
crowiはnodejsで動いているのでデーモンとしてではなくコマンドシェルから起動してみればstderrにログが表示される。そこでsshでサーバにログインしてcrowiをrootで起動してみる。
$ sudo su
# systemctl stop crowi (デーモン起動しているcrowiをいったん止める)
# PORT=3000 NODE_ENV=production \
MONGO_URI="mongodb://crowi:(あなたのパスワード)/crowi" \
REDIS_URL="redis://localhost:6379" \
ELASTICSEARCH_URI="http://localhost:9200" \
PASSWORD_SEED="(あなたのパスワードシード)" \
FILE_UPLOAD=local \
/usr/local/bin/node app.js
上記を実行して、
Listening port 3000...
と出てくればcrowiは起動している。
この状態で少し待ってみると、ElasticSearchまわりのエラーで、
Error: index crowi-current already exists
みたいな感じのエラーが出ました。
crowiはcrowi-currentという検索インデックスを作るようですが、過去にcrowiを強制終了したりして既にこのインデックスが存在するとこのエラーが出るようです。
しかしcrowiのブラウザ画面上には何にもエラーが表示されないのでこのエラーでElasticSearchと接続できていないことがブラウザ画面で見ている限りユーザーにはわかりません。(ここで素人はお手上げにゃん😸)
解決方法
上記の通りElasticSearchのインデックスが競合していることが原因なので、インデックスを消してしまえ。
以下のコマンドを実行
$ curl -XDELETE http://localhost:9200/crowi-current?pretty=true
更にcrowiをデーモンで再起動
# sudo systemctl start crowi
crowiの管理画面にログインして再度、検索設定のBUILD INDEXを押す。
これで検索が正常に動作するようになりましたにゃん😸。
めでたしめでたしにゃん😸。
ps. crowiを公開して下さっているCrocosさんありがとうありがとう。使わせていただいてます。