GCPで無料枠のサーバを立るときに、初見でハマりそうなところ

  • 48
    Like
  • 1
    Comment

このスライドについて

  • PHPBTL #7で発表するやつ
  • GCP の無料枠で遊ぶときに、やったほうがいいこととかを挙げる

やったこと

お金をかけずに以下のことができるようにしてみました。

  • GCP のサーバインスタンスを立てた
  • ドメイン取った
  • HTTPS 対応した

概要

私が気づいた「気をつけたほうがいいこと」は、大まかにこんなかんじ。


最初に支払いのログの設定をする

意図しない課金が発生するかもしれないので、そのときに原因がわかるようにします。

@hnw さんの 『GCPの課金データ取得のススメ』に従って、支払い料金の明細ログを残すようにします。


GCS のバケット名に注意

ユーザー ID、メールアドレス、プロジェクト名、プロジェクト番号、個人を特定可能な情報(PII)をバケット名やオブジェクト名に使用しないでください。

保存先の GCS のバケット名の付け方に気をつけてください。『バケットとオブジェクトの命名ガイドライン』Google Cloud Storage のベスト プラクティスを参考にしましょう。


バケット名に注意

私は、以下のコードで生成しました。

バケット名を適当に作る
<?php
echo hash('sha256', microtime(true));
 // b1a4bde7cb21813360e98e16277d66934cb2c6d1c69e15a2b7485db84da8691f みたいなやつ

インスタンス立てる前に、SSHで使うユーザ名と認証鍵の登録をする

Google Cloud Console のSSHクライアントだと、遅かったりして使い勝手びみょいので、普通にSSHできるようにしたほうがいいです。


ユーザ名と鍵の登録は、「Compute Engine」 の 「メタデータ」

初見だとわかりにくいです。

鍵の登録1.png

鍵の登録2.png


ed25519 がカジュアルにつかえる

私はとりあえず ed25519 の鍵を使っています。

新し目のアルゴリズムの鍵がカジュアルに使えるのがとても便利。


f1-micro のインスタンスを立てる


リージョンは us- のやつ選ぶ

リージョン選ぶ.png

us-** なインスタンスを選ぶ。他のは無料インスタンスの対象外。

たぶん、西海岸のほうが早いので、私は西海岸のインスタンスにしました。
速度計測とかしてないけど、ストレスになるほど遅くはありません。


インスタンスサイズを忘れずに micro にする

インスタンスのサイズを選ぶ.png

デフォルトだと、 vCPU x1 になっています。 micro にすると、無料になるっていうメッセージが出てきます。


ハードディスクのサイズを 30GB にする

OSと、ハードディスクのサイズを調整.png

デフォルトだと、 10GB になっています。。30GBまで無料なので、30GBにしておきましょう。


80 と 443 を開けておく

HTTPとHTTPSは使う.png

Let's Encrypt の certbot を使いたいので、事前に開けておきます。


IPアドレスを固定しておく

サーバインスタンスが動いていれば、固定のIPアドレスにしても無料なので、使いましょう。

IPアドレス固定.png


使っていない固定のIPアドレスは、お金かかる

「ネットワークの外部IPアドレス」を確認して、あったら早めに開放しましょう。

未割り当てのIPアドレス.png


SSHのポート番号をかえる

22番ポート以外でつなげるようにし、「22番を閉じるルールを上書きする」ルールを適用します。

理由は、『22番ポートにブルートフォース攻撃されて、数円課金される可能性を潰す』ため。セキュリティ的な面でも、ポート番号変えておいたほうが良さそうです。

以下の手順でやります。

  1. 適当なポート番号で、FW開ける
  2. サーバに、1.の設定を適用するタグをつける
  3. sshd の設定をして、プロセスを再起動
  4. 22番を閉じるルールを作る
  5. サーバに、3. の設定を適用するタグをつける

適当なポートをひとつ開ける

ポートをひとつ開ける.png
ルールの名前は、デフォルトのルールにならって、 allow-XXXX (XXXXはポート番号)にすると良いです。

