Webサーバ立てたことないけど、立ててみたい
自分の検証用サイトを簡単にGCPで立ち上げてみたい
そんな自分一人でWebサーバを立てた気になりたい方のために、ここでは簡単にWebサーバを立てる方法についてまとめたいと思います!
注意!!! GCPは重量課金で、このCompute Engine(以下GCE)も、アクセスがなくても起動しているだけで課金されます。 そのため検証用でお金をかけたくない方はこの記事は読まない方がいいかと思います。 (一番安いやつでも4000円ほどは最低掛かってしまうので、それが嫌だ!という方はページ離脱してください)
Compute Engineは、どんなサーバも立てることができる
Webサーバを作成するには、さまざまな情報や知識が必要になります。
エンジニアを目指す人とかであれば、一度Webサーバの設定から公開までを体験しておくことはいいかもしれません。
Contents
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アドレスが変わらないので。
【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サーバを