blogをhttpsにするといって幾星霜
— jigyakkuma (@jigyakkuma_) March 4, 2018
ということで重い腰を上げて取り掛かることにしました。
腰が重かった理由がいくつかありまして、
- ブログはHUGOで generate してるので静的コンテンツが配信できればいい
- GCS が https 化してくれるのを待っていた
- 静的コンテンツの配信に GAE はなーという想い
などがあって目をそむけ続けてましたが、https に切り替えないとダメだーというギリギリのタイミングでやるとろくなことがない気がしたのでやることにしました。
今回はGAE で SSL をマネージドしてくれるようになったのでそれを使うことにします。
移行前の準備
まずは GAE で動いているものがないので移行して動くことを確認できる環境を作ります。
GAE/Go にするので、goappを使ってローカル環境で動作確認が行えるようCloud SDK for Goを入れておきます。
ちなみに、デプロイ自体は最終的に CI で行うので goapp を使うのは最初の動作確認くらいです。
動作確認には
goaap serve
でローカルでサーバが立ち上がるので localhost:8080 でブラウザから確認できます。ひとつ注意点としては hugo 自体は build されないので、記事を書いてコンテンツの内容を確認するのであれば
hugo server -w
を使うのがよいです。goapp はあくまでも GAE として動作するかの確認に使います。
移行作業
GAE への移行作業自体はこちらのブログでわかりやすく解説されているので参考にしました。
GAE はプロジェクトの作成時しかリージョンを選択できないので注意が必要でした。参考のブログのように command で作成しておくのが無難です。
https の適用とリダイレクトは app.yaml の
secure: always
ですが、SSL 証明書の適用は GCP のコンソールより GAE →設定を開いて
カスタムドメインの追加をしておく必要があります。
ここで困ったこととしては、GAE でドメインの確認がとれないと SSL 証明書が発行されなかったので、ブログが https で動く状態にして先にデプロイしておき、DNS を GAE の endpoint に設定するという少々強引な手順ですすめました。
DNS 切り替えから SSL 証明書の適用まで数分かかったので、一個人のブログくらいなら多少のダウンタイムがあっても支障はないですが、他にいいやり方(というかそもそも私が間違ったやり方の可能性もあります)があればご教示いただけると幸いです。
デプロイ
デプロイは今までどおり CircleCIで行うのですが、ローカルでデプロイできるのを確認してから CircleCI の config.yml を書くことにします。
ということでCloud SDKを入れて、以下の command で対象プロジェクトを設定しておきます。
gcloud config set project [GCP project ID]
その後はデプロイは該当プロジェクトのディレクトリに移動して
gcloud app deploy
を叩くだけでデプロイできます。
デプロイできるのを確認できたら、ブログの repository においてある.circleci/config.yml を差し替えます。 ひとつポイントをあげるとすると、GAE はバージョンを指定しないとバージョンごとにインスタンスを作ってくれるのですが、ブログの運用くらいだとオーバースペックなので(前バージョンに戻す必要はないので)デプロイ時にオプションでバージョン固定にしています。
最後に
ここまでくれば作業は完了です。
あとは今まで同様、markdown で記事を書いて commit すればブログが更新されます。めでたしめでたし。