Google Cloud Platform IT

【GCP】Compute Engineで簡単にWebサーバを立てる

2020年11月24日

Webサーバ立てたことないけど、立ててみたい
自分の検証用サイトを簡単にGCPで立ち上げてみたい
そんな自分一人でWebサーバを立てた気になりたい方のために、ここでは簡単にWebサーバを立てる方法についてまとめたいと思います!

注意!!! GCPは重量課金で、このCompute Engine(以下GCE)も、アクセスがなくても起動しているだけで課金されます。 そのため検証用でお金をかけたくない方はこの記事は読まない方がいいかと思います。 (一番安いやつでも4000円ほどは最低掛かってしまうので、それが嫌だ!という方はページ離脱してください)

Compute Engineは、どんなサーバも立てることができる

Webサーバを作成するには、さまざまな情報や知識が必要になります。
エンジニアを目指す人とかであれば、一度Webサーバの設定から公開までを体験しておくことはいいかもしれません。

Compute Engineとは

Compute EngineはGCP内のリソースです。

そのため、サーバを立てるだけでグローバルIPアドレスが発行されます。
その時点でその立てたまだ何もないサーバへはアクセス自体は可能になります。(住所が公開されてるので)

サーバへのアクセスができている時点で、あとはWebサーバとなるための機能をつけるだけで簡単にWebサーバを立ち上げることができます。

 

Compute Engineでサーバを立てる

詳細は以下で説明してます。
今回は簡単に作りたいので、
CentOS7でスタンダードで作成してみます。
 

Webサーバとなるため、Apacheを入れる

現時点でGCEを立てましたが、あくまで何もないPCみたいなものです。
なのでリクエストをしたところで何かレスポンスがあるわけではありません。なのでサーバでもないです。
サーバになるには、PCにそれぞれにあったサーバソフトウェアを入れる必要があります。

 

今回はWebサーバにしたいので、
Webサーバになるには、PCにWebサーバソフトウェアであるApacheやEginxを入れます。
今回はApacheに絞って説明します。

 

Webサーバを立てる

Compute Engineで

sudo yum install httpd // apacheのインストール

sudo setenforce 0 // SELinixの解除
sudo systemctl start httpd // apacheの起動
sudo systemctl status httpd // apacheが起動しているかの確認

Compute EngineでHTTPやHTTPSリクエストできるように、以下ファイアウォールでリクエスト許可する設定をしないとアクセスできないので注意。

yum install httpd // apacheをインストール(Webサーバソフトウェア)
setenforce 0 (CentOSはSELinuxがデフォルトで走るので解除)
sudo service httped restart
これでWebサーバが起動します。
これで発行されたグローバルIPアドレスにアクセスすると以下のように、apacheが起動しているのが確認できます。

Document Root設定

そしてWebサーバといえばあく
今回は簡単に作るので、ひとまず以下のデフォルトのdocument rootで設定します。
デフォルトでdocument rootは

 

indexが出ないようにする。
/etc/httpd/conf/httpd.conf

SSL通信設定

Let's Encryptをインストールする
無料SSL

Webサーバのドメイン設定

お名前.comなどでドメインを作成して、
そのドメインでグローバルIPアドレスでアクセスできるようにする
Googleドメインでの設定方法

ここでのWebサーバドメイン設定でのポイントとしては以下3つになります。

  • 【GCP側】WebサーバのグローバルIPアドレスの静的化
  • 【GCP側】Cloud DNSでグローバルIPアドレスとドメインの対応関係設定
  • 【お名前.com側】DNSレコードにグローバルIPアドレスとドメインの対応関係設定

 

【GCP側】WebサーバのグローバルIPアドレスの静的化

グローバルIPアドレスは発行されますが、実はこれはApacheの再起動をしたり、Webサーバを再起動したりすると、
毎回グローバルIPアドレスは変わってしまいます。

