著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。

序章

Mattermost は、セキュリティと構成可能性を念頭に置いて作成されたオープンソースのコラボレーションおよびメッセージングプラットフォームであり、DiscordまたはSlackと同等の機能を提供します。 グループ、スレッド、1対1のメッセージング、無制限の検索履歴とファイル共有機能、2要素認証と通知を提供します。 Mattermostは、さらにカスタマイズするためのWebhookとボットの統合も提供します。 レスポンシブウェブインターフェースと専用のモバイルアプリにより、あらゆるタイプの最新デバイスからアクセスできます。

このチュートリアルでは、Ubuntu20.04サーバーにMattermost TeamEditionをセットアップします。 まず、無料の Let’s Encrypt TLS証明書で保護された状態で、インストールしてドメインに公開します。 次に、メール通知を有効にし、ブランディングをカスタマイズして、メッセージングボード(Mattermostではチームと呼ばれます)を作成します。

前提条件

  • 少なくとも2GBのRAM、rootアクセス、およびsudoの非rootアカウントを備えたUbuntu20.04を実行しているサーバー。 これは、この初期サーバーセットアップガイドに従ってセットアップできます。
  • サーバーにMariaDBがインストールされています。 これを行う方法については、 Ubuntu20.04にMariaDBをインストールする方法にアクセスしてください。 チュートリアルの冒頭で概説した短いバージョンに従うことができます。
  • サーバーに送信専用モードでインストールされたPostfix。 Ubuntu 20.04でPostfixを送信専用SMTPサーバーとしてインストールおよび設定する方法チュートリアルにアクセスして、これを設定してください。 これを使用して、Mattermostからの電子メール通知の送信を有効にします。
  • Nginxがサーバーにインストールされています。 これを行う方法のガイドについては、 Ubuntu20.04にNginxをインストールする方法のステップ1から4を完了してください。
  • サーバーを指す、Mattermostをホストするための完全に登録されたドメイン名。 このチュートリアルでは、全体を通してmattermost.your_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 DigitalOceanの場合、それらを追加する方法の詳細については、このDigitalOceanDNSの概要に従うことができます。

:Postfix SMTPサーバーが正しく機能するには、サーバーのPTRレコードがyour_domainと一致する必要があります。 コマンドプロンプトでhostnameと入力すると、サーバーのホスト名を確認できます。 出力は、サーバーを作成したときにサーバーに付けた名前と一致する必要があります。

ステップ1—Mattermostのインストール

このセクションでは、サーバーにMattermostを設定します。 これには、最新バージョンをダウンロードし、MariaDBデータベースを使用するように構成し、Mattermostを常にバックグラウンドで実行し続けるsystemdサービスを作成する必要があります。

Mattermostのダウンロード

Mattermostのインストールに関連するすべてのデータを~/mattermostという名前のフォルダーに保存します。 次のコマンドを実行して作成します。

  1. mkdir ~/mattermost

そこに移動します:

  1. cd ~/mattermost

公式ウェブサイトのMattermostdownload ページにアクセスし、最新リリースのリンクをコピーする必要があります。 執筆時点では、最新バージョンは5.24.2でした。 次のコマンドでwgetを使用してダウンロードします。

  1. wget https://releases.mattermost.com/5.24.2/mattermost-5.24.2-linux-amd64.tar.gz

次に、次のコマンドを実行してアーカイブを解凍します。

  1. tar -xvzf mattermost*.gz

このコマンドは、名前がmattermostで始まるディレクトリ内のすべてのアーカイブファイルを解凍します。

ダウンロードした元のファイルとまったく同じ名前のフォルダーが作成されます。このフォルダーには、Mattermostバイナリが含まれています。 /optにコピーして、次のコマンドを実行することでシステム全体にアクセスできるようにします。

  1. sudo cp -r mattermost /opt

次に、Mattermostのフォルダーを作成します。このフォルダーには、ユーザーデータが保存されます。

  1. sudo mkdir /opt/mattermost/data

注: Mattermostは、あなたとあなたのチームが共有するファイルと画像をこのディレクトリに保存するため、ドライブが配置されているドライブに十分な空き容量があることを確認してください。

次に、Mattermostのユーザーとグループを作成します。

  1. sudo useradd --system --user-group mattermost

次に、新しく作成したユーザーとそのグループにデータフォルダーを所有させます。

  1. sudo chown -R mattermost:mattermost /opt/mattermost

これは、侵害が発生した場合に、攻撃者がMattermostディレクトリに限定され、システムの他の部分に簡単にアクセスできないようにするために行われます。

