所属しているDiscordサーバーがダメになったとき用の避難所をオンプレで作っておきたかったので、余っているRaspberry PiでMattermostサーバを建ててみる検証をした。
参考にしたページ
- Raspberry Pi 3 に Mattermost を構築する
- Mattermost Team Server is installable, and performs well in Ubuntu 20.04 64bit (英語)
- MattermostをUbuntu22.0.4 サーバにインストールする手順
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をダウンロードします。
ここで、もしダウンロードできなかった場合は配布サイトを確認しバージョン番号を合わせてください。
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
ユーザ登録画面が表示されるので、画面に従ってユーザ登録をします
最後に、Mattermost がサーバブート時に起動するように設定します
sudo systemctl enable mattermost.service
メールを送れるようにする
左端の黒地の部分を下にスクロールし、 SMTP をクリックします
ひとまずフリーメールなどを取得し情報を入れていきます
入力する情報はメール事業者によって異なるので割愛します
Saveしたあと、Test Connectionをクリックするとテストメールが送られます
Mattermost - Testing Email Settings という件名のメールが来たら成功です
Email notificationsの設定
左端の黒地の部分を下にスクロールし、 Notifications をクリックします
- 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が有効になっています。