第700回でも紹介したように、Mattermostと言えば、Slackと双璧をなすFLOSSでセルフホスト可能なチャットサービスであり、定型ワークフローを管理する「Playbook」と、かんばんライクなタスク管理ツールである「Boards」が統合され、「オンラインコラボレーションツール」でもあります。今回はMattermostの基本的なカスタマイズ方法を紹介しましょう。
Mattermost Omnibusのカスタマイズ
第700回ではDebianパッケージ版のMattermostである「Mattermost Omnibus」をインストールしました。今回はまず、このMattermost Omnibusをカスタマイズしてみましょう。改めてリストアップすると、基本的な設定方法は次の4パターンになります。
- Mattermost Omnibusの設定ファイルは「
/etc/mattermost/mmomni.yaml
」で、変更後の反映コマンドは「sudo mmomni reconfigure
」
- 環境変数「
/etc/mattermost/mmomni.mattermost.env
」で一部のMattermostの設定を行っている
- Mattermost本体の設定は、「
sudo mmctl --local config edit
」で編集すると反映される
- Mattermost本体の設定は、Web UIのシステムコンソールからも変更できる
最初のMattermost Omnibusで設定できる項目は次のとおりです。
db_user
/db_password
:PostgreSQLのデータベースのユーザーとパスワードです。インストール時に自動生成されるため、それをそのまま使えば良いでしょう。
fqdn
:Mattermost本体のドメインネームです。インストール時に設定した値が使われます。
email
:Let’s Encryptによるサーバー証明書の取得の際に使われるメールアドレスです。HTTPSを別途設定する場合は空のままでかまいません。
https
:HTTPSを利用するかどうかをtrue/falseで設定します。リバースプロキシー側でHTTPSを担うなら、falseでもかまいません。
data_directory
:Mattermostがデータを保存するディレクトリです。バックアップ対象となるディレクトリだと考えれば良いでしょう。
enable_plugin_uploads
:Mattermost側の「PluginSettings.EnableUploads
」の値を設定します。これは自前のプラグインをアップロードできるかどうかの設定項目です。プラグインを自作しない限りfalseで問題ありません。
enable_local_mode
:Mattermost側の「ServiceSettings.EnableLocalMode
」を設定します。mmcli
コマンドの認証に関する設定コマンドです。trueの場合、Mattermostが動いているサーバー上で、Unixドメインソケットを経由してmmcli
コマンドを実行した時、ユーザー認証を行わないことになります。「Mattermostサーバーにログインできる=管理者である」が成り立つのであれば、trueのままで良いでしょう。
このようにMattermost Omnibusはインストール時に設定しておいたほうが良い項目だけ、YAMLファイルでも設定できるようになっています。基本的にインストールが完了し、Mattermostにログインしたあとは特に変更しないと思っておいて問題ありません。
Mattermostのカスタマイズ
Mattermost本体はWeb UIもしくはmmcli
による設定ファイルによって内容を変更します。重要な項目の多くはWeb UIから変更可能ですが、一部の設定はファイルを直接編集しなくてはなりません。また一部の設定は/etc/mattermost/mmomni.mattermost.env
で設定しており、これはmattermost.service
を起動する時に読み込まれています。
一部の設定は「sudo mmctl --local config edit
」で編集する必要があるものの、こちらも変更することはほとんどないでしょう。よってだいたいのことはWeb UIのシステムコンソールで完結できます。
そこで代表的なものをいくつか見ていきましょう。
サイト本体の設定
まずはサイト全体の設定を行いましょう。具体的には画面左上のグリッドメニューから、「システムコンソール」を選択し「サイト設定」の「カスタマイズ」に移動します。次の画像のように、メールアドレス等が設定されていないと、この設定を促されるようです。
設定自体は各項目に丁寧な説明がついているため、そこまで難しいことはないでしょう。ここで重要なのは「サポート電子メールアドレス」です。これはメール通知等が送られたときの、連絡アドレスとして表示されます。サーバーの管理者が確認できるアドレスを設定しておきましょう。その他プライバシーポリシーや、アイコン・サイト名などなどサイト固有の設定を変更できます。
「サイト設定」では他にも「言語」でアカウント作成時の初期設定等、「ユーザーとチーム」でユーザー情報の表示範囲、「通知」で通知メールの内容の調整、「投稿」でメッセージに投稿したURL等の扱いを、「お知らせ」でMattermostアップグレード時の通知に関する情報をコントロールできます。
サーバー関連の設定
「環境」ではウェブサーバーやデータベースなど、より下回りの設定を行います。
ただしウェブサーバーに関しては、/etc/mattermost/mmomni.mattermost.env
で設定しているものがいくつかあり、Web UIは使えない点に注意してください。設定画面でも「この設定は環境変数を通じて設定されています。システムコンソールから変更することはできません。」と表示されます。
基本的にインストール時の設定から変更する必要はありませんが、いくつか検討したほうが良い項目もあります。
- ファイルストレージ:添付ファイルや画像をAmazon S3に保存するモードが存在します。
- SMTP:通知メールを送るために必要な設定です。詳細は後ほど説明します。
- プッシュ通知サーバー:モバイルアプリ向けにプッシュ通知を送るための設定です。詳細はMattermostのモバイル通知に関するドキュメントを参照してください。
- セッション維持期間:ログインセッションを維持する期間です。「活動中はセッション維持期間を延長する」を有効にしておくと、常時アクティブな場合はログイン状態を維持します。セキュリティポリシーとの兼ね合いで有効にするかどうかを判断してください。
ちなみにMattermostのモバイルアプリはGoogle PlayやApple Storeで公開されているものを、セルフホスト環境でもそのまま利用できます。ソースコードは公開されているため、自分でビルドして利用することも可能です。
メール送信設定
Mattermostはログインや通知処理のためにメールを送信することがあります。このため「SMTP」のメール送信設定はほぼ必須の項目です。ここで選択肢は次の二種類になります。
- ローカルにSMTPサーバーをインストールする
- 外部のSMTPサーバーを利用する
前者の場合は、「sudo apt install postfix
」などでSMTPサーバーをインストールします。Postfixを使うのなら、インストール時の設定として「Internet Site」を選択し、ドメイン名に「@」より後ろの名前を指定しましょう。
また「/etc/postfix/main.cf
」に最低限「my
」で始まる設定だけ修正したら、「sudo systemctl reload postfix.service
」するだけで、最低限の設定は完了です。
ただしインターネットに公開した状態でSMTPサーバーを適切に運用するのはそれなりに能力が必要です。今回のケースだけならSMTPサーバーをローカルに閉じ込めてしまって、送信は行えるけれども受信はしないという運用でも問題はありません[1]。ただし、後者のように別途適切なSMTPサーバーを使う方法もあります。
Mattermostのメール設定に関するドキュメントにはAmazon SESやGmailなど、メジャーどころの設定方法が網羅されているため、これを参考に設定してみると良いでしょう[2]。
認証設定
「認証」ではアカウントの作成やログイン方法を設定します。
「利用登録」はアカウントの作成方法についての説明です。初期設定だと、「招待されない限りアカウントは作成できない」状態になっています。つまり「アカウントの作成を有効にする」は有効で、「オープンサーバーを有効にする」が無効、「招待メールを有効にする」が有効の状態です。
このうちオープンサーバーは、有効にしてしまうとサーバーにアクセスできる人は誰でもアカウントを作れる状態になってしまいます。ローカルネットワークでしか使わない場合など特殊な事情を除いて、有効にすることはないと思ったほうがいいでしょう。
アカウントは「メールアドレス・ユーザー名・パスワード」から構成されます。アカウント作成時のメールアドレスの確認等を担うのが「電子メール認証」の設定です。メール送信設定が完了したら「電子メールアドレスの確認が必要」を有効にしておくと良いでしょう。「パスワード」ではパスワードの複雑さなどを設定できます。
Mattermostは「電子メール・ユーザー名」以外のログイン方法もサポートしています。とは言え、AD/LDAPやSAML 2.0、OpenIDを使う場合は有償ライセンスが必要です。ちなみにGitLabを利用した認証は無償で利用可能です。またGitLab自身も様々な認証をサポートしているため、認証はGitLabにすべて任せるという運用でもいいかもしれません。
多要素認証にも対応しています。システムコンソールから多要素認証を有効にしておくと、個々のユーザーが画面右上の「プロフィール」から多要素認証を使えるかどうかを変更できるようになります。
多要素認証にはAndroidやiOSにGoogle Authenticatorをインストールして実現します。ログインする際にAuthenticatorが生成したコードを追加で入力するような形です。ちなみにスマートフォンでなくて、PC上のUbuntuを使ってコードを生成する方法もあります。詳細は第508回の「Ubuntuでコマンドラインからワンタイムパスワードを扱う」を参照してください。
実験的機能
「実験的機能」には正式対応とは言えないものの、将来的に正式な機能として取り込まれる可能性のある設定が一覧できます。そのうち便利なものをいくつか紹介しておきましょう。
「プレビュー機能を有効にする」を有効化すると、画面右上の歯車アイコンから「詳細」の「プレリリース機能をプレビューする」にMarkdownプレビューの表示オプションが追加されます。これにチェックを入れておくと、チャットにメッセージを記述する際、「プレビュー」リンクをクリックするとMarkdownのレンダリング結果が表示されます。
「返信スレッドの折りたたみ」を有効化すると、返信スレッドを折りたためるようになります。Slackと異なりMattermostは返信スレッドの内容もすべてチャンネル内に表示されます。チャンネルに表示されたり表示されなかったりするのが個人の操作に依存せず、文脈のよくわからない返信がいきなりチャンネルに登場することがない点で、Mattermostの良い仕様のひとつではあるのですが、流量が多いとわずらわしくなります。
折りたたみ機能を使うと、必要なスレッドだけ表示できて便利です。この機能の利点は、発言者側ではなく閲覧者側にコントロール権があることです。
日本語検索機能
Mattermostはそのままだとメッセージの日本語検索に対応していません。
ただし「実験的機能」の「Bleve」から「Bleveのインデックス付与を有効にする」を有効化すると、日本語も含めて検索が可能になります。
まずあらかじめ、インデックスを保存するディレクトリを作っておきます。場所はどこでも良いのですが、/var/opt/mattermost/bleveindexes
あたりが無難でしょう。
Mattermostのプロセスが読み書きできるように、オーナーも変更しています。あとはこのディレクトリパスを「IndexDir」に入力して、「保存」ボタンを押します。そうすると「インデックス付与を今すぐ開始する」が押せるようになるので、開始してみましょう。
ちなみにメッセージ数が多い場合は、インデックス付与の完了まで相当時間がかかります。今回のケースだと、メッセージが一個だけなので準備も含めて数分で完了しました。一度インデックス化が完了したら、あとはメッセージが追加されるたびに自動的にインデックスが更新されます。
Bleveでインデックスされたデータを検索対象にするためには、「Bleveの検索クエリを有効にする」と「Bleveの自動補完クエリを有効にする」も有効化しておく必要があります。
バックアップとリストア
一通り設定が完了したら、本番運用を開始する前にバックアップとリストアの準備・動作確認を行っておきましょう。手順についてはMattermostのドキュメントにあるバックアップとリストアの項目に詳細な方法が記述されています。
バックアップが必要なものはかんたんにまとめると次の項目です。
- データベース上のデータ
- 設定ファイルである
config.json
- データディレクトリ以下のアップロードされた画像等のコンテンツ
また、前項で紹介したようにBleveを使っているならそのインデックスデータの保存も考えなければいけませんが、リストア後に再インデックスするのであれば必須ではありません。
Mattermost Omnibusでのバックアップ
ただし、Mattermost Omnibusをインストールしているのであれば、上記のバックアップ処理はmmomni
コマンドでかんたんに実現できます。
config.json
が存在しませんが、これはMattermost Omnibusの場合、設定項目がデータベースの中に組み込まれているためです。
ちなみにアーカイブフォーマットは現状tar.gzだけサポートしています。
Mattermost Omnibusでのリストア
何か別のサーバーにMattermost Omnnibusを用意して、上記のバックアップをリストアしてみましょう。
リストアに成功したら再構築を行います。
これだけでリストは完了です。とてもかんたんですね。きちんとリストアできているかどうかを確認するためにも、システムコンソールの変更した設定等も確認すると良いでしょう。
バックアップの定期実行
ついでに定期的にバックアップするようにしておきましょう。まずはバックアップ用のスクリプトを作成します。
これはBACKUP_DIR
に指定したディレクトリに、最大BAKCUP_NUM
個のバックアップアーカイブを作成するスクリプトです。個数を超える古いアーカイブは実行時に削除します。
試しに、/var/opt/mattermost/backups/
の中身を確認しながら、sudo ./mm_backup.sh
を管理者権限で何度か実行してください。最大3個しかアーカイブが保存されないことがわかるはずです。
あとはこれをsystemd用のタイマーユニットを作成し、定期実行します。
上記設定では毎朝4時に/usr/local/sbin/mm_backup.sh
を実行するようにしています。時刻等は適宜調整してください。動作確認した上で、タイマーを有効化します。
タイマーがきちんと期待通りの時刻にセットされていたら準備完了です。後日、バックアップが取れていること、またそのバックアップデータでリストアできることを確認しましょう。
このようにMattermost Omnibusを使うと比較的かんたんにMattermostをプロダクションで使うまでの準備が整います。