最後に、/opt/mattermostディレクトリをグループで書き込み可能にします。

  1. sudo chmod -R g+w /opt/mattermost

Mattermostバイナリがセキュリティで保護された権限で配置されたので、データベースを設定しましょう。

データベースの設定

次のコマンドを実行して、MariaDBプロンプトを入力することから始めます。

  1. sudo mysql

次のコマンドを実行してmmuserというデータベースユーザーを作成し、your_mmuser_passwordを任意のパスワードに置き換えます。

  1. CREATE USER 'mmuser'@'%' IDENTIFIED BY 'your_mmuser_password';

次に、Mattermostのデータベースを作成します。

  1. CREATE DATABASE mattermost;

mmusermattermostデータベースにアクセスできるようにするには、次のコマンドを実行してアクセス権限を付与します。

  1. GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'%';

次に、付与テーブルをリロードして、変更をすぐに適用します。

  1. FLUSH PRIVILEGES;

完了したら、プロンプトを終了します。

  1. exit

データベースとそれに付随するユーザーを作成したら、メインのMattermost構成ファイルを編集して、正しいデータベース接続文字列を設定します。

編集のために開きます:

  1. sudo nano /opt/mattermost/config/config.json

次のような行を見つけます。

/opt/mattermost/config/config.json
. . .
"DriverName": "..."
"DataSource": "..."
. . .

your_mmuser_passwordを、mmuserデータベースアカウントに設定したパスワードに置き換えて、次のように変更します。

/opt/mattermost/config/config.json
...
"DriverName": "mysql"
"DataSource": "mmuser:your_mmuser_password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"
...

完了したら、ファイルを保存して閉じます。

これで、ユーザー、チーム、およびメッセージを格納する新しく作成されたデータベースを使用するようにMattermostを構成しました。 これで、systemdサービスの作成に進む準備ができました。

systemdサービスの作成

systemdを使用してMattermostをサービスとして実行すると、常にバックグラウンドで実行されます。

サービス構成は、mattermost.serviceという名前のファイルの/lib/systemd/systemディレクトリに保存されます。このディレクトリには、systemdがサービスを保存します。 テキストエディタを使用して作成します。

  1. sudo nano /lib/systemd/system/mattermost.service

次の行を追加します。

/lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

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

[Install]
WantedBy=mysql.service

ここでは、最初にサービスの説明を指定します。 次に、mysqlサービスは、Mattermostサービスが機能するためにMariaDBを実行する必要があるため、Mattermostサービスの前に開始する必要があることを示します。 [Unit]セクションの後で、サービスのタイプを定義します。 notifyは、プロセスがロードされたことをsystemdに通知することを意味します。 実行するコマンドを指定し、再起動ポリシーをalwaysに設定します。 また、プロセスの作業ディレクトリと、プロセスを実行するユーザーとグループを定義します。

[Install]セクションで、WantedByパラメーターの値としてデータベースサービスを指定して、Mattermostがデータベースと一緒に再起動するようにします。 この設定を省略すると、データベースが自動的に更新されるときに問題が発生する可能性があります。これは、Mattermostが再起動しないと動作を停止する可能性があるためです。

ファイルを保存して閉じてから、次のコマンドを実行してすべてのサービスをリロードします。

  1. sudo systemctl daemon-reload

正しくロードされていることを確認してください。

  1. sudo systemctl status mattermost

次の出力が表示されます。

Output
● mattermost.service - Mattermost Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled) Active: inactive (dead)

systemdがエラーを報告した場合は、サービスファイルのファイル名、その場所、およびその内容の有効性を再確認してください。

次に、以下を実行してMattermostサービスを有効にします。

  1. sudo systemctl enable mattermost

このステップでは、Mattermostをダウンロードし、MariaDBデータベースを使用するように構成し、systemdサービスを作成しました。 次のステップでは、ドメインで公開します。

ステップ2—ドメインで最も重要なことを公開する

このセクションでは、NginxをMattermostのリバースプロキシサーバーとして構成します。

Nginxを構成する前に、メインのMattermost構成ファイルでドメインを指定する必要があります。 編集のために開きます:

  1. sudo nano /opt/mattermost/config/config.json

次のような行を見つけます。

/opt/mattermost/config/config.json
. . .
"SiteURL": ""
. . .

ドメインの名前を引用符で囲みます。

/opt/mattermost/config/config.json
...
"SiteURL": "http://mattermost.your_domain"
...

ファイルを保存して閉じます。

