お金をかけずにサーバーの勉強をしよう

Mattermostインストール

2024年6月12日

メニューへ戻る

オンプレ環境に Mattermostをインストールします。

Slackや Teamsを会社のコミュニケーションツールとして使ってみたいな〜と思いながらも、インターネットに社内情報を流すのは NGという会社に所属している人も多かろうと思います。

そんなあなたにオススメなのが Mattermost。
そう、それはあなたが特別な存在だからです。

Mattermost

2015年にリリースされた OSSのチャットツールで、当時は Slackそっくりで「これがあれば Slackイラネっ」と小躍りしたものです。

そんな風でしたので当時から常に Slackとの比較で語られてきたプロダクトですが、Slackの開発者達は「Slackを超える!」と相当にイキり倒していた覚えがあります。

Mattermostのホームページの Pricing に以下のコースがあります。
※2024年6月12日時点

Free無料
Professional1人 $10/月
Enterprise相談

当然ながらここでは Freeコースで構築します。
と言いたい所なのですが、実は Mattermostには以下 2種類があるのでした。

Enterprise Edition表に出ている Mattermost社が売りたいプロダクト
課金により機能が開放されていく
Team Edition全て OSSの隠れキャラ
コミュニティによりメンテナンスされている

上の料金表は Enterprise Editionのものですね。
インターネット検索で出てくる Mattermostの情報は基本的にこれのことです。

ドキュメントの「Mattermost Team Edition」の段落を読むに、機能は Enterprise Editionの Freeプランと同じだけど、お金を払って機能を開放することができないとのこと。
「どうしても OSSだけで固めたい」のでなければ Enterprise Editionをお勧めすると書いてあります。


Enterprise Editionと Team Editionでは、提供されているインストール方法に違いがあります。

Enterprise Editionは、Mattermost社の aptリポジトリがあり、パッケージインストールの形で簡便に環境構築ができます。

対して Team Editionは、従来どおり [tar.gz]形式での配布で、自動起動など細々とした設定を自分ですることになります。

個人的にはもう Enterprise Editionの Freeプランで良いと思うのですが、なにせ Team Editionが存在しているという情報が失われつつあるので、ここでは備忘録の意味も込めて Team Editionで構築することにします


Mattermostはデータベースとして PostgreSQLMySQLが必要です。

最近のバージョンではどうやら PostgreSQLに寄っていきたいようですが、やはり備忘録の意味も兼ねて MySQLでやってみようと思っていたのです。

つい先日 MySQLの LTS(Long Term Support)版の最新である 8.4がリリースされたのですが、Mattermostgaが MySQLのこのバージョンから予約語にされてしまった単語をテーブルカラムに使っていたため、DB初期化時にエラーになってしまうようです。

これについての顛末は「[障害対応例] Mattermostインストールと MySQL」に書いています。

その後 Mattermostのコミュニティにこの件につき聞きに行ったのですが「PostgreSQLを使えよ」って言われました。

今後 Mattermostが MySQLをサポートしていくのか分かりませんし、するにしてもいつになるか分かりません。

MySQLに拘泥する必然性もないので、PostgreSQLで作るようにしました。


1.環境

環境は以下でやります。

  1. Ubuntu Server 24.04
  2. PostgreSQL 16.3
  3. Mattermost 9.8.1

PostgreSQLインストール」で Ubuntu Server 24.04に PostgreSQLをインストールする手順を書いています。
PostgreSQLのインストールが済んでいる状態からスタートします。


2.データベース構築

先に PostgreSQLに Mattermost用のデータベースを作っておきます。

手順はこちら。
Prepare your Mattermost database

PostgreSQLにログインして、PostgreSQLの [mmuser]ユーザーと [mattermostdb]データベースを作成します。

subro@UbuntuServer2404-1:~$ sudo -u postgres psql ← OSの[postgres]ユーザーに変わってから psqlコマンドを実行してノーパスワードでPostgreSQLにログインしています。
ユーザー postgres のパスワード: PostgreSQLの[postgre]ユーザーのパスワードを入れる。 ← デフォルトは「postgres」です。
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
"help"でヘルプを表示します。

