MattermostをRaspberry Pi 4 (64bit)にインストール

所属しているDiscordサーバーがダメになったとき用の避難所をオンプレで作っておきたかったので、余っているRaspberry PiでMattermostサーバを建ててみる検証をした。

------
参考にしたページ
* [Raspberry Pi 3 に Mattermost を構築する](https://qiita.com/TakSus/items/d91482136e7e368fedee)
* [Mattermost Team Server is installable, and performs well in Ubuntu 20.04 64bit (英語)](https://forums.raspberrypi.com/viewtopic.php?f=131&t=269505&p=1635472#p1635472)
* [MattermostをUbuntu22.0.4 サーバにインストールする手順](https://qiita.com/kanetugu2018/items/51cdab279d81ae06aa70)

# MariaDBのセットアップ

インストール方法は省略します。
インストールできたら、 **mmuser**というユーザーを作成します。
```
MariaDB [(none)]> create user 'mmuser'@'%' identified by 'パスワード';
Query OK, 0 rows affected (0.004 sec)

MariaDB [(none)]> select user,host from mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| mmuser      | %         |
| root        | %         |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+
5 rows in set (0.005 sec)
```
次に、**mattermost**というデータベースを作成します。
```
MariaDB [(none)]> create database mattermost;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all privileges on mattermost.* to 'mmuser'@'%';
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE ON mattermost.* TO 'mmuser'@'%';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> exit
Bye
```

# 64bit版Mattermostをインストール

自分の使っているRaspberry Piが64bit版OSであることを念の為確認してください。
**aarch64**という文字列が含まれていれば、64bit版です。
```
pi@raspberrypi4:~ $ uname --kernel-name --kernel-release --machine
Linux 6.1.21-v8+ aarch64
```

下記wgetコマンドで、非公式版ですがARM64版のMattermostをダウンロードします。
ここで、もしダウンロードできなかった場合は[配布サイト](https://github.com/SmartHoneybee/ubiquitous-memory/releases/)を確認しバージョン番号を合わせてください。
```
pi@raspberrypi4:~ $ wget https://github.com/SmartHoneybee/ubiquitous-memory/releases/download/v7.5.2/mattermost-v7.5.2-linux-arm64.tar.gz
```

ダウンロードしたファイルを展開します
```
tar -zxvf mattermost-v7.5.2-linux-arm64.tar.gz
```

抽出したファイルを **/opt** ディレクトリに移動します
```
sudo mv mattermost /opt
```

ファイルの保存ディレクトリを作成します
```
sudo mkdir /opt/mattermost/data
```

**mattermost** という名前でシステムユーザとグループを作成します
```
sudo useradd --system --user-group mattermost
```

ユーザーおよびグループ **mattermost** を Mattermost ファイルの所有者として設定します
```
sudo chown -R mattermost:mattermost /opt/mattermost
```

グループに書き込み権限を追加します
```
sudo chmod -R g+w /opt/mattermost
```

データベースドライバをセットアップします。まずはテキストエディタでコンフィグファイルを開きます
```
sudo vi /opt/mattermost/config/config.json
```
**SqlSettings** 内の **DriverName** を **mysql** に設定します。(mariadb ではありません)
DataSourceを次の値に設定し、パスワードを適切な値に置き換えます
```
mmuser:パスワード@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
```
コンフィグファイルの該当行周辺は下記のようになります。
```
(略)
    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:831DAtndn@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",
        "DataSourceReplicas": [],
(略)
```

# Mattermostサーバを試しに起動する

bin ディレクトリに移動します
```
cd /opt/mattermost
```
Mattermost サーバーをユーザー Mattermost として起動します
```
sudo -u mattermost ./bin/mattermost
```
サーバーにアクセスできることをテストするには、次の場所に移動します
```
http://Raspberry PiのIPアドレス:8065
```

# サービスに登録する

systemdユニットファイルを作成します
```
sudo touch /lib/systemd/system/mattermost.service
```

テキスト エディタでroot としてユニット ファイルを開きます
```
sudo vi /lib/systemd/system/mattermost.service
```

次の行をファイルにコピーします
```
[Unit]
Description=Mattermost
After=network.target
After=mariadb.service
Requires=mariadb.service

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

[Install]
WantedBy=multi-user.target
```

systemd に新しいユニットをロードさせます
```
sudo systemctl daemon-reload
```

ユニットがロードされていることを確認します
```
sudo systemctl status mattermost.service
```

Mattermost をまだ開始していないため、次のような出力が表示されるかと思います
```
● mattermost.service - Mattermost
     Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
```

サービスを開始します
```
sudo systemctl start mattermost.service
```

もう一度サービスの確認をします
```
sudo systemctl status mattermost.service
```

Mattermost が実行中であることを確認します
```
● mattermost.service - Mattermost
     Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-12-30 18:07:07 JST; 2s ago
   Main PID: 10733 (mattermost)
      Tasks: 10 (limit: 8755)
        CPU: 1.492s
     CGroup: /system.slice/mattermost.service
             └─10733 /opt/mattermost/bin/mattermost

Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.036 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.040 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.041 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.048 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.213 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.213 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.223 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 systemd[1]: Started Mattermost.
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.224 +09:00","level":">
Dec 30 18:07:07 raspberrypi4 mattermost[10733]: {"timestamp":"2023-12-30 18:07:07.224 +09:00","level":">
```

Web管理インターフェイスでMattermostの初回セットアップをします。
まず、Web ブラウザで、次の場所にアクセスします
```
http://Raspberry PiのIPアドレス:8065
```
ユーザ登録画面が表示されるので、画面に従ってユーザ登録をします
![screenshot 2023-12-30 18.21.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/3446ae50-c149-b81b-39f6-b4c6994c67b7.png)

Go to System Consoleをクリックします
![screenshot 2023-12-30 18.26.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/1804235e-5574-f288-fa1a-42a4bdcce54d.png)

左下のチュートリアルを×で閉じます
![screenshot 2023-12-30 18.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/634f6b78-7b14-d142-3a82-eb09f03e5efb.png)

このような画面になればひとまずOKです
![screenshot 2023-12-30 18.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/98f57474-431c-462d-b153-4bea5b516948.png)

最後に、Mattermost がサーバブート時に起動するように設定します
```
sudo systemctl enable mattermost.service
```

# メールを送れるようにする

左端の黒地の部分を下にスクロールし、 **SMTP** をクリックします
![screenshot 2023-12-30 20.37.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/dff9e983-3b7f-f605-3f8e-e83fd82dc9da.png)

ひとまずフリーメールなどを取得し情報を入れていきます
入力する情報はメール事業者によって異なるので割愛します

Saveしたあと、Test Connectionをクリックするとテストメールが送られます
**Mattermost - Testing Email Settings** という件名のメールが来たら成功です


# Email notificationsの設定

左端の黒地の部分を下にスクロールし、 **Notifications** をクリックします
![screenshot 2024-01-06 12.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389620/4f82f832-42fa-0b35-3636-998f134f2679.png)

- **Enable Email Notifications** を True に設定
- **Notification Display Name** を設定
- **Notification From Address** を設定
- **Support Email Address** を設定
- **Save** をクリック

# Nginxの設定

/etc/nginx/conf.d の下に mattermost.conf を作成
```
server {
        listen          8088;
        location / {
                client_max_body_size 50M;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Frame-Options SAMEORIGIN;
                proxy_pass http://localhost:8065;
        }
}
```
再起動
```
sudo reboot
```
Web ブラウザで、次の場所にアクセスします
```
http://Raspberry PiのIPアドレス:8088
```
アクセスできれば、Nginxが有効になっています。