lokkaをCloudRunで動かす
概要
https://github.com/lokka/lokka
このブログはVPSで動かしていたんだけど、VPSのメンテができていないので解約することにした。移行先はCloudRunにした。
VPSを解約していく
http://instance-email.com/ というWEBサービスをVPS上で動かしていたんだけど、赤字もいいところなのでいい加減終了することにした。
http://instance-email.com/ のVPSには http://blog.jiikko.com/ も乗っていたのでこっちは移行先を探すことにした。
最近仕事でCloudRunを触ることになりそうなので、キャッチアップがてらにblogをCloudRunに移行することにした。
GCPに引っ越す
- DBは、VPS内にMySQLサーバを立てていたので、それをCloudSQLに移行した。ダンプデータを出し入れして終わり
- lokkaのDockerイメージをビルドしてGCRにpushなどした
- lokkaのリポジトリにはDokerfileが同梱してあったので、動かすためにいくつか修正した
- https://github.com/lokka/lokka/pull/295
- https://github.com/lokka/lokka/pull/296
- AppleシリコンでビルドするとArmイメージになるので、CloudRunでは動かない
docker buildx build --platform linux/amd64 -t gcr.io/jiikko/blog . --push
みたいな感じでGCRにpushする必要がある
- CloudRunからCloudSQLに接続する
- ここがやっぱり地味にめんどくさかった
- CloudRunからCloudSQLに対してpublic ip経由で接続するにはunix socket経由になるってドキュメントに書いている
- lokkaで使っているMySQLクライアントはかなり古くドキュメントというものがない。なのでsocketのパラメータはDATABASE_URLでどう表現するのかわからなくて古のMySQLクライアントのソースを読むことにした
- ホスト名に
localhost
は必須で、socketというパラメータを使う必要があることがわかった - https://github.com/datamapper/do/blob/16564e6dba587e92e41aba376b46ef765f3bffea/do_mysql/ext/do_mysql/do_mysql.c#L254-L259
- ホスト名に
- CloudRunへデプロイする
gcloud run deploy blog --image gcr.io/jiikko/blog --max-instances=1 --region=asia-northeast1 --allow-unauthenticated --set-env-vars RACK_ENV=production --set-env-vars DATABASE_URL="mysql://xxx:xxx@localhost/lokka_production?socket=/cloudsql/jiikko:asia-northeast1:hobby-db"
みたいな感じでOK
- DNSを切り替えて終わり
- CloudRun側でHTTPSのための証明書が作られるまでダウンタイムが若干ある
所感
DBへの接続方法がローカルと本番でパラメータが違うのでネットワーク系でハマりがち。
後回しにしまくっていたVPS解約だけど、移行準備の前に「先に解約手続き」をすることでスムーズに進行した。解約駆動開発。
-
category:
- 日記