[mattermostdb]データベースを作ります。
postgres=# CREATE DATABASE mattermost;
CREATE DATABASE

PostgreSQLの[mmuser]ユーザーを作ります。
postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password'; ← パスワードは手順のままにしていますが、こういうことはしてはいけません。
CREATE ROLE

PostgreSQL 15以降では、[mmuser]ユーザーに[mattermostdb]データベースに対する全権を与えます。
postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
GRANT

PostgreSQL 15以降では、[mattermostdb]データベースのオーナーを[mmuser]ユーザーにします。
postgres=# ALTER DATABASE mattermost OWNER TO mmuser;
ALTER DATABASE

PostgreSQL 15以降では、[mmuser]ユーザーに[public]スキーマの利用権を付与します。
postgres=# GRANT USAGE, CREATE ON SCHEMA PUBLIC TO mmuser;
GRANT

postgres=# exit

できました。


以下、Mattermostのインストールで、手順はこちらになります。
Install Mattermost Server using the tarball


3.Mattermostダウンロード

「Download the latest Mattermost Server tarball」の段落の作業です。

ダウンロードする前に、最新版のバージョンを確認します。
Host Mattermost on Your Own Infrastructure の「Install Mattermost Server」のところに書いてありますので、その番号を押さえておきます。
2024年6月12日の時点では、9.8.1です。

手順に従ってダウンロードしますが、手順は Enterprise Editionのファイルを対象としています。
手順ではダウンロード対象ファイル名が「mattermost-X.X.X-linux-amd64.tar.gz」(X.X.Xがバージョン番号)となっていますが、「mattermost-team-X.X.X-linux-amd64.tar.gz」と読み替えます。

subro@UbuntuServer2404-1:~$ wget https://releases.mattermost.com/9.8.1/mattermost-team-9.8.1-linux-amd64.tar.gz
--2024-06-12 06:19:10--  https://releases.mattermost.com/9.8.1/mattermost-team-9.8.1-linux-amd64.tar.gz
releases.mattermost.com (releases.mattermost.com)|18.64.123.108|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 267694246 (255M) [application/x-tar]
‘mattermost-team-9.8.1-linux-amd64.tar.gz’ に保存中

mattermost-team-9.8.1-linux-amd64.tar.gz         100%[=======================>] 255.29M  10.4MB/s    in 24s

2024-06-12 06:19:34 (10.9 MB/s) - ‘mattermost-team-9.8.1-linux-amd64.tar.gz’ へ保存完了 [267694246/267694246]

subro@UbuntuServer2404-1:~$ ls -l mattermost-team-9.8.1-linux-amd64.tar.gz
-rw-rw-r-- 1 subro subro 267694246  5月 28 03:42 mattermost-team-9.8.1-linux-amd64.tar.gz

ダウンロードが完了して [mattermost-team-9.8.1-linux-amd64.tar.gz]ファイルができました。


4.Mattermostインストール

ダウンロードしたファイルを解凍します。

subro@UbuntuServer2404-1:~$ tar -xvzf mattermost*.gz
mattermost/
mattermost/prepackaged_plugins/
mattermost/prepackaged_plugins/mattermost-plugin-calls-v0.26.2-linux-amd64.tar.gz

〜〜〜 中略 〜〜〜

mattermost/NOTICE.txt
mattermost/README.md
mattermost/manifest.txt

subro@UbuntuServer2404-1:~$ ls -ld mattermost
drwxr-xr-x 10 subro subro 4096  5月 27 20:17 mattermost

解凍できました。

できた [mattermost]ディレクトリを [/opt]ディレクトリの下に移動します。

subro@UbuntuServer2404-1:~$ sudo mv mattermost /opt

subro@UbuntuServer2404-1:~$ ls -ld /opt/mattermost
drwxr-xr-x 10 subro subro 4096  5月 27 20:17 /opt/mattermost

移動しました。

