SOULs API のデプロイ
SOULs では GraphQL API/Worker を GitHub Actions を使って Google Cloud Run へデプロイする CI / CD サイクルを構築することができます。 強力な自動テストと自動デプロイを体感しましょう。
動作確認
クイックスタート を終了し、アプリが動いていることを確認してください。 このチュートリアルではクイックスタートで作成したアプリを使って開発を進めていきます。
$ cd souls-app
GitHub リポジトリを作成・PUSH
GitHub に新しいリポジトリを作成しましょう。
新しいリポジトリを上記のサイトで作成後、 以下のコマンドでソースコードをアップロードします。
マザーディレクトリから実行します。
$ git add .
$ git commit -m 'first commit'
$ git remote add origin git@github.com:YOURREPO/YOURAPP.git
$ git push origin main
Google Cloud のプロジェクトを作成する
これまで Google Cloud を使ったことがない方はこちらのリンクを参考にプロジェクトを作成しましょう。
Google Cloud IAM の 権限の準備
souls
コマンドで Google Cloud に必要なシークレットキー、SOULS_GCP_SA_KEY
を取得します。
また、デプロイに必要な権限を付与します。
そして自動的に Github シークレットの 環境変数 SOULS_GCP_SA_KEY
にシークレットキーが登録されます。
SOULs Gcloud コマンドの実行
$ souls gcloud iam setup_key
CLoud SQL Instance の作成
souls gcloud
コマンドでは
$ souls gcloud ${service_name} ${method_name} --option ...
のように ${method_name}
のあとに --option
を渡して、
gcloud
コマンドを実行することができます。
以下のコマンドでヘルプを表示することができます。
$ souls gcloud help
それでは Google Cloud SQL のインスタンスを作成してみます。
$ souls gcloud sql create_instance
.env の自動生成
先程の souls gcloud sql create_instance
コマンドによって作成された
Google Cloud SQL のインスタンス情報などが
API ディレクトリ
apps/api/.env
マザーディレクトリ
.env.production
に出力され自動で GitHub Secret へ登録されます。
すべての環境変数が登録されると次の画像のようになります。
Cloud SQL へ IP の追加
souls gcloud sql
コマンドを使って、
現在のグローバル IP から Google Cloud SQL へアクセスできるように設定します。
$ souls gcloud sql assign_ip
データベースの Migration
API ディレクトリで、
souls
コマンドを使って本番データベースを作成、Migration します。
$ cd apps/api
$ souls db create --e=production
$ souls db migrate --e=production
デプロイ
デプロイの前に、テストでもう一度アプリが正しく動作していることを確認しましょう。
$ souls test
すべての examples が緑色で 0 failures であることを確認します。ここで、テストが失敗すると、デプロイ途中で同じく失敗するので、テストがクリアなことを確認しましょう。
それでは マザーディレクトリにある、github
ディレクトリの名前を変更してデプロイしましょう。
ここから先のステップでデプロイが成功すると Google Cloud のクレジットが使用開始されますが、
以下のリンクから $200 分の無料クレジットを獲得することができます。
※ デプロイをしなくてもこのチュートリアルを続けることはできます。Model を作成するへスキップしてください。
マザーディレクトリへ戻ります。
$ cd ...
github
ディレクトリの名前を変更して、GitHub Actions
を Push 時に反映させます。
$ mv github .github
$ git add .
$ git commit -m 'first deploy'
$ git push origin main
GitHub ワークフローの確認
以下のコマンドで、稼働中の GitHub Workflow のログを表示することができます。
$ souls gh watch
更新・デバック
souls
コマンドを使って更新・デバックをしてみましょう。
コンソールに入って Model のデータを確認します。
$ souls c
SOULs
フレームワークは irb コンソールを標準で使用しています。
irb について初めての方はこちらのリンクを参考にしてください。
irb(main):001:0> User.all
D, [2021-07-14T11:40:11.797378 #11805] DEBUG -- : User Load (3.0ms) SELECT "users".* FROM "users" ORDER BY "users"."created_at" DESC
=>
[#<User:0x000055c1cf1da538
id: 20,
uid: "RgGrTeEkX8j0V",
username: "岡田 律華",
screen_name: "jere_farrell",
last_name: "おかだ",
first_name: "りか",
last_name_kanji: "岡田",,
本番環境では、RACK_ENV
を production
に設定しましょう。
本番環境のデータベースをコンソールから直接デバッグできることはとても強力です。
取り扱いには十分に注意しましょう。
$ souls c --e=production
Gemfile
のアップデートを souls
コマンドを使ってやってみます。
$ souls upgrade gemfile
このコマンドは現在 Gemfile
に定義されているバージョンと最新のバージョンに差異がないかを確認し、最新バージョンがある場合は gem
のアップデート、さらに Gemfile
を最新のバージョンに上書きをします。