GCP無料枠を使ってたったの30分でOSS版Slack「Mattermost」を構築する【SSL化も対応】

GCP無料枠を使ってたったの30分でOSS版Slack「Mattermost」を構築する【SSL化も対応】

「Google Cloud Platform」の無料枠を使いOSS版のSlackともうたわれている「Mattermost」をSSL化も含めて構築する方法を紹介します。構築時間はたったの30分ほど済んでしまうので手軽に構築でき運はないかなと思います。

私は取引先との連絡・データのやりとりにSlackを使用していますが、無料プランではいかんせん使用できるデータ容量が少なく、かといって有料に乗り換えるには躊躇してしまっています。そこでOSS版のSlackともうたわれている「Mattermost」をテスト的に構築して見ました。「Google Computer Engine」(以下、GCE)とそこで提供されているBitnamiのMattermostを使用すれば、簡単に構築できたので、その手順を紹介したいと思います。

「Mattermost」をGCP無料枠を使って構築する方法

以下のものはすでに準備されているものとして進めていきたいと思います。
・独自ドメイン(今回は「Freenom」で無料ドメインを取得して構築)
・「Google Cloud Platform」のアカウント(GCEを使用するため)

「Mattermost」をGCP無料枠を使って構築

まずは「Google Cloud Platform」にログインしメニューから「Compute Engine」から「インスタンス作成」の画面に入り、「Marketplace」から「mattermost」を検索し、「Mattermost Team Edition Certified by Bitnami」を選択します。

画面が切り替わったら「COMPUTE ENGINE上で起動」をクリックします。

VMインスタンスを無料枠になるように設定

次にVMインスタンスの詳細を設定します。ここでは「無料枠」が適用されるUSリージョンのゾーンを選びましょう。「us-central1-a」を選んでおけば問題ないです。

マシンタイプも「無料枠」を適用させるのに大事なポイント。必ず最低スペックの「micro(共有vCPU x 1)メモリ0.6 GB f1-micro」を選びましょう

ディスク容量は推薦では10GBとなっていますが、無料枠いっぱいの30GBにしておいても良いかもしれません。別記事で紹介する「AWS S3」との連携を考えているのであれば推薦の10GBのままにしておきましょう。

右側に「1か月あたり $5.08推定費用」と表示されますが「ゾーン」「マシンタイプ」「ディスク容量」が無料枠の条件にあっていれば課金されませんのでご安心ください。

設定後、下部にある「デプロイ」をクリックすれば5分ほどでVMインスタンスが起動します。


スポンサーリンク

構築した「Mattermost」のログイン情報を確認

次に構築した「Mattermost」のログイン情報を確認しましょう。初期設定のユーザー名は「user」で、パスワードはランダムで生成されており、起動したVMインスタンスの詳細画面内で確認できます。

VMインスタンスの詳細画面に入り「カスタム メタデータ」の「bitnami-base-password」にパスワードが記載されています。

VMインスタンスに外部IPアドレスを設定

次に構築したVMインスタンスに外部IPアドレスを割り当てましょう。

左のメニューから「VPCネットワーク」→「外部IPアドレス」を選びます。

上部の「静的アドレスを予約」をクリックし、外部IPアドレスを設定しましょう。今回、名前は「mattermost-ip」としました。

「リージョン」と「接続先」を先ほど構築したインスタンスに合わせます。

新しく作った外部IPアドレスをインスタンスなどに関連付けさせていなければ課金されるので注意してください。もし作成したインスタンスを削除した場合は、必ず作成した外部IPアドレスも開放させましょう。

外部IPアドレスを確認しIPアドレスを独自ドメインのDNSに設定

「外部IPアドレス」に戻ると新しく外部IPアドレスが作られているので「外部アドレス」に書かれているIPアドレスを独自ドメインのDNSに設定しましょう。

bnconfigのツールを使用してホスト名を変更

初期設定のままだと内部の設定ファイルなどがはじめに構築した時のIPアドレスになっているので、下記のコマンドを実行してホスト名などを一括で変更します。サブドメインを使用する場合は、サブドメインを含めたドメインで実行しましょう。

# サービスを停止
sudo /opt/bitnami/ctlscript.sh stop

# 設定ファイルを一括変更
sudo /opt/bitnami/apps/mattermost/bnconfig --machine_hostname ドメイン

