ConoHa Advent Calendar 2018 〜5日目〜

· ☕ 7 min read · ✍️ 靴ひも 伍長

ConoHa Advent Calendar 2018 〜5日目〜

ConoHa-Advent-Calendar-2018

こちらは ConoHa Advent Calendar 2018 5日目のエントリです。4日目は @yoku0825 さんの 相変わらずConoHaでMySQLをビルドします でした!ビルドアップ!!

あっという間に年の瀬ですね。皆様いかがお過ごしでしょうか。平成最後のアドベントカレンダー、張り切ってまいりましょう!登録しすぎてしにそう(しなない)!

ちなみに今日は私の誕生日です。ハッピーバースデー、デビルマン!!!(1回目)

Mattermost を起動した話

前から気になってた Mattermost(マッターモスト)アプリケーションイメージ から起動した話をします。Mattermost は Slack 風のチャットツールです。私が個人的に魅力的だと思ったのが遡れるメッセージの制限がないことです。Slack 無料版は最新10,000件のメッセージまでしか遡れないけど、Mattermost はすべてのメッセージを遡れます。

ただ起動するだけだとアレなので↓の設定を適用しました。

  • 独自ドメイン(サブドメイン)の設定
  • HTTPS 設定

サーバ起動

Mattermostアプリケーションイメージの使い方 を参照しながらサーバを起動します。今回起動したサーバの構成は以下のとおりです。(2018年12月時点)

OS/ミドルウェア名バージョン
CentOS7.5.1804
Nginx1.12.2
MariaDB10.3.11
Mattermost5.4.0

初期設定

起動直後のサーバ設定を一部変更します。

ホスト名変更

サーバのホスト名を任意の名前へ変更します。

1
 # hostnamectl set-hostname (任意の名前)

SSH接続設定の変更

SSHのポート番号がデフォルトかつ全開放のため、受け付けるポートを変更します。(変更はお好みで…)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 # cp -a /etc/ssh/sshd_config{,.org}
 # vi /etc/ssh/sshd_config
 # diff /etc/ssh/sshd_config{,.org}
## 以下追記
Port 2222

ListenAddress 0.0.0.0

Protocol 2

LoginGraceTime 2m

MaxAuthTries 6

 # sshd -t
 # systemctl restart sshd
 # systemctl status sshd

アクセス制御

SSHポートの変更とあわせて開放するポートを変更します。あわせて元のSSH許可設定を削除します。firewalld については RedHat の公式ドキュメント を参照して設定を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 # vi /etc/hosts.deny
## 以下追記
ALL: ALL

 # vi /etc/hosts.allow
## 以下追記
ALL: 127.0.0.1
sshd: ALL

 # cp -a /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/my-ssh.xml
 # vi /etc/firewalld/services/my-ssh.xml
## 以下変更
port="22" -> port="2222"

 # firewall-cmd --reload
 # firewall-cmd --zone=public --add-service=my-ssh
 # firewall-cmd --zone=public --add-service=my-ssh --permanent

変更後のポートでSSH接続できることを確認したら、元のSSH許可設定(22番ポート)を削除します。

1
2
3
4
 # firewall-cmd --zone=public --list-service
 # firewall-cmd --zone=public --remove-service=ssh --permanent
 # firewall-cmd --reload
 # firewall-cmd --zone=public --list-service

パッケージアップデート

すべてのパッケージをアップデートします。

1
2
 # yum clean all
 # yum update

ここまで完了したらサーバを再起動します。

ユーザの登録

Mattermostアプリケーションイメージの使い方 を参照しユーザを登録します。

Mattermostの設定変更

Mattermostアプリケーションイメージの使い方 を参照し以下の設定を変更します。

  • 使用する言語
  • サイトURL
  • 通知電子メール
    • 通知を設定する場合は SMTP設定の構成 も参照したほうがいいかも
    • 接続テスト を選択すると管理者のメールアドレス宛にメールが届きます。

HTTPS対応

サブドメインとサーバのグローバルIPアドレスをDNSレコードに登録し、SSL証明書の取得をすすめます。なお、Configuring NGINX with SSL and HTTP/2 にある方法だと、Let’s Encrypt でSSL証明書を取得する際に Nginx を止める必要があるので Webrootプラグイン を使ってSSL証明書を取得するよう設定します。

Let’s Encrypt でテスト用のSSL証明書を取得

