わしのlog

プログラミングとかバイクとか。

Mattermost(production版)のDBをMySQLに変更する。

前回までのあらすじ

dev-daikichi.hatenablog.com

Mattermostのdocker-compose.ymlファイルを公式のgitHubページから取得
その後、ymlファイルを使ってサーバを構築するところまで完了しました。

今回の目的

前回立ち上げたmattermostのDBを MySQL に変更する。
日本語検索の対応を考えるとMySQLの方が何かと便利そうですので・・・。

実践

dockerド素人の私でもymlをいい感じに直せば
dbの変更くらいワケないってことは重々承知しています。
それっぽいymlを公開してるリポジトリgitHubに無いかな~っと探すと
あった!
github.com ありがたい・・・。参考にさせて頂きます。
こんな感じで修正しました(一部抜粋)

version: "2"

services:

  db:
-    build: db
+    image: mysql
+    container_name: mm_db
-    read_only: true
    restart: unless-stopped
    volumes:
-      - ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
+      - ./volumes/db/data:/var/lib/mysql
+      - ./volumes/db/settings:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime:ro
    environment:
-      - POSTGRES_USER=mmuser
-      - POSTGRES_PASSWORD=mmuser_password
-      - POSTGRES_DB=mattermost
+      - MYSQL_ROOT_PASSWORD=[任意のパスワード]
+      - MYSQL_USER=[任意のユーザネーム]
+      - MYSQL_PASSWORD=[任意のパスワード]
+      - MYSQL_DATABASE=mattermost
    # uncomment the following to enable backup
    #  - AWS_ACCESS_KEY_ID=XXXX
    #  - AWS_SECRET_ACCESS_KEY=XXXX
    #  - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
    #  - AWS_REGION=us-east-1

  app:
    build:
      context: app
      # uncomment following lines for team edition or change UID/GID
      # args:
      #   - edition=team
      #   - PUID=1000
      #   - PGID=1000
    restart: unless-stopped
    volumes:
      - ./volumes/app/mattermost/config:/mattermost/config:rw
      - ./volumes/app/mattermost/data:/mattermost/data:rw
      - ./volumes/app/mattermost/logs:/mattermost/logs:rw
      - ./volumes/app/mattermost/plugins:/mattermost/plugins:rw
      - /etc/localtime:/etc/localtime:ro
    environment:
      # set same as db credentials and dbname
+      - DB_PORT_NUMBER=3306
+      - MM_SQLSETTINGS_DRIVERNAME=mysql
+      - MM_SQLSETTINGS_DATASOURCE=[設定したユーザ名]:[設定したパスワード]@tcp(db:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
      - MM_USERNAME=mmuser
      - MM_PASSWORD=mmuser_password
      - MM_DBNAME=mattermost
...

以前作ったコンテナは一旦破棄しちゃいましょう。
sudo docker rm [対象のコンテナID or コンテナ名]

後は前回通り、docker-compose up -dで起動です。
本当はdbディレクトリやappディレクトリにある
entrypoint.shの中身をうまく改造してあげるのが良いのだと思いますが
docker初心者かつ、手っ取り早い方法でテストしてみたかったのでお許しを。

日本語部分一致検索対応

うまくコンテナが起動し、画面確認が終わったら
次はMattermost上で日本語の部分一致検索が行えるようにしましょう。
まずはdbのコンテナに入ってmy.cnfを修正します。

こちらの記事を参考に修正しましょう。 www.nedia.ne.jp

ここで注意事項。
今回指定したMySQLのイメージは最新バージョンです。
よってMySQL8 のバージョンが自動的に指定されます。
MySQL8ではinnodb関連の設定がデフォルトで指定されているので
先程の記事内の設定ではエラーが出てうまくコンテナが起動しません。
innodb関連の設定は記述しないようにしましょう。
私は/etc/mysql/conf.d/mysql.cnfに以下のように書きました。

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
default_authentication_plugin=mysql_native_password

詳しくは以下の記事の29P辺りを参考に。

www.slideshare.net

default_authentication_pluginについてはまた別記事で書きますが
phpMyAdminを使用した際
The server requested authentication method unknown to the client [caching_sha2_password]
というエラーメッセージが返ってきて接続できない不具合の対処です。
phpMyAdminを使用する為、暫定的にこういった記述をしていますが
セキュリティ上よろしくないので非推奨です。

まとめ

以上でMySQLへの変更、日本語部分一致検索対応は終了です。
ちなみに一文字の検索だと検索結果が返ってこないみたいです。
helpにも出てきますが、検索結果が多くなるため?
また、検索も濁点抜きのワードも検索対象となってしまうようで
かゆいところに手が微妙に届かないです。
まぁ無料ですし致し方無いかなと・・・。

現場からは以上です。