DockerでMattermostを立てて日本語全文検索を使う

概要

DockerでOSSのチャットツールMattermostを立てます。OSSで公開されているチャットツールはいくつかありますが、私はMattermostが一番気に入っています。ただ、特に工夫せずにサービスを作ると日本語検索ができないので、MySQLにMeCabプラグインを導入し、形態素解析して日本語検索できるようにします。

ファイルとディレクトリの準備

次のディレクトリ構成を目指してファイルとディレクトリを準備します。

.
├── app
│   ├── Dockerfile
│   └── entrypoint.sh
├── db
|   ├── 99-mecab.cnf
│   └── Dockerfile
└── docker-compose.yml

docker-compose.yml

version: "3"
services:

  db:
    build:
      context: db
    environment:
      MYSQL_USER: mmuser
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: mattermost
    volumes:
      - ./data/db:/var/lib/mysql

  app:
    build:
      context: app
      args:
        edition: team
    environment:
      MM_USERNAME: mmuser
      MM_PASSWORD: password
      MM_DBNAME: mattermost
      DB_HOST: db
      DB_PORT_NUMBER: 3306
      MM_SQLSETTINGS_DRIVERNAME: mysql
      MM_SQLSETTINGS_DATASOURCE: mmuser:password@tcp(db:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
    volumes:
      - ./data/mattermost/config:/mattermost/config:rw
      - ./data/mattermost/data:/mattermost/data:rw
      - ./data/mattermost/logs:/mattermost/logs:rw
      - ./data/mattermost/plugins:/mattermost/plugins:rw
      - ./data/mattermost/client-plugins:/mattermost/client/plugins:rw
      - /etc/localtime:/etc/localtime:ro
    links:
      - db
    ports:
      - 8000:8000

db/99-mecab.cnf

[mysqld]
# MeCab Full-Text Parser Plugin Settings
loose-mecab-rc-file=/etc/mecabrc
innodb_ft_min_token_size=1

db/Dockerfile

FROM centos/mysql-57-centos7:5.7

USER 0
RUN yum -y install epel-release
RUN rpm -ivh http://packages.groonga.org/centos/groonga-release-1.5.2-1.noarch.rpm
RUN yum -y install mecab mecab-ipadic
COPY 99-mecab.cnf /etc/my.cnf.d/
USER 27

app/{Dockerfile,entrypoint.sh}

wget https://raw.githubusercontent.com/mattermost/mattermost-docker/master/app/Dockerfile -O app/Dockerfile
wget https://raw.githubusercontent.com/mattermost/mattermost-docker/master/app/entrypoint.sh -O app/entrypoint.sh
chmod +x app/entrypoint.sh

ファイルができたら、データ用永続化用のディレクトリを作成し、パーミッションを設定します。

# DB用
mkdir -p ./data/db
sudo chown -R 27:27 ./data/db
# App用
mkdir -p ./data/mattermost/client-plugins
mkdir -p ./data/mattermost/data
mkdir -p ./data/mattermost/config
mkdir -p ./data/mattermost/logs
mkdir -p ./data/mattermost/plugins
sudo chown -R 2000:2000 ./data/mattermost

これでファイルとディレクトリの準備は完了です。

コンテナの準備

コンテナをビルドして立ち上げます。

docker-compose build
docker-compose up -d

コンテナが起動したらMySQLサーバにログインします。

docker-compose exec db /bin/bash
mysql -u root

次のSQLコマンドを実行し、MeCabの形態素解析を有効化し、全文検索インデックスを作成します。

INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
USE mattermost;
ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER mecab;

設定が完了したらコンテナを再起動します。

docker-compose restart

これで、日本語で全文検索できるMattermost環境ができました。

リバースプロキシの準備

なくても動きますが、SSL終端したいため、別途用意したリバースプロキシに設定を投入します。 WebSocket通信をするため、通常の設定に加えて、 proxy_set_header Upgrade $http_upgrade; と proxy_set_header Connection “$upgrade”; あたりが必要です。

server {
  listen 443;
  server_name <server-hostname>;

  ssl on;
  ssl_certificate     /etc/letsencrypt/live/<server-hostname>/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/<server-hostname>/privkey.pem;

  location / {
    client_max_body_size                4g;
    proxy_set_header Upgrade            $http_upgrade;
    proxy_set_header Connection         "upgrade";
    proxy_redirect                      off;
    proxy_set_header Host               $host;
    proxy_set_header X-Real-IP          $remote_addr;
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_read_timeout                  1m;
    proxy_connect_timeout               1m;
    proxy_pass                          http://<server-ip-address>:8000;
  }
}

参考URL

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA