Compute EngineとCloud SQLでWebアプリを動かしてみた

記事タイトルとURLをコピーする

はじめまして!5月にG-genにジョインした片岩です。
まだGoogle Cloud(旧称GCP)をあまり触ったことがない方も多いと思います。Compute EngineとCloud SQLを利用したWebアプリを動かしてみたので、今回はその手順についてご紹介します。WebアプリにはMattermostというチャットアプリを利用しました。

構成イメージ

今回の構成は以下のとおりです。

全体の流れ

全体のざっくりした流れは以下になります。

  1. Cloud SQLインスタンスを作成します。(PostgreSQLを利用)
  2. Cloud SQLインスタンス上にデータベースを作成します。
  3. VMインスタンスを作成します。
  4. VMインスタンスにPostgreSQLクライアントをインストールします。
  5. VMインスタンスにMattermostサーバーをインストールします。
  6. Webアプリ(Mattermost)が起動していることを確認します。

重要なポイント

重要なポイントは以下の2点です。

  • Cloud SQLのプライベートIPを有効にする
  • VMインスタンスにファイアウォールルールを適用する

Cloud SQLのプライベートIPを有効にすることでVMインスタンスからCloud SQLへの通信を可能にしています。また、外部からVMインスタンスへの通信を許可するために、VMインスタンスにファイアウォールルールを適用しています。

それでは実際の手順を見ていきましょう。

構築手順

Cloud SQL

まずコンソールからCloud SQLインスタンスを作成します。

その際、ネットワーキングの設定でプライベートIPを有効にします。パブリックIPは無効で構いません。

Cloud SQLインスタンスができたらデータベースを作成します。データベース名をmattermostとします。

Compute Engine

今回のアプリではTCP8065ポートを利用します。
外部からTCP8065ポートにアクセスできるよう、ファイアウォールルールを作成します。

ファイアウォールルールのタグを付与したVMインスタンスを作成します。

VMインスタンスにPostgreSQLクライアントをインストールします。 VMインスタンスにSSHで接続し、以下のコマンドを実行します。

sudo apt-get update
sudo apt-get install postgresql-client

wgetコマンドを有効にします。

sudo apt install wget

Mattermostをインストールします。詳細はインストールガイドをご参照ください。

sudo apt install wget
wget https://releases.mattermost.com/6.7.0/mattermost-6.7.0-linux-amd64.tar.gz
tar -xvzf mattermost*.gz
sudo mv mattermost /opt
sudo mkdir /opt/mattermost/data
sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost

管理者権限で/opt/mattermost/config/config.jsonファイルを開き、MattermostサーバーからCloud SQLへ接続するように以下の設定を変更します。
<パスワード>にはご自身のPostgreSQLのパスワードを、<IPアドレス>にはCloud SQLインスタンスのプライベートIPアドレスをご利用ください。

key value
"DriverName" "postgres"
"DataSource" "postgres://postgres:<パスワード>@<IPアドレス>/mattermost?

Cloud SQLへの疎通を確認します。

cd /opt/mattermost
sudo -u mattermost bin/mattermost

Server is listening on :8065 と出力されれば問題なく起動しています。Crlt + C で停止させます。
次にデーモンがサービスを起動するように設定変更作業を進めます。

sudo touch /lib/systemd/system/mattermost.service

作成した/lib/systemd/system/mattermost.serviceを開いて以下の内容をペーストします。

[Unit]
Description=Mattermost
After=network.target
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target

ファイルを保存したら以下のコマンドを実行します。

sudo systemctl daemon-reload
sudo systemctl status mattermost.service
sudo systemctl start mattermost.service
curl http://localhost:8065

HTMLが返却されれば問題ありません。

動作確認

別のPCからブラウザを起動し、http://IPアドレス:8065にアクセスします。
Mattermostの画面が表示されました。
問題なく動作しているようですね。

片岩 裕貴 (記事一覧)

クラウドソリューション部

2022年5月にG-gen にジョイン。
前職までは企画から運用まで幅広くソフトウェア開発に従事。お客様が車輪の再開発を避けられるように、Google Cloudのノウハウを習得中。毎日の日課は三人乗りの電動自転車で子供を幼稚園に送り迎えすること。