ターゲットタグは、デフォルトのルールにならって、 allowXXXX-server (XXXXはポート番号)にすると良いです。

この「ポートを開けるルール」を適用したサーバは、この設定をした時点では存在しないので、タグを付けなければいけません。


サーバに「ポートを開ける」タグを付ける

「ポートを開けるルール」で指定した "ターゲットタグ" を追加。

タグ追加1.png


sshd_config のポート番号の設定をかえる

sudo vi /etc/ssh/sshd_config で、SSH のポート番号を変更して、 systemctl restart sshd する

/etc/ssh/sshd_config
@@ -14,7 +14,7 @@
 # SELinux about this change.
 # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
 #
-#Port 22
+Port XXXX (XXXX は さっき開けたポート番号)
 #AddressFamily any
 #ListenAddress 0.0.0.0
 #ListenAddress ::

これをやるまでは、普通に22 番ポートで作業してください。sshd が使うポート番号の設定をしていないのだから、当然22番ポートで待機しています。

systemctl restart sshd したら、新しく設定したポート番号で待機するようになります。
sshd_config の編集をしたターミナルは閉じずにそのまま で、新しく設定したポートでログインできるかを、新規に繋いで確認してください。確認できたら、閉じていいです。

確認できたら、次に進んでください。


22 を閉じるルールを追加

22を閉じる.png

ポートを開けるときと同じようにやります。
ルールの名前は、allow のルールと対になるように、 disallow-22にすると良いです。

ターゲットタグは、私は disallow22-server にしています。


「22 を閉じる」ルールを、サーバにタグ付け

ポート開けたときと同様に、ポートを閉じるタグを追加する。

タグ追加2.png

22番でアクセスできないことを確認してください。


ドメイン取って証明書発行する


DDNS(ダイナミックDNS) では証明書取れない

自宅サーバでは、 ndxbn.dip.jp っていう DDNS (ダイナミックDNS)を使っているのですが、 dip.jp で証明書が取れません。
DDNS は 「dip.jp にサブドメインを割り当てて、正引きできるようにする」のを自動化したサービスだからです。

HTTPSを使いたい場合は、証明書の発行をするのにドメインを取らざるを得ません。


無料ドメインを取る

freenom.com というサービスがあって、無料でドメインがとれます。

ndxbn.tk をとりました。 tokyo の略っぽく見えるので。


安いドメインを取る(おまけ)

10年契約でも、1万円を切るドメインがあります。やすい。最安値は、たぶん、 .vip の 6,990円/10年 。

freenpm.com の無料ドメインが1年分までしか取れない&更新が無料かわからない(調べてない)
ので、安めのドメインを長期で買ってしまってもいいかも


じつは

無料のドメインを取る前に、 ndxbn.tokyo を10年契約でとってしまいまいた。

ndxbn.tokyo とったあとで、 「そいうえば無料ドメインあるんじゃね?」と思って、ggったらあった、という感じです。(悲しみ)


Let's Encrypt で証明書を発行

certbot で発行します。お手軽。

公式ドキュメントを見てやります。オプションの説明とかがややこしいです。

以下のようにやっておけば大丈夫です。

sudo yum install epel-release
sudo yum install certbot
certbot certonly --webroot -d XXXX.tk #XXXX.tk は、取ったドメイン

その他 注意事項


PHPのビルドとかはしない

性能ないので、PHPのビルドとかは厳しいです。

phpenv で 7.1.4 をビルドしたら、62分かかりました。

/* ここにビルドした時の画像を貼る */


その他参考になる資料


エンタープライズ企業のベスト プラクティス

エンタープライズ企業のベスト プラクティス

エンタープライズ企業が Google Cloud Platform を最大限活用するための、重要な概念とベスト プラクティスについて学んでみましょう

個人で使うにも参考になりそう(?)な情報があったりなかったり。


一から学べる Google Cloud Networking リファレンス ガイド

一から学べる Google Cloud Networking リファレンス ガイド

そして、Google Cloud Networking について知りたい人のためにリンク集を作りました。それがこの投稿です。