Nginxの前提条件の手順で学習したように、そのサイト構成ファイルは/etc/nginx/sites-availableに保存され、後でアクティブにするには/etc/nginx/sites-enabledにシンボリックリンクする必要があります。

ドメインでMattermostを公開するための構成を、/etc/nginx/sites-availableの下のmattermost.confという名前のファイルに保存します。 エディターを使用して作成します。

  1. sudo nano /etc/nginx/sites-available/mattermost.conf

次の行を追加します。

/etc/nginx/sites-available/mattermost.conf
upstream backend {
   server localhost:8065;
   keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
   listen 80;
   server_name mattermost.your_domain;

   location ~ /api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       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_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 90;
       proxy_send_timeout 300;
       proxy_read_timeout 90s;
       proxy_pass http://backend;
   }

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       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_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

mattermost.your_domainを目的のドメインに置き換えてから、ファイルを保存して閉じます。

このファイルでは、NginxがHTTPポート80をリッスンする必要があることを定義します。 次に、リクエストを受け入れてこの特定の構成を適用するドメインをNginxに指示するserver_nameを指定します。 次の2つのブロックは、Mattermostが正しく機能するように、プロキシ接続をさらに構成します。

このサイト構成をアクティブにするには、次のコマンドを実行して、/etc/nginx/sites-enabledフォルダーにそのサイトへのシンボリックリンクを作成する必要があります。

  1. sudo ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.conf

構成の有効性をテストするには、次のコマンドを実行します。

  1. sudo nginx -t

次の出力が表示されます。

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

構成を有効にするには、Nginxを再起動する必要があります。

  1. sudo systemctl restart nginx

次に、以下を実行してMattermostサービスを開始します。

  1. sudo systemctl start mattermost

このコマンドが終了したら、ブラウザでドメインに移動してみてください。 サインアップを求めるページが表示されます。

Mattermost - Sign up prompt

これで、Mattermostのインストールが利用可能になり、ドメインでアクセスできるようになりました。 次のステップでは、無料のLet’sEncryptTLS証明書を適用してセキュリティを確保します。

ステップ3—ドメインを保護する

このセクションでは、Certbotを使用してプロビジョニングするLet’sEncryptTLS証明書を使用してドメインを保護します。

前提条件の一部としてCertbotをすでにインストールしている必要があるため、次を実行してNginxプラグインをインストールするだけで済みます。

  1. sudo apt install python3-certbot-nginx

また、前提条件の一部として、ufw(Uncomplicated Firewall)を有効にし、暗号化されていないHTTPトラフィックを許可するように構成しました。 セキュリティで保護されたサイトにアクセスできるようにするには、次のコマンドを実行して、暗号化されたトラフィックを受け入れるようにサイトを構成する必要があります。

  1. sudo ufw allow https

出力は次のようになります。

Output
Rule added Rule added (v6)

Nginxと同様に、構成を有効にするには、Nginxをリロードする必要があります。

  1. sudo ufw reload

出力には次のように表示されます。

Output
Firewall reloaded

ドメインの証明書を要求するには、次のコマンドを実行します。

  1. sudo certbot --nginx -d mattermost.your_domain

このコマンドでは、certbotを実行してドメインの証明書を要求します。つまり、-dパラメーターを使用してドメイン名を渡します。 --nginxフラグは、HTTPSをサポートするようにNginxサイト構成を自動的に変更するように指示します。 mattermost.your_domainをドメイン名に置き換えることを忘れないでください。

Certbotを初めて実行する場合は、緊急通知用の電子メールアドレスを提供し、EFFの利用規約に同意するように求められます。 次に、CertbotはLet’sEncryptからドメインの証明書を要求します。 次に、すべてのHTTPトラフィックをHTTPSにリダイレクトするかどうかを尋ねられます。

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

セキュリティを最大化するために、2番目のオプションを選択することをお勧めします。 選択内容を入力したら、ENTERを押します。

出力は次のようになります。

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mattermost.your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mattermost.your_domain/privkey.pem Your cert will expire on 2020-09-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

これは、CertbotがTLS証明書を正常に生成し、それらをドメインのNginx構成に適用したことを意味します。

これでドメインにHTTPSを使用してアクセスできるようになったため、メインのMattermost構成ファイルでドメインのURLを修正する必要があります。 編集のために開きます:

  1. sudo nano /opt/mattermost/config/config.json

もう一度、次のような行を見つけます。

/opt/mattermost/config/config.json
. . .
"SiteURL": "http://mattermost.your_domain"
. . .

