Slack代替のMattermostをNetBSD/amd64で使う(セットアップ編)

NetBSD Advent Calendar 2017の10日目の記事です。

はじめに

前回は、Slack代替のチャットプラットフォームである Mattermostの配布用アーカイブファイルを作成するところまでを説明した。

今回は、その配布用アーカイブファイルを使って、インストールし、 日本語のメッセージを全文検索できるようにするまでを説明する。

データベースサーバーの選択とインストール

Mattermostは、MySQLとPostgreSQLをバックエンドのデータベースサーバーとして 選択することができる。 しかし、日本語の全文検索が簡単にできるようになるのは、MySQL 5.7を使用 した場合のみである。 MySQL 5.7で新たに搭載された ngram full-text parserを使用するのである。

pkgsrcでは、MySQL 5.7.20を簡単に導入することができる。 以下のように実行すれば良い。


# cd /usr/pkgsrc/databases/mysql57-server
# make install
# cp /usr/pkg/share/examples/rc.d/mysqld /etc/rc.d
# echo "mysqld=YES" >> /etc/rc.conf

MySQL 5.7の下準備

MySQL 5.7では、データベースサーバーの初回起動時に、一時パスワードを 提示されるようになっている。


# vi /usr/pkg/etc/my.cnf
[mysqld]
ngram_token_size=2

# /etc/rc.d/mysqld start
Initializing MySQL database system tables.
2017-12-09T05:44:23.256256Z 0 [Warning] Changed limits: max_open_files: 3404 (requested 5000)
2017-12-09T05:44:23.258372Z 0 [Warning] Changed limits: table_open_cache: 1621 (requested 2000)
2017-12-09T05:44:23.260654Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-12-09T05:44:23.277197Z 0 [ERROR] Failed to create event (errno= 9).
2017-12-09T05:44:23.277217Z 0 [ERROR] Failed to start timer notify thread.
2017-12-09T05:44:23.277226Z 0 [ERROR] Failed to initialize timer component (errno 9).
2017-12-09T05:44:25.731713Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-12-09T05:44:25.995569Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-12-09T05:44:26.111703Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 043062cf-dca4-11e7-b252-940764e13c88.
2017-12-09T05:44:26.117750Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-12-09T05:44:27.029478Z 0 [Warning] CA certificate ca.pem is self signed.
2017-12-09T05:44:27.189609Z 1 [Note] A temporary password is generated for root@localhost: zPLeg5>afD/k
Starting mysqld.
ここでは、zPLeg5>afD/kがMySQLのrootユーザーの一時パスワードである。

一時パスワードは、変更しないと、以降の操作をすることはできない。 以下のように変更する。


$ mysql --user='root' --password='zPLeg5>afD/k'
mysql> alter user 'root'@'localhost' identified by 'root-password';

その上で、Mattermost用のユーザーmmuserを追加する。


$ mysql --user='root' --password='root-password'
mysql> create user 'mmuser'@'localhost' identified by 'mm-user-password';

Mattermost用のデータベースmattermostを追加し、 mmuserユーザーに操作権限を付与する。 Mattermostサーバーの初回起動時にテーブルの作成等を自動的に実行するので、 それに必要な操作権限がないといけない。 ここでは、mmusermattermostデータベースに関する全権限を付与した。


mysql> create database mattermost;
mysql> grant all on mattermost.* to 'mmuser'@'localhost';

Mattermostサーバーを配置する

MattermostはGo言語で生成されたバイナリーファイルであり、 配置する場所を選ばない。 ここでは、/opt/mattermostディレクトリーに配置することにする。


# mkdir /opt
# cd /opt
# tar zxvf /home/ryoon/go/src/github.com/mattermost/mattermost-server/dist/mattermost-team-netbsd-amd64.tar.gz
これにより、Mattermostサーバーは/opt/mattermost/bin/platform ファイルとして配置される。

Mattermostサーバーを起動する

単純に/opt/mattermost/bin/platformを起動すれば良いだけである。 永続的に使用するのであれば、いずれ/etc.rc.localで起動 するようにしておけば良い。 初回起動時には、/opt/mattermost/config/config.jsonファイルが 設定ファイルの雛形として生成される。 一度起動し、データベースが見つからないと 出たらCtrl-cで停止させ、/opt/mattermost/config/config.json 設定ファイルを編集しよう。 ここでは、ウェブ画面の標準の言語を日本語にする変更も実施しておく。 各ユーザーで指定できるが、最初の初期設定画面を日本語化しておくためである。


# /opt/mattermost/bin/platform
(省略)
(Ctrl-c押下)
# vi /opt/mattermost/config/config.json
(省略)
    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:mm-user-password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",
        "DataSourceReplicas": [],
        "DataSourceSearchReplicas": [],
        "MaxIdleConns": 20,
        "MaxOpenConns": 300,
        "Trace": false,
        "AtRestEncryptKey": "zhk8pfcexaxsubwguc8eqqu8c75j4a9p",
        "QueryTimeout": 30
    },
(省略)
        "DefaultClientLocale": "ja",
(省略)
# /opt/mattermost/bin/platform
(Ctrl-c押下)
これで、必要なテーブルやインデックスが作成される。

日本語の全文検索を有効にする

MySQL 5.7のbgram full-text parserを使ったインデックスを チャットの投稿メッセージに対して作成し直す必要がある。 以下のように操作する。


$ mysql --user='mmuser' --password='mm-user-password' mattermost
mysql> alter table Posts drop index idx_posts_message_txt;                      
mysql> alter table Posts add fulltext index idx_posts_message_txt (`Message`) with parser ngram;

Mattermostサーバーを起動する

以下のように実行すれば良い。


# /opt/mattermost/bin/platform &

Mattermostのウェブ画面を開く

標準では、http://localhost:8065/で表示できるようになっている。 サブディレクトリーに配置する設定は存在しない。 pkgsrc/www/firefoxで動作を確認できる。 日本語のメッセージを投稿して、2文字以上であれば全文検索できることを確認する。

まとめ

NetBSD/amd64で、Mattermostサーバーを立ち上げ、MySQL 5.7を使って ngram full-text parserを利用した全文検索ができるようにした。

Comments

Popular posts from this blog

#5000へCメールを送れないau端末でezweb.ne.jpの電子メールアドレスをIMAP4/SMTPで扱う方法

PostgreSQLのOracle Foreign Data WrapperをWindowsで使う

Vaio Pro 11/13用のサードパーティーのACアダプター