Nginx は Mattermost へのリバースプロキシとして動作しているので、サブドメインへのリクエストがすべて Mattermost へ届いてしまいます。Let’s Encrypt の認証サーバから .well-known 配下に生成される一時ファイルへアクセスできるようにするため location 設定を追加します。追加後 certbot コマンドで テスト用のSSL証明書 を取得します。(テスト用のSSL証明書はブラウザでアクセスすると認証エラーが発生します。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 # yum install certbot
 # mkdir -p /var/www/letsencrypt/.well-known
 # cp -a /etc/nginx/conf.d/mattermost.conf{,.org}
 # vi /etc/nginx/conf.d/mattermost.conf
:
server {
listen 80;
## サブドメインを追記
    server_name (サブドメイン) localhost;

## /.well-known へのアクセス設定を追記
    location /.well-known {
    root /var/www/letsencrypt;
}

 # diff /etc/nginx/conf.d/mattermost.conf{,.org}
 # nginx -t
 # systemctl reload nginx
 # systemctl status nginx
 # certbot certonly --staging --webroot --webroot-path=/var/www/letsencrypt -d (サブドメイン)
 # ls -l /etc/letsencrypt/live/(サブドメイン)/

HTTPS設定の追加

テスト用のSSL証明書発行が完了したら HTTPS 設定を追加して Nginx を再起動します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 # openssl dhparam 2048 -out /etc/nginx/conf.d/dhparam.pem
 # vi /etc/nginx/conf.d/mattermost.conf
## 以下編集
server {
    listen 80;
    server_name (サブドメイン) localhost;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name (サブドメイン) localhost;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/(サブドメイン)/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/(サブドメイン)/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
    ssl_dhparam /etc/nginx/conf.d/dhparam.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains";

    location /.well-known {
        root /var/www/letsencrypt;
    }
:
}

 # nginx -t
 # systemctl reload nginx
 # systemctl status nginx

HTTPS ポート開放

ポート開放たまに忘れてしまう(;´Д`)

1
2
 # firewall-cmd --zone=public --add-service=https --permanent
 # firewall-cmd --reload

テスト用のSSL証明書でアクセス確認

https://(サブドメイン) へアクセスできるか確認します。なお、先ほど取得したSSL証明書は仮のものなので認証エラーが発生します。

Let’s Encrypt でSSL証明書を取得

認証エラー以外に問題がなければ正式(?)なSSL証明書を取得し直します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 # certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d (サブドメイン)
:
## テスト用に発行したSSL証明書を上書きします
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

 # nginx -t
 # systemctl reload nginx
 # systemctl status nginx

SSL証明書の更新設定

Let’s Encrypt 認証局が発行するSSL証明書の有効期間は短期間のため、最低でも3ヶ月に1回は更新する必要があります。10日くらいの間隔で有効期限を確認するよう Cron へ以下の設定を追記します。

1
2
3
 # crontab -e
## 以下追記
0 4 10,20,30 * * certbot renew && systemctl reload nginx

SSL証明書でアクセス確認

https://(サブドメイン) へアクセスし先ほど作成したユーザでログインできるか確認します。以下の設定変更も忘れずに!

  • サイトURL
    • http://(サブドメイン) -> https://(サブドメイン)

ログイン後の画面

UI は Slack と似ています。

WebUI
WebUI: Slackに似たUIでいい感じです

ちょっといじった設定

いろいろ設定があるのでいじってみると楽しいかも。いじった設定は以下のとおりです。

  • 投稿
    • リンクのプレビューを有効にする を有効
  • 言語
    • デフォルトのサーバー言語デフォルトのクライアント言語日本語 へ変更
  • ユーザーとチーム
    • チーム作成を有効にする を無効
    • アーカイブチャンネルを閲覧可能にする を有効
  • パスワード
    • 最小パスワード長さ8 へ設定
    • パスワードの要件 にて以下を有効
      • 少なくとも1つの英小文字が必要です
      • 少なくとも1つの英大文字が必要です
      • 少なくとも1つの数字が必要です

まとめ

Mattermost は自分のサーバで Slack のようなチャットツールを使いたいなぁって人に超向いてます!!社内の事情で Slack を導入できない人にもおすすめしたいです。元号がかわってもこのはちゃんへの愛はかわりません!来年もよろしくチューニング!!

おまけ

ConoHa Mobile は進化中!

ConoHa Mobile にコンソール機能がついてた!!すごい!!!(語彙力不足)スマートフォン1つあれば何でもできる時代ですね。

ConoHa Mobile のコンソール
ConoHa Mobile のコンソール: スマートフォンでサーバをさわさわできてしまいます

自分自身におめでとう

XX回目の誕生日プレゼントを買いました。来年も遮二無二進化します。あとマイリトルポニー プリンセスの大冒険のCDを買いました。先日親子連れにまぎれて キネコ国際映画祭 で観たのですが最高でした。大きなスクリーンで観られたことがもう嬉しくてたまらなかった…DVDも購入済みです。Amaz○n待ちです。あとBluetoothの骨伝導イヤンホホを買いました。使うのが楽しみです。

誕生日プレゼント
誕生日プレゼント: シンカリオンカレンダー+MLPのCD+イヤンホホとたっくん
Share on

靴ひも伍長
WRITTEN BY
靴ひも 伍長
Cloud in'腐'rastructure engineer.