Mattermost インストールで苦労した点

今、社内で急速に利用頻度が増えているのがMattermostです。それに先立ち、Waffle Cell v2 にインストールが出来るようにいろいろと手を加える必要がありました。この作業がかなり大変で、その辺の事情を少し書いておきます。

※ なお、Waffle Cellユーザーは管理者のパスワード等簡単な質問に答えるだけで、数分後にはMattermostが利用できるようになります。

以下は技術的な話で、Waffle Cellユーザーを含め一般の皆様向けの内容ではありません。

以下、Mattermostをインストールする際の部品です:

  1. データベースの用意
    Waffle Cellにインストール済みの mariadbを使いました
  2. メールサーバー
    データベース同様、postfixが既にインストールされているので今回は何もしていません
    Mattermostは漢字検索に対応していないので、n-gramで検索できるよう、インストール後にテーブルPostsのデータベースエンジンを変更しています
  3. その他必要なもの
    apache2(TSL経由での接続のため、Proxy設定をします)
    TSL(SSL)証明書(Waffle Cellにインストール済みの Let’s EncriptをProxyで使います)
    その他もろもろ

Mattermost本体は、本家のホームページにあるように比較的簡単にインストールできます。今回私たちはインストール先を変更した以外、標準的な設定ですぐに簡単な動作を確認出来ました。すなわち、Waffle Cellの仮想デスクトップ内で動いているブラウザから

    http://localhost:8065

で動けば8割方完成です。ただしユーザーに mattermost/config/config.json を直接書かせるわけには行かないので、以下の項目を sed を使って設定しています。

  • データベースのユーザー名とパスワード(乱数を利用)
  • 日本語を標準に(”en” を “ja” に)
  • SiteURL(Waffle Cellの場合ホスト名が決まっているのでそれを代入)
  • endEmailNotifications、SMTPServer、SMTPPort(Waffle CellではPostFixが標準で入っているので、それらを指定)

さらにmattermostのCLIで管理者も設定しています。

platform user create --email [メール] --username [ユーザー名] --password [パスワード]

ここまでの設定をすれば、いきなり起動してもある程度使えます。しかし問題はここからです。一つは漢字検索、そして次はTSL経由でアクセスできるようにApacheのProxyを設定することです。

◆ 漢字検索対策
Mattermostはそのままインストールしても感じ検索ができません。そこでMroongaエンジンをmariadbで使えるようにします。そして

INSTALL SONAME 'ha_mroonga';
ALTER TABLE `Posts` ENGINE = Mroonga;
ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
ALTER TABLE `Posts` ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) COMMENT 'parser "TokenBigram"'

の実行で(Waffle Cellでは echo でコマンドを mysql に投げています)漢字対応は完了です。Mecabも利用できると思いますが、ここでは n-gramを使っています。

◆ Apache2のProxy設定
TSLで例えば
https://xxxxxx.com:8066

でアクセスできるようにするには、8065へのProxy設定が必要です。ただしTSLの設定が前提として必要で、/etc/apache2/ports.conf に 443 と同じように 8066 を追加しましょう。

※ 今後TSLのポートを増やす可能性も考えられるので、Waffle Cellではports.confの設定をコマンドラインでも出来るよう、スクリプトを追加しています。各サービスのインストールスクリプトから簡単に呼べるので、他のサービスとの競合も防止できます。

次に sites-enabledに以下のような設定ファイルを追加します。

<IfModule mod_ssl.c>
 <VirtualHost _default_:8066>
 FileEtag None
 RequestHeader unset If-Modified-Since
 Header set Cache-Control no-store

 ProxyPreserveHost On

 SSLEngine on
 SSLCertificateFile /xxx/yyy//tls/cert_chain.bin
 SSLCertificateKeyFile /xxx/yyy/tls/key.bin

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/api/v4/users/websocket [NC,OR]
 RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
 RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
 RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
 RewriteRule .* http://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]

<Location /api/v4/users/websocket>
 Require all granted
 ProxyPass ws://127.0.0.1:8065/api/v4/users/websocket
 ProxyPassReverse ws://127.0.0.1:8065/api/v4/users/websocket
 </Location>

<Location />
 Require all granted
 ProxyPass http://127.0.0.1:8065/
 ProxyPassReverse http://127.0.0.1:8065/
</Location>
</VirtualHost>
</IfModule>

もしmod_sslが無効な場合は、有効化する必要があります。

コメントを残す

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

− 6 = 2