個人開発でWebサービスを運営しています。
長らく月額500円のレンタルサーバーでなんとかやっていましたが、下記の理由でサーバーを移行することを考えました。
・ミドルウェアなど自由にインストールできない
・スケールアップできない
・アクセスログがリアルタイムで見れない
・TLS1.0/1.1の廃止スケジュールなどレンタルサーバー側で決められる
・DKIMを設定してメールの到達率を上げたい
AWSも触ってみましたが、業務でBigQueryに慣れ親しんでいたので、Google Cloud Platformを使うことにしました。
普段はWebアプリケーションの開発がメインなので、インフラは軽く触る程度ですが勉強がてら構築してみます。
構成
ロードバランサ (Cloud Load Balancing) 1台
本番Web・DBサーバー (Compute Engine、CentOS) 1台
メンテ用Webサーバー (Compute Engine、CentOS) 1台
ロードバランサの後ろに本番Web・DBサーバーと、メンテ用Webサーバーのインスタンスをおきます。
ロードバランサを使う理由
あまり大きくないサイトでもロードバランサを使う理由を書きます。
グローバルIP1つで運用できる
レンタルサーバーから移行するときのDNS設定は、AレコードをロードバランサのIPに変更するだけ済みます。
直IPなどの不正なリクエストを除外したい
サーバーを公開すれば、直IPなどで不正なリクエストが来るようになります。.gitディレクトリへのアクセス、脆弱性ファイルのスキャンなど、そのようなアクセスは本番Webサーバーにリクエストが来ないようにします。
Webサーバーの複数台構成などスケールできる
DBはCloud SQLなどを使って独立させて、本番Webサーバーを複数台構成にするなどスケールアップが可能です。
ロードバランサにSSL証明書を設定できる
ロードバランサがSSL終端となり、ロードバランサから後ろのWebサーバーはHTTPのアクセスとなります。WebサーバーでSSLを復号化するより負荷は少ないかと思っています。また、Webサーバーを複数台にしたときに証明書をロードバランサに集中することができます。
ロードバランサの振り分けのみでメンテ中にできる
例えば本番Webサーバーのインスタンスを停止させて性能を上げたいときに、ロードバランサの振り分けをメンテ用サーバーに向ければ簡単にメンテ中にできます。
メールサーバー
Compute Engineのインスタンスから直接メールの送信はできないので、WebAPIで使える外部のサービスを使うことにしました。
運用について
SSL証明書の更新
SSL証明書はLet's Encryptを使っています。Webサーバーでcertbot certonlyコマンドで作成したものを、ロードバランサの設定画面に貼り付けます。3ヶ月に一度やる必要があるのでちょっと面倒です。
スナップショット
定期的にインスタンスのスナップショットを取ります。スナップショットはインスタンスの稼働中でも可能です。もしもの時にスナップショットから新しくインスタンスを作成することができます。
パッケージの自動更新
Compute EngineのCentOSのインスタンスはyum-cronによるパッケージの自動更新がデフォルトで有効化されています。なので、インストール済みのパッケージのセキュリティパッチなど自動でマイナーバージョンアップされます。
例えば、phpのパッケージの更新履歴を見てみると、直近では「5.4.16-46.1.el7_7.x86_64」に自動更新されたことがわかります。
$ sudo yum history package-list php
Loaded plugins: fastestmirror
ID | Action(s) | Package
-------------------------------------------------------------------------------
142 | Updated | php-5.4.16-46.el7.x86_64
142 | Update | 5.4.16-46.1.el7_7.x86_64
57 | Updated | php-5.4.16-45.el7.x86_64
57 | Update | 5.4.16-46.el7.x86_64
10 | Install | php-5.4.16-45.el7.x86_64
history package-list
まとめ
全部お守りしてくれるレンタルサーバーと違って、費用もやることも増えましたが開発の自由度が上がって提供できるサービスレベルも格段に上がりました。
色々と触ってみながら、徐々に最適な運用方法を見つけていきたいと思っています。