データ保存用ディレクトリを作ります。

subro@UbuntuServer2404-1:~$ sudo mkdir /opt/mattermost/data

subro@UbuntuServer2404-1:~$ ls -ld /opt/mattermost/data
drwxr-xr-x 2 root root 4096  6月 12 06:24 /opt/mattermost/data

ディレクトリができました。

Mattermost専用の [mattermost]ユーザーと [mattermost]グループを新規作成します。

subro@UbuntuServer2404-1:~$ sudo useradd --system --user-group mattermost

何も出ませんが、できています。

[/opt/mattermost]ディレクトリ以下のオーナーとグループを全て今作ったものに変えます。
chownコマンドの -R オプションが「以下全部」って意味です。

subro@UbuntuServer2404-1:~$ sudo chown -R mattermost:mattermost /opt/mattermost

何も出ませんが、変わっています。

[/opt/mattermost]ディレクトリ以下の全てに [mattermost]グループの書き込み権限を与えます。
chmodコマンドの -R オプションが「以下全部」って意味です。

subro@UbuntuServer2404-1:~$ sudo chmod -R g+w /opt/mattermost

何も出ませんが、与えています。


5.Mattermostを自動起動する設定

systemdのサービス設定をして、OS起動時に自動で Mattermostが起動するようにします。

[/lib/systemd/system/mattermost.service]ファイルを作成します。
touchコマンドで 0バイトのファイルができます。

subro@UbuntuServer2404-1:~$ sudo touch /lib/systemd/system/mattermost.service

subro@UbuntuServer2404-1:~$ ls -l /lib/systemd/system/mattermost.service
-rw-r--r-- 1 root root 0  6月 12 06:27 /lib/systemd/system/mattermost.service

ファイルができましたので、以下の内容に書き換えます。
私の環境では Mattermostと PostgreSQLが同じサーバーで動いていますので、手順の注記にある通り、PostgreSQLが起動してから Mattermostが起動するようピンクの箇所を追加しています。

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
BindsTo=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

手順には書いてないのですが、この設定を有効化します。

subro@UbuntuServer2404-1:~$ sudo systemctl enable mattermost.service
Created symlink /etc/systemd/system/multi-user.target.wants/mattermost.service → /usr/lib/systemd/system/mattermost.service.

有効化されました。(実行はされません)

手順ではこの設定をリロードするように書いてありますが、まだ PostgreSQLへの接続設定をしていませんので、先にそちらをやります。


6.PostgreSQLへの接続設定

Mattermostの設定ファイル [/opt/mattermost/config/config.json]を変更しますので、バックアップしておきます。

subro@UbuntuServer2404-1:~$ sudo cp /opt/mattermost/config/config.json /opt/mattermost/config/config.defaults.json

subro@UbuntuServer2404-1:~$ ls -l /opt/mattermost/config/config.defaults.json
-rw------- 1 root root 20036  6月 12 06:38 /opt/mattermost/config/config.defaults.json  ← こちらがバックアップです

できました。

[/opt/mattermost/config/config.json]ファイルのデータベース接続設定の箇所を PostgreSQL用に書き換えます。
[SqlSettings] の下の [DriverName] と [DataSource] の行です。
PostgreSQLと Mattermostを同じサーバーで動かしますので、UNIXドメインソケットを使っています。

  "SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:mostest@localhost/mattermost_test?sslmode=disable\u0026connect_timeout=10\u0026binary_parameters=yes",

    ↓

 "SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:mmuser-password@localhost/mattermost?sslmode=disable\u0026connect_timeout=10\u0026binary_parameters=yes",



7.Mattermost起動

OS起動時の動作は後にして、とりあえずこのまま起動してみます。

subro@UbuntuServer2404-1:~$ sudo systemctl start mattermost