httphttpsに変更します。

/opt/mattermost/config/config.json
. . .
"SiteURL": "https://mattermost.your_domain"
. . .

編集する必要があるのはこれだけなので、ファイルを保存して閉じます。

次のコマンドを実行してMattermostを再起動します。

  1. sudo systemctl restart mattermost

これで、ブラウザでMattermostドメインをリロードし、サイトアドレスの左側にある南京錠を確認できます。これは、接続が適切に保護されていることを意味します。

TLS証明書が正常に構成され、安全な接続を介してドメインにアクセスできるようになったので、Mattermostを構成する準備が整いました。

ステップ4—Mattermostのセットアップ

このセクションでは、Mattermostでチームを作成し、電子メール通知を設定し、サーバーのブランドを変更します。

初めてMattermostにアクセスするときは、サーバーへの管理者権限を持つアカウントを作成する必要があります。 すでにアカウントをお持ちの場合は、代わりにログインできます。 ログインすると、参加できるチームがないことを示すページが表示されます。

これを修正するには、チームの作成を選択します。 チームに名前を付けるように求めるページが表示されます(たとえば、Sammy)。

Mattermost - Creating a Team

お好きな名前を入力して、次へをクリックしてください。 次に、ドメインでチームのWebアドレスを定義するように求められます。これは、Mattermostのチームのアクセスポイントになります。

Mattermost - Team URL

URLは変更しないでおくことができます。 完了したら、[完了]をクリックします。 Mattermostがチームを作成し、チュートリアルをスキップすると、メインのインターフェースが表示されます。ここで、ほとんどの時間をコミュニケーションに費やします。

Mattermost - Main Interface

インターフェースについては、次のステップで詳しく説明します。 設定にアクセスするには、左上隅にあるユーザー名をクリックしてから、システムコンソールをクリックします。 このオプションにアクセスできるのは、管理者ユーザーの場合のみです。

Mattermost - Selecting System Console

左側には、Mattermost構成のセクションへのアクセスを提供するメニューがあります。 最初にメール通知を設定するので、SMTPオプションをクリックします。これは環境の下にあります。

Mattermost - SMTP Section

前提条件の一部としてインストールしたPostfixサーバーに接続するには、localhostSMTPサーバーとして入力し、25SMTPサーバーポートとして入力します]。 完了したら、青い保存ボタンをクリックし、さらに下にある接続のテストボタンを押します。 緑色のボックスに次のようなメッセージが表示されます電子メールの送信中にエラーは報告されませんでした。 受信トレイをチェックして確認してください。

Mattermost - SMTP Verification Successful

これで、サインアップした電子メールの受信ボックスを確認できます。 メール設定が正しく設定されていることを示すMattermostからのメッセージが表示されます。 届かない場合は、迷惑メールフォルダを確認してください。 Mattermostからエラーを受け取った場合は、入力内容を再確認し、必要に応じて、前提条件のチュートリアルをもう一度実行してください。

メールが機能していることを確認したので、メニューのサイト構成の下にある通知を選択して、メール通知を有効にする必要があります。 電子メール通知を有効にする設定をtrueに設定し、通知元アドレスmattermost@your_domainなどの任意の電子メールアドレスに設定します。

実際に存在する必要はなく、監視されないため、通知表示名としてno-replyと入力します。これは、電子メールクライアントに表示される送信者の名前です。 オプションで、電子メールバッチ処理を有効にするを使用して、複数の未読メッセージを1つの電子メールに圧縮し、チームのメンバーに送信する電子メールの総数を減らすことができます。 設定の変更が終わったら、保存をクリックします。

メール通知をグローバルに有効にしました。オプションで、サイト構成の下にあるカスタマイズオプションを選択して、サーバーのブランドを変更できます。 ここでは、サイト名サイトの説明を設定したり、カスタムブランドの画像とテキストをアップロードしたりできます。

システムコンソールを終了するには、左上隅のユーザー名をクリックし、ドロップダウンメニューから最初のオプションを選択します。

Mattermostでチームを作成し、メール通知を設定したので、チームで行われている新しいディスカッションについて常に通知されます。

結論

これで、独自のスケーラブルなセルフホストメッセージングプラットフォームができました。これを使用して、すべてのデバイス間で共同作業を行うことができます。 これで、より効率的に通信し、ファイルを共有し、メッセージやチャネル全体を簡単に検索できるようになります。

Mattermostユーザーインターフェイスの使用について詳しく知りたい場合は、公式ドキュメントにアクセスしてください。