オンプレ環境に Mattermostをインストールします。
Slackや Teamsを会社のコミュニケーションツールとして使ってみたいな〜と思いながらも、インターネットに社内情報を流すのは NGという会社に所属している人も多かろうと思います。
そんなあなたにオススメなのが Mattermost。
そう、それはあなたが特別な存在だからです。
Mattermost
2015年にリリースされた OSSのチャットツールで、当時は Slackそっくりで「これがあれば Slackイラネっ」と小躍りしたものです。
そんな風でしたので当時から常に Slackとの比較で語られてきたプロダクトですが、Slackの開発者達は「Slackを超える!」と相当にイキり倒していた覚えがあります。
Mattermostのホームページの Pricing に以下のコースがあります。
※2024年6月12日時点
Free | 無料 |
Professional | 1人 $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はデータベースとして PostgreSQLか MySQLが必要です。
最近のバージョンではどうやら PostgreSQLに寄っていきたいようですが、やはり備忘録の意味も兼ねて MySQLでやってみようと思っていたのです。
つい先日 MySQLの LTS(Long Term Support)版の最新である 8.4がリリースされたのですが、Mattermostgaが MySQLのこのバージョンから予約語にされてしまった単語をテーブルカラムに使っていたため、DB初期化時にエラーになってしまうようです。
これについての顛末は「[障害対応例] Mattermostインストールと MySQL」に書いています。
その後 Mattermostのコミュニティにこの件につき聞きに行ったのですが「PostgreSQLを使えよ」って言われました。
今後 Mattermostが MySQLをサポートしていくのか分かりませんし、するにしてもいつになるか分かりません。
MySQLに拘泥する必然性もないので、PostgreSQLで作るようにしました。
1.環境
環境は以下でやります。
- Ubuntu Server 24.04
- PostgreSQL 16.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を押します。
他の有名所のソフトとの連携ができるようです。
とりあえず何もせずContinueを押します。
Finish setupを押します。
Mattermostが動き出しました。
まずは日本語にします。
[歯車マーク]のアイコンを押します。
[Display]を選択すると、右に設定項目が出てきますので、一番下の [Language]にある [Edit]をクリックします。
[日本語]を選択して、Saveを押します。
[×]で消します。
日本語になりました。
以上で Mattermostインストールを終わります。
あとはお好きにお使い下さい。
==========
Slackと似ているのは過去の事かも知れません。
過去のバージョンから大分変わっている気がします。
既に似て否なるものに昇華されています。
機能的に Slackに劣ることはないと思いますので、小さな組織であれば Team Editionでも十分に使えますね。
残念ながら Team Editionや Freeプランだと、冗長化などの本番運用に必要な機能は使えませんが、最近のマシンを使えばシングルノード運用でも結構な人数に耐えられるのではないかと思いますし、バックアップ運用などはやりようがあると思います。
無料でここまで…と思わせられること、間違いありません。
是非一度味わっていただきたいソフトです。