LoginSignup
0

MattermostをGCPサーバにデプロイしてみました

Last updated at Posted at 2022-10-03

Overview

Mattermost(コミュニケーションアプリ)をGCEサーバにパッケージを使ってデプロイした手順を書いてみます。
使用するサービスはGCPのみで、パッケージを使って簡単に構築することができるため、初心者向けの内容になっています。

前提として次の作業を終えていること ※以下の手順は省略します

  • GCPプロジェクトを作成済み
  • ドメインホストで独自のドメインを取得済み

Process

  1. MattermostパッケージでGCEインスタンスをデプロイする
  2. 展開されたVMのIPアドレスを固定する
  3. DNSを設定する
  4. サーバのSSL化

Let's try it !

今回は "Mattermost(Google Click to Deploy)" というパッケージを使用しています。
パッケージの主要となるアーキテクチャは以下のようになっています。

  • OS: Debian 10.13
  • VCS: Git 2.20.1
  • APP: Mattermost 6.5.0
  • DB: MySQL-Server 5.7.41
  • Web Server: Nginx 1.14.2

Marketplace

GCPマーケットプレイスでパッケージを検索し、サーバの構成を決めてデプロイする。

  • 今回の構成
    • ゾーン:us-central1-a
    • マシンタイプ:E2,e2-small(2vCPU、2GBメモリ)
    • ディスク:Standard 40GB
    • 月間推定合計額:JPY 2,041/月 ※2022/10/1時点

無料枠で作りたい場合は以下の構成にしてください。

  • 無料の構成
    • ゾーン:バージニア州北部を除く米国リージョン
    • マシンタイプ:e2-micro(2vCPU、1GBメモリ)
    • ディスク:Standard 30GB

構成内容を確認し実行すると、VMインスタンスが展開されます。

VPC network

VMインスタンスへ固定IPを割り当てる。
※これを設定しないとサーバを再起動する度にIPアドレスが変わってしまいます

  • 静的IPアドレスを予約
    • 名前:予約する静的IPのタイトル
    • 接続先:VMインスタンス名を選択

Cloud DNS

VMインスタンスのDNS設定をおこなう

  • ゾーンを作成

    • ゾーン名:ゾーンのタイトル
    • DNS名:独自ドメイン
  • ゾーンを編集

    • NSレコード:ドメインホストの管理画面でここで発行されたNSレコードに変更する
    • Aレコード:VMに割り当てた静的IP

今回の手順では、GoogleのDNSサービスであるCloud DNSを使ってネームサーバの管理元を変更しましたが、特に管理元を変える必要がないのであれば、ホストドメインのAレコードにVMインスタンスのIPアドレスを追加してください。

VMインスタンスに接続

WebサーバをSSL化するために、VMインスタンス(サーバ内)へSSHで接続します。
今回はgcloudを使って接続しました。
因みに最も簡単であり安全な接続方法は、GCPプロジェクトのGCEサービス管理画面から接続したいVMインスタンスの「SSH」をクリックするだけで、ブラウザにCLIが提供されます。

※ [instance_name]を作成したVMインスタンス名に置き換えてください。

gcloud compute ssh [instance_name]

参考:Google Cloud

WebサーバのSSL化(証明書発行)

今回はCertbotという証明書発行ツールをインストールして使用します。

Certbotインストール

sudo apt install certbot

バージョン確認

certbot --version

Webサーバを停止

sudo nginx -s stop

SSL証明書を発行
※ [example.com]をドメイン名に置き換えてください。
※ [e-mail address]をお持ちのメールアドレスに置き換えてください。

sudo certbot certonly --standalone -d [example.com] -m [e-mail address] --agree-tos

Certbotからメールを送ってよいか聞かれる ※どちらでもよい(Yes or No)


Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.


上記の要約は「Certbotを開発する組織から組織の活動に関するニュースを送っても良いか?」といった内容です。

(Y)es/(N)o: Y

WebサーバのSSL化(設定ファイルの追加)

これで証明書の発行ができました。
そして、リクエストは443ポート(HTTPS)で受けて、80ポート(HTTP)へのリクエストは443へリダイレクトするように設定を追加します。

追加設定用ディレクトリのパス

cd /etc/nginx/conf.d

設定ファイル(ssl.conf)を作成

sudo vi ssl.conf

設定ファイル(ssl.conf)の中身
※ [example.com]をドメイン名に置き換えてください(4箇所)

server {
  listen 80;
  server_name localhost;
  return 301 https://[example.com]$request_uri;
}

server {
  listen 443;
  server_name [example.com];

ssl on;
ssl_certificate /etc/letsencrypt/live/[example.com]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[example.com]/privkey.pem;

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;
  }
}

設定ファイルの記述チェック

nginx -t

サーバ再起動

sudo nginx -s reload

リダイレクトチェック

curl -I http://[ドメイン]

(301が返されたらクリア)

Conclusion

以上、GCPでMattermostアプリケーションをデプロイする手順でした。
また、GCPマーケットプライスでパッケージを扱う注意点として、
今回使用したGoogleのパッケージ以外にも、SSL化がより便利になったBitnamiのパッケージも存在しますが、
Bitnami独自のシェルスクリプトや証明書ツールが組み込まれているため、本記事と同様のやり方では注意が必要です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0