背景 🔗
このブログを始めたきっかけは、GoogleCloud さんが weekly で主催する社内勉強会にて、登壇した内容がその年の聴講者数首位だったらしく $300 分のクレジットをいただいたので、せっかくならブログでも運用してみるか、というところからになります。
$300 もあるし、せっかくなら独自ドメインがいいなー、ということで、最初の構成としては一番お手軽に「GCS にファイルを置き、GCLB で HTTPS を終端させつつ、CloudCDN でキャッシュ」としていました(証明書にも managed cert が使えて手間がないため)。
ところがこのクレジット、有効期限が12ヶ月でありそろそろ期限が切れそう。今の構成だと月に $15 程度かかるので地味にダメージがあります…。
ということで、運用構成の見直しを図りたいと思います。
方針 🔗
以下の要件を満たすように、方針を考える。
- ランニングコストは限りなく ¥0/月 に近づける。
- ドメインは独自のものを利用する。
色々調べた中だと
Firebase Hosting
が良さそうでした。
Spark プランだと無料で使えます。
※ セルフホストする方向性でも検討してみてはいました。
- GCE の無料枠内で配信する形にする。
- GCLB が使えないので、TLS 終端も自前で設定する。
- nginx を使う(rate limit とかもできるし)。
- Managed Certificate が使えないので、Let’s Encrypt。
- Certbot で更新処理も自動化する。
- GCLB が使えないので、TLS 終端も自前で設定する。
ただ、この方針だとコンテンツの更新方法を工夫する必要があり、
- GCS Fuse で GCE に GCS バケットを仮想的にマウントする。
- FTPS サーバを立ててローカルから送る。
- SSH サーバーを立てて scp で送る。
- コンテナに抱き込む。
- github/GCS にアップロードし、cron job で定期的に更新チェックさせる。
など、どれもちょっとめんどくさそう…
せっかく static site generate で静的コンテンツとして生成しているのに、web サーバーが必要になってしまうのもイマイチ…
マネージドバンザイ、ということで firebase にしました。
設定からデプロイまで 🔗
まずは project を作成します。
もともと使っていた GCP プロジェクトに関連づけると、GCP プロジェクトで課金が有効になっているため Spark プランが使えないよ、と言われてしまったので、新規の firebase project として作成しました。
次に ドキュメントに従って 、Firebase CLI を入れます。
firebase init でプロジェクトを初期化します。
? What do you want to use as your public directory? public
? Configure as a single-page app (rewrite all urls to /index.html)? No
? Set up automatic builds and deploys with GitHub? No
? File public/404.html already exists. Overwrite? No
i Skipping write of public/404.html
? File public/index.html already exists. Overwrite? No
i Skipping write of public/index.html
i Writing configuration info to firebase.json...
i Writing project information to .firebaserc...
✔ Firebase initialization complete!
もともと hugo で public を生成しているので、それをそのまま使ってもらう形になります。
エミュレータを使って動作確認します。
firebase emulators:start --project <myproject>
問題ければデプロイ。
firebase deploy --only hosting --project <myproject>
あとは独自ドメインの追加ですが、コンソールから使いたいドメインを設定して、 DNSチャレンジ で所有権を証明するだけでした。
これで完了、楽すぎる…