Google Cloud Run と Google Cloud SQL を使って Fathom をデプロイしてみた
読了まで:約4分
と
話の前提
この
と
それで
- SQLite
- MySQL
- PostgreSQL
の
MySQL とか
PostgreSQL を VPS などで サーバを 立てるのは したくないで ござる 〜
と
Google Cloud Platform の
Cloud Run (Beta) + Cloud SQL で アプリを 立てる
と
Cloud Run と Cloud SQL を使ってみる
まず
docker
を使える 様に する gcloud
を使える 様に する docker
からGoogle Container Registry に push 出来る 様に する - Cloud SQL で
PostgreSQL の インスタンスを 立てる
なdocker
とgcloud
の
ただし注意点とus-central1
に
またenv.example
env
Dockerfile
FROM usefathom/fathom:latest
ADD .env /app/.env
EXPOSE 8080
CMD [ "/app/fathom", "server" ]
env.example
GCP_PROJECT_ID=XXXX-XXXX-00000
GCP_CLOUDSQL_INSTANCE=XXXX-XXXX-XXXX
CLOUD_SQL_CREDENTIAL=/path/to/credential.json
CLOUD_SQL_INSTANCES=XXXX-XXXX-00000:us-central1:XXXX-XXXX-XXXX
CLOUD_SQL_PASSWORD=this_is_your_postres_password
FATHOM_ACCOUNT_EMAIL[email protected]
FATHOM_ACCOUNT_PASSWORD=this_is_your_fathom_login_password
FATHOM_SECRET=this_is_secret_value_for_fathom_login_session
FATHOM_GZIP="true"
Makefile
.PHONY: init deploy
init:
@$(MAKE) $(shell cat env | tr "\n" " ") _init
_init:
docker network create cloudsql
docker pull usefathom/fathom:latest
docker pull gcr.io/cloudsql-docker/gce-proxy:1.12
docker run --rm --net cloudsql \
--name cloudsql -d -v $(CLOUD_SQL_CREDENTIAL):/config \
gcr.io/cloudsql-docker/gce-proxy:1.12 /cloud_sql_proxy -instances=$(CLOUD_SQL_INSTANCES)=tcp:0.0.0.0:5432 -credential_file=/config
docker run --rm --net cloudsql \
-e FATHOM_DATABASE_DRIVER=postgres \
-e FATHOM_DATABASE_USER=postgres \
-e FATHOM_DATABASE_NAME=fathom \
-e FATHOM_DATABASE_PASSWORD=$(CLOUD_SQL_PASSWORD) \
-e FATHOM_DATABASE_HOST=cloudsql \
-e FATHOM_DATABASE_SSLMODE=disable \
usefathom/fathom:latest /app/fathom user add --email="$(FATHOM_ACCOUNT_EMAIL)" --password="$(FATHOM_ACCOUNT_PASSWORD)"
docker stop cloudsql
docker network rm cloudsql
deploy:
@$(MAKE) $(shell cat env | tr "\n" " ") _deploy
_deploy:
echo "FATHOM_DATABASE_DRIVER=postgres" >.env
echo "FATHOM_DATABASE_USER=postgres" >>.env
echo "FATHOM_DATABASE_NAME=fathom" >>.env
echo "FATHOM_DATABASE_PASSWORD=$(CLOUD_SQL_PASSWORD)" >>.env
echo "FATHOM_DATABASE_HOST=/cloudsql/$(CLOUD_SQL_INSTANCES)" >>.env
echo "FATHOM_DATABASE_SSLMODE=disable" >>.env
echo "FATHOM_GZIP=true" >>.env
echo "FATHOM_SECRET=$(shell uuidgen | sha512sum | base64 | head -n 1)" >>.env
docker build -t gcr.io/$(GCP_PROJECT_ID)/app-fathom:latest .
docker push gcr.io/$(GCP_PROJECT_ID)/app-fathom:latest
gcloud beta run deploy fathom --image gcr.io/$(GCP_PROJECT_ID)/app-fathom:latest --concurrency=80 --memory=128Mi --timeout=10 --region=us-central1 --add-cloudsql-instances $(GCP_CLOUDSQL_INSTANCE)
解説
それで、Dockerfile
+ env
+ Makefile
がMakefile
内の
fathom
でのユーザーアカウントの 作成と アプリケーションの デプロイを 分ける - Cloud Run の
deploy には gcloud beta run deploy
を使う --add-cloudsql-instances
でCloud Run に Cloud SQL の インスタンスを 関連付ける
と
それでcloud_sql_proxy
を
また
- Cloud SQL の
Console で パスワードの 設定と データベースの 作成を 行う make init
でCloud SQL の データベースの 中見を 初期化 make deploy
で実際の アプリケーションを deploy
と
実際に作業してみた感想
まぁ
- Cloud SQL の
インスタンスの 構築に 10 分ぐらい 待ちが 発生した - Cloud SQL を
Private IP で 構築して Cloud Run と 接続出来なかった - Cloud Run への
Domain 割り当てで Certificate Provisioning に 15 分ぐらい 掛かった
と
あと
あと、
あっ……
ワイの Web サイト、 めっちゃアクセス数少ない やん……
と
以上
まぁ Google Cloud Platform の
運用が
面倒なのを まるっと クラウドに 投げたいで ござる 〜
と