# サービスを起動
sudo /opt/bitnami/ctlscript.sh restart

「Bitnami」のバナーを削除

「Bitnami」提供のアプリケーションは、初期状態では画面の右下に「Bitnami」のバナーが表示されます。下記のコマンドを実行して「Bitnami」のバナーを削除しましょう。

# バナー削除
sudo /opt/bitnami/apps/mattermost/bnconfig --disable_banner 1

# サービスを再起動
sudo /opt/bitnami/ctlscript.sh restart

GCEのVMインスタンスを「Let’s Encrypt SSL Certificate」でSSL化する

今回は無料で利用できる「Let’s Encrypt SSL Certificate」でSSL化します。SSL化にはクライアント「lego」を利用します。

VMインスタンスに「Let’sEncrypt」のクライアント「lego」をインストールし実行する

今回紹介する手順はBitnamiの公式マニュアルに沿ったものとなってます。Go言語で書かれたLet’sEncryptのクライアント「lego」を使用します。

「lego」でSSL化していくには下記のコマンド群を実行しますが、変更箇所が多々あるので注意して進めていきましょう。適切に変更しないとエラーにな流ので注意してください。

ルート階層にある「tmp」フォルダーへ移動します。

cd /tmp

最新版の「lego」をダウンロードします。

curl -s https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -

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

tar xf lego_v*

解凍したフォルダー「lego」を階層「/usr/local/bin/」へ移動します。

sudo mv lego /usr/local/bin/lego

bitnamiのサービスを停止します。

sudo /opt/bitnami/ctlscript.sh stop

以下のコマンドの「メールアドレス」、「ドメイン」を各自のものに置き換えて実行します。下記はルートドメインとサブドメインを併記した場合のコマンドで、ルートドメインもしくはサブドメインのみでも大丈夫です。

sudo lego --email="メールアドレス" --domains="ドメイン" --domains="サブドメイン.ドメイン" --path="/etc/lego" --http run

実行後に「Do you accept the TOS? Y/n」に聞かれるので「Y」を入力しエンターします。

次に証明書などの場所を下記のコマンドで置き換え、権限を変更します。4、5行目の「ドメイン」(2か所)の部分は各自のものに置き換えて実行してください。念のために1行ずつ実行していったほうがいいでしょう。先ほどルートドメインとサブドメインを併記した場合、もしくは「ルートドメイン」のみの場合は「ドメイン」を「ルートドメイン」に、「サブドメイン」のみの場合は下記の「ドメイン」の部分をサブドメインを含めた形で置き換えてください。(不明な場合は「/etc/lego/certificates/」内に作られた鍵と証明書を確認してください。)

# 初期の鍵と証明書に「.old」を付けてバックアップ
sudo mv /opt/bitnami/apps/mattermost/conf/certs/server.crt /opt/bitnami/apps/mattermost/conf/certs/server.crt.old
sudo mv /opt/bitnami/apps/mattermost/conf/certs/server.key /opt/bitnami/apps/mattermost/conf/certs/server.key.old

# 取得した鍵と証明書をリンクさせる(「ドメイン」を置き換えること)
sudo ln -s /etc/lego/certificates/ドメイン.key /opt/bitnami/apps/mattermost/conf/certs/server.key
sudo ln -s /etc/lego/certificates/ドメイン.crt /opt/bitnami/apps/mattermost/conf/certs/server.crt

# 権限を変更
sudo chown root:root /opt/bitnami/apps/mattermost/conf/certs/server*
sudo chmod 600 /opt/bitnami/apps/mattermost/conf/certs/server*

エラーなどもなくファイルを置き換え、権限を変えたら下記のコマンドでbitnamiのサービスを起動します。

sudo /opt/bitnami/ctlscript.sh start

これで基本的なSSL化の設定ができたのでSSL化されているか「https://ドメイン」でアクセスして確認してみましょう。問題なくSSL化されていれば下記のように表示されます。

「Let’s Encrypt SSL Certificate」の更新を自動化する

「Let’s Encrypt SSL Certificate」で取得した証明書の有効期限は3か月ですので、下記のコマンドで自動化スクリプトを作成して登録します。

はじめにスクリプトを作成します。下記のコマンドで「/etc/lego/」の階層に「renew-certificate.sh」を新規ファイルとして作成します。

