Help us understand the problem. What is going on with this article?

Docker Compose で作った Redmine だって Full Text Search plugin と ChupaText サーバーを連携させたい

はじめに

以前の記事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 で公開していたファイルを更新しています。

docker-compose.yml
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 に書いている説明と、ホスト名:ポート番号が違っているので注意してください。

clipboard-202005160243-d8us5.png

検索実行

公開資料 Redmine全文検索システムの実際 をダウンロードして、チケットに添付してから検索してみました。ちゃんと、PDF 内のワードで検索されています。

検索実行

まだわかっていない点

  • ChupaText サーバーの構築以前に登録された添付ファイルはどうやったら検索対象になるかのがわかっていません。 full_text_search:synchronize タスクを実行してみたりもしましたが、検索対象になってくれませんでした。
  • DMSF の「文書管理」に登録したファイルを検索対象にする方法がわかっていません。(そもそも機能が存在していないかもです)

残タスク

ChupaText のログローテーションを組み込んでいません。とはいえ、README によるとホスト側の logrotate.d に 設定 を追加しろということなので、それに従えば良いような気がします。

おわりに

今回の組み込みにより、添付ファイルも全文検索できるようになりました。

Redmine の良いところの 1 つに、本体だけでなくプラグインにも素晴らしい機能がたくさんあることが挙げられると思います。有志のみなさんにはいつも心から感謝しています。

しかし、Redmine は構築するのが難しいので、せっかくこのような素晴らしい機能があってもセットアップすることができずにメリットを享受する機会を失っているのではないかと危惧しております。

僕がここまで積み上げてきたアウトプットが、そういった機会損失の防止に少しでもお役に立てれば幸いです。Linux に Docker Compose をインストールさえできたら、後は README に従えば簡単に起動できますので、是非ともお試しください。

juno-nishizaki
※ 個人の感想です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした