はじめに
以前の記事 で Full text search plugin が使える Docker Compose の Redmine 環境を作ったのですが、同プラグインのオプションで添付ファイルの全文検索ができることを最近になって知りました。
オプションを有効にするためには ChupaText サーバーというものが必要です。Docker 版の ChupaText サーバー がありますので、今回はこれを組み込んでみました。
組み込みに至るまでの経緯
Docker 版の ChupaText サーバーは docker-compose.yml が用意されているので簡単に構築できるかなって甘く見ていたのですが、実際にやってみるとちょっと困ったことが起きました。
docker-compose.yml の内容を読んだところ、コンテナ側の ChupaText サーバーのポートを Docker ホスト側の 20080 番ポートにバインドする構成だということがわかりました。今回は Redmine も Docker Compose で構築しているため、Redmine のアプリケーションサーバーからどうやって Docker ホスト側のローカルアドレスにアクセスすればいいのか…結局のところわかりませんでした。
そこで、Redmine 構築用の docker-compose.yml に直接 ChupaText サーバーの設定を追加してしまえば、ChupaText サーバーが Redmine と同じ内部ネットワークに入るから簡単になるんじゃないかなと考えました。(両方の Docker Compose から接続できる共用ネットワークを作ることも考えましたが、管理が煩雑になりそうだったので今回は見送りました)
組み込んだ結果
docker-compose.yml
以前 GitHub で公開していたファイルを更新しています。
version: "3.7"
services:
redmine:
build: ./redmine
container_name: myfav-redmine
restart: always
depends_on:
- db
+ - chupa-text
ports:
- "3000:3000"
environment:
TZ: Asia/Tokyo
REDMINE_DB_POSTGRES: db
REDMINE_DB_DATABASE: redminedb
REDMINE_DB_USERNAME: redmineuser
REDMINE_DB_PASSWORD: redminepassword
REDMINE_PLUGINS_MIGRATE: "true"
volumes:
- "/srv/redmine/files:/usr/src/redmine/files:z"
- "/var/log/redmine:/usr/src/redmine/log:z"
db:
build: ./db
container_name: myfav-redmine-db
restart: always
environment:
TZ: Asia/Tokyo
POSTGRES_DB: redminedb
POSTGRES_USER: redmineuser
POSTGRES_PASSWORD: redminepassword
volumes:
- "dbdata:/var/lib/postgresql/data"
+
+ chupa-text-proxy:
+ image: groonga/chupa-text:proxy
+ container_name: myfav-redmine-chupa-text-proxy
+ restart: always
+ environment:
+ TZ: Asia/Tokyo
+ volumes:
+ - "/var/log/redmine-chupa-text/proxy:/var/log/squid:z"
+ chupa-text:
+ image: groonga/chupa-text:ubuntu-latest
+ container_name: myfav-redmine-chupa-text
+ restart: always
+ depends_on:
+ - chupa-text-proxy
+ environment:
+ TZ: Asia/Tokyo
+ http_proxy: http://chupa-text-proxy:3128/
+ https_proxy: http://chupa-text-proxy:3128/
+ RAILS_SERVE_STATIC_FILES: "true"
+ volumes:
+ - "/var/log/redmine-chupa-text/rails:/home/chupa-text/chupa-text-http-server/log:z"
volumes:
dbdata:
- ChupaText サーバーが起動してから Redmine が起動するように依存関係を定義しました
- ChupaText サーバーおよびプロキシは DockerHub から取得するようにしました
- Docker ホスト側にポートをバインドする必要がないので省きました
- ログは
/var/log/redmine-chupa-text
に出力するようにしました(別のパスに変えても問題ないです)
Full text search plugin の設定
管理 > プラグイン から Full text search plugin の設定画面を開き、「ChupaTextサーバーのURL」に http://chupa-text:3000/extraction.json
と設定します。ChupaText の README に書いている説明と、ホスト名:ポート番号が違っているので注意してください。
検索実行
公開資料 Redmine全文検索システムの実際 をダウンロードして、チケットに添付してから検索してみました。ちゃんと、PDF 内のワードで検索されています。
まだわかっていない点
- ChupaText サーバーの構築以前に登録された添付ファイルはどうやったら検索対象になるかのがわかっていません。
full_text_search:synchronize
タスクを実行してみたりもしましたが、検索対象になってくれませんでした。 - DMSF の「文書管理」に登録したファイルを検索対象にする方法がわかっていません。(そもそも機能が存在していないかもです)
残タスク
ChupaText のログローテーションを組み込んでいません。とはいえ、README によるとホスト側の logrotate.d に 設定 を追加しろということなので、それに従えば良いような気がします。
おわりに
今回の組み込みにより、添付ファイルも全文検索できるようになりました。
Redmine の良いところの 1 つに、本体だけでなくプラグインにも素晴らしい機能がたくさんあることが挙げられると思います。有志のみなさんにはいつも心から感謝しています。
しかし、Redmine は構築するのが難しいので、せっかくこのような素晴らしい機能があってもセットアップすることができずにメリットを享受する機会を失っているのではないかと危惧しております。
僕がここまで積み上げてきたアウトプットが、そういった機会損失の防止に少しでもお役に立てれば幸いです。Linux に Docker Compose をインストールさえできたら、後は README に従えば簡単に起動できますので、是非ともお試しください。