sudo vi /etc/lego/renew-certificate.sh

エディター画面に入ったら下記のスクリプトをペースとして保存します。「メールアドレス」、「独自ドメイン」を各自のものに置き換えてペーストして保存してください。

#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop apache
sudo /usr/local/bin/lego --email="メールアドレス" --domains="ドメイン" --path="/etc/lego" --http renew
sudo /opt/bitnami/ctlscript.sh start apache

下記のコマンドでスクリプトの権限を変更し実行できるようにします。

sudo chmod +x /etc/lego/renew-certificate.sh

次に下記のコマンドでcrontabを開きます。

sudo crontab -e

上記のコマンドを実行して下記のように表示されたら「1」をエンターして進めてください。

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
Choose 1-3 [1]: 1

エディターで開いたら下記の行をcrontabのファイルの最終行にペーストして追加して保存します。「nano」の操作方法に関しては省略します。

0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null

これで毎月1日の0時00分に「Let’s Encrypt SSL Certificate」の証明書が更新されます。

GCEに構築した「Mattermost」にログイン

これでサーバー側の設定は完了したのでログインしてみよう。

初期状態のログイン名は「user」で、パスワードは前述したように、VMインスタンスの詳細画面に入り「カスタム メタデータ」の「bitnami-base-password」でパスワードを確認できます。

「Mattermost」の通知メール(SMTP)を設定

「Mattermost」の通知メールを設定を設定するまでは「プレビューモード」という状態でプログラムが動いています。これを解除するためにも、はじめに通知などで利用する送信メールの設定をしましょう。SMTPサーバーを設定しますが、利用できるSMTPサーバーを所持してない場合は、GCPが推薦しているSendGridを利用して設定します。

「SendGrid」のアカウント登録

「Cloud Marketplace」にあるSendGrid Email APIを経由し、手順に沿って「SendGrid」のアカウントを作成します。

「Senfgrid」のアカウント登録で使用したユーザー名とパスワードは、後で設定するSMTPサーバーのユーザー名とパスワードになるので控えておきましょう

「SendGrid」の「Sender Authentication」を設定

次に送信メールの信頼性を高めるために「SendGrid」の「Sender Authentication」を設定します。この設定を行わなくてもメールは送信できますが、迷惑メールと判断される可能性が高くなりますので、面倒でも設定しておきましょう。

「SendGrid」の「Stteings」内にある「Sender Authentication」を選択し、「Authenticate Your Domain」をクリックしましょう。

使用しているDNSなどを入力しますが、該当するDNSなどがなければそのまま「Next」をクリックしても良いでしょう。

次に送信メールに記載されるメールアドレスを設定します。ここでは「Mattermost」で使用したドメイン(サブドメイン含むものでも)を入力しましょう。

するとDNSに設定する「CNAME」が表示されるので、これをDNSに設定しましょう。これらは「SPF」「DKIM」として動作します。

DNSに登録し反映されたら「I’ve added these records.」にチェックを入れて「Verify」をクリックします。

問題なく設定され動作したら以下のように表示されます。

これで「SendGrid」での設定は終わりました。

「Mattermost」の送信メールを設定

次に「Mattermost」のメニューから「System Console」の画面に入り、左メニューの「NOTIFICATIONS」の下層にある「Email」の設定画面に移動し、下記の項目を記入、変更します。

Enable Email Notifications: true
Notification From Address: 任意のメールアドレス
SMTP Server: smtp.sendgrid.net
SMTP Server Port: 587
Enable SMTP Authentication: true
SMTP Server Username:「Sendgrid」のユーザー名
SMTP Server Password:「Sendgrid」のパスワード
Connection Security: STARTTLS

上記の設定を入力してから「Test Connection」をクリックし「No errors were reported while sending an email. Please check your inbox to make sure.」を表示されたら成功です。

まとめ

これで、「Mattermost」の初期の設定が完了し、使用できるよる状態になりました。GCEの無料枠でBitnamiが提供しているイメージを使えば、あっという間に「Mattermost」を構築できました。今回は構築して使えるまでの手順を紹介しましたが、別記事で「日本語の表示設定」「データをAWS S3に保存する方法」「データベースを定期的にAWS S3へバックアップする方法」も紹介したいと思います。
では素晴らしい「Mattermost」ライフをお過ごしください。

コメントする