そのため、このグローバルIPアドレスを静的なIPアドレス、つまり固定IPアドレスにするように設定する必要があります。
これをエフェメラル化と言います。

 

なぜこうする必要があるか?
このあと行う、ドメインとIPアドレスの対応関係の設定をする際に、ドメインは変わらずでもIPアドレスが毎回変わると、
対応関係が崩れて、アクセスできなくなります。
そのため、固定にする必要があります。

以下のようにinstance-4というインスタンスをCompute Engineで立てました。

そして、以下のネットワーキング>IPアドレスの管理画面に入り、赤枠「」をクリックします。

そして、以下項目を入力します。
リージョンはもちろん設定したいサーバがあるリージョンを選択する。そうしないと下の赤枠の箇所の設定したいインスタンスが表示されません。
外部の静的なIPアドレスを設定したいサーバのインスタンスを選択して、予約するをクリックします。

これで以下のように設定が完了しました。

 

Compute Engineの画面でも、通常インスタンスが停止している場合は外部IPアドレスはインスタンスに割り当てられないが、以下のように外部IPアドレスが割り当てられているのが確認できる。

これで、apacheの再起動やインスタンスの再起動をしても外部IPアドレスの変更がされなくなります。
これで例えばアクセスIP制限であったりなどの対策を講じたりすることができるようになりますね。IPアドレスが変わらないので。

 
※ 静的IPアドレスにすると、料金がかかることに注意。

いろいろ料金

【GCP側】Cloud DNSでグローバルIPアドレスとドメインの対応関係設定

これによってDNSサーバにドメインとIPアドレスが紐付き登録される。
よって、ユーザーがドメインへアクセスしたら、まずDNSサーバに問い合わせが行き、IPアドレスに変換され、
そのIPアドレスのWebサーバへアクセスするようになります。

 

【お名前.com側】DNSレコードにグローバルIPアドレスとドメインの対応関係設定

なんでお名前.comなんだよ!Googleドメインで購入して設定しろよって思うかもしれないですがほんとそうですね。。
Googleドメインでまだ購入したことなかったので、後でそれについてもまとめます。

 

Basic認証をつけて、アクセスを制限する

基本的には
① .htaccessファイルと、.htpasswdファイルをbasic認証させたいファイルがあるディレクトリに作成する。← これなぜかできなかった。
① sudo vi /etc/httpd/conf/httpd.confで以下を記載。AuthUserfileがいわゆる.htpasswdファイルの置く場所。ここに記載したものがそのサイトのbasic認証になる。
(いや、apacheインストールすることによって、以下のconfigファイルが作成されるので、以下を記載する。
/etc/httpd/conf/httpd.conf

# ここにbasic認証設定

AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Auth"
AuthType Basic
Require valid-user

そしてAuthUserFileに指定した箇所に、
隠しファイル.htpasswdを作成して、以下を記載する。
basic認証するのに必要なidとpasswordを以下のURLで記載して、暗号化されたテキストを.htpasswdに貼り付け保存します。
https://www.luft.co.jp/cgi/htpasswd.php

② そして、上記のように記載して保存したら、上記のディレクトリでsudo vi .htpasswdを作成
③ 以下のルールで作成。Basic認証に使うユーザー、パスワードは、
「ユーザー: パスワードをMD5で変換した暗号」で記載する。以下のような感じで。これでOK
以下のURLにて変換を行うことができるので、そこで
https://www.luft.co.jp/cgi/htpasswd.php

 

GCPのリソースであるネットワークタグを用いて、IPアドレス制限をかける

こちらは、以下で扱っているので以下のものを参照してください。
【GCP】ネットワークタグを用いてWebサーバにアクセス制限をつける

 

ロードバランサー

ロードバランサーを使うのであれば、スナップショットやイメージを作成して
上で立てたwebサーバを

-Google Cloud Platform, IT
-

© 2024 Yosshi Labo. Powered by AFFINGER5