subro@UbuntuServer2404-1:~$ systemctl status mattermost
● mattermost.service - Mattermost
     Loaded: loaded (/usr/lib/systemd/system/mattermost.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-06-12 06:45:11 JST; 3s ago
   Main PID: 1950 (mattermost)
      Tasks: 32 (limit: 9387)
     Memory: 281.5M (peak: 370.2M)
        CPU: 8.987s
     CGroup: /system.slice/mattermost.service
             ├─1950 /opt/mattermost/bin/mattermost
             ├─1981 plugins/com.mattermost.calls/server/dist/plugin-linux-amd64
             └─1990 plugins/playbooks/server/dist/plugin-linux-amd64

 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.920 +09:00","level":"info","msg":"rtc: server is listening on udp 127.0.0.1:8443","caller":"app/plugin_api.>
 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.922 +09:00","level":"info","msg":"rtc: server is listening on udp 192.168.1.103:8443","caller":"app/plugin_>
 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.923 +09:00","level":"info","msg":"rtc: server is listening on udp 192.168.1.103:8443","caller":"app/plugin_>
 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.923 +09:00","level":"info","msg":"rtc: server is listening on udp 192.168.1.103:8443","caller":"app/plugin_>
 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.924 +09:00","level":"info","msg":"rtc: server is listening on udp 192.168.1.103:8443","caller":"app/plugin_>
 6月 12 06:45:08 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:08.926 +09:00","level":"info","msg":"Listening TCP on 0.0.0.0:8443","caller":"app/plugin_api.go:1004","plugin_>
 6月 12 06:45:11 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:11.212 +09:00","level":"info","msg":"Starting Server...","caller":"app/server.go:879"}
 6月 12 06:45:11 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:11.212 +09:00","level":"info","msg":"Server is listening on [::]:8065","caller":"app/server.go:955","address":>
 6月 12 06:45:11 UbuntuServer2404-1 mattermost[1950]: {"timestamp":"2024-06-12 06:45:11.212 +09:00","level":"info","msg":"Sending systemd READY notification.","caller":"commands/server.go:130"}
 6月 12 06:45:11 UbuntuServer2404-1 systemd[1]: Started mattermost.service - Mattermost.

立ち上がっているようです。


[8065/tcp] で待ち受けていますので、動作確認のため curlコマンドでアクセスしてみます。

subro@UbuntuServer2204-1:~$ curl http://localhost:8065
HTMLっぽい内容がズラズラとでました。

結果はOKのようです。

Mattermostのサーバーができました。


8.Mattermostを使ってみる

私がクライアントとして使っている Lubuntu 24.04から Firefoxでアクセスしてみます。
私の環境での URLは [http://UbuntuServer2404-1:8065] です。

[View in Browser]を選択しました。
クライアントツール選択

初期ユーザーを作ります。
メアドとユーザー名とパスワードを設定します。
Create Accountを押します。
初期ユーザー登録

最初のチャンネルを作ります。
好きな名前を入れて、Continueを押します。
チャンネル作成 1

他の有名所のソフトとの連携ができるようです。
とりあえず何もせずContinueを押します。
チーム作成 2

Finish setupを押します。
チームのURL

Mattermostが動き出しました。
まずは日本語にします。
[歯車マーク]のアイコンを押します。
日本語化 1

[Display]を選択すると、右に設定項目が出てきますので、一番下の [Language]にある [Edit]をクリックします。
日本語化 2

[日本語]を選択して、Saveを押します。
日本語化 3

[×]で消します。
日本語化 4

日本語になりました。
日本語化 5


以上で Mattermostインストールを終わります。
あとはお好きにお使い下さい。


==========
Slackと似ているのは過去の事かも知れません。
過去のバージョンから大分変わっている気がします。
既に似て否なるものに昇華されています。

機能的に Slackに劣ることはないと思いますので、小さな組織であれば Team Editionでも十分に使えますね。

残念ながら Team Editionや Freeプランだと、冗長化などの本番運用に必要な機能は使えませんが、最近のマシンを使えばシングルノード運用でも結構な人数に耐えられるのではないかと思いますし、バックアップ運用などはやりようがあると思います。

無料でここまで…と思わせられること、間違いありません。
是非一度味わっていただきたいソフトです。