はじめに
こんにちは、XIMIXの湯口です。
本記事はNI+C TeamGCP Advent Calendar 2023の3日目の記事となります。
今回は、社内アプリを検証する際にToolJetをGoogle CloudのCloud Run上に構築する機会がありましたので、構築方法を紹介します。
構築までの簡単な流れを説明すると、以下の流れになります。
- Cloud SQLインスタンスを構築
- ToolJetコンテナをGoogle Cloudにアップロード
- Cloud RunにToolJetをデプロイ
それではご覧ください。
ToolJetとは
ToolJetは、ノーコードでWebアプリを開発できるプラットフォームです。HTML、CSS、JavaScriptなどの知識やスキルがなくても、ドラッグ&ドロップでWebアプリを作成することができます。
ToolJetの特徴は、以下のとおりです。
- ノーコードでWebアプリを開発できる
- ドラッグ&ドロップでWebアプリを作成できる
- 豊富なテンプレートやコンポーネントが用意されている
- オープンソースで利用できる
事前準備
今回ToolJetを構築するに当たり利用するGoogle Cloudのサービスは以下になります。
- Cloud SQL
- Cloud Run
- Containar Registry(Artifact Registry)
上記サービスについては有料サービスとなりますので、課金が有効となっているGoogle Cloudプロジェクトをご準備ください。
また、一部の手順においてコマンドを利用する場面がありますので、Cloud Shellをご利用ください。
Cloud SQLインスタンス構築
ここではToolJetで利用するDBを準備するために、Google CloudのDBサービスであるCloud SQLのインスタンスを構築する方法を解説しています。
Google Cloud コンソールのナビゲーションメニューから「SQL」を選択します。
Cloud SQL APIを有効化されていない方は有効化ボタンが表示されていると思いますので、有効化してください。
「インスタンスを作成」ボタンからインスタンス作成に移ります。
データベースについては「PostgreSQL」を選択してください。
インスタンス構築に必要な情報を入力します。
インスタンスのIDやデフォルト管理ユーザーのパスワードは後続の手順にて必要になりますので忘れないようにしてください。
インスタンスのスペックについてはご自身の環境に合わせて設定ください。今回は最小スペックにて構築します。
情報入力後、画面下部の「インスタンスを作成」ボタンを押下してください。
押下すると3~5分ほどでSQLインスタンスが構築されます。
SQLインスタンス構築後、画面左のタブから、「データベース」を選択します。
「データベースの作成」を押下して、「tooljet」というデータベースを作成します。
作成完了後、データベースリストに「tooljet」が表示されていることを確認してください。
以上でCloud SQLの構築は完了になります。
ToolJetコンテナをGoogle Cloudにアップロード
ここではToolJet公式から配布されているToolJetコンテナイメージをGoogle Cloud のコンテナイメージ管理サービスのContainer Registryにアップロードする方法を解説しています。
※この手順についてはToolJet公式ドキュメントに基づいて実施しております。Container Registryは現在非推奨サービスで、今後廃止予定の為、後日現在推奨されているArtifact Registryにアップロードする方法を追記いたします。
手順を実施する前にGoogle Cloud コンソール「APIとサービス」にてContainer Registry APIが有効化されていることを確認してください。有効化されていない場合は有効化を実施してください。
Google CloudコンソールからCloud Shell を開きます。
Cloud Shellを開くとコンソール画面が表示されますので、下記のコマンドを実行してください。
$ gcloud auth configure-docker
$ docker pull tooljet/tooljet-ce
$ docker tag tooljet/tooljet-ce gcr.io/"プロジェクトID"/tooljet/tooljet-ce
$ docker push gcr.io/”プロジェクトID”/tooljet/tooljet-ce
コマンド実行後、Google Cloud コンソールのナビゲーションメニューから「Container Registry」を選択します。
Container Registryのコンテナイメージ一覧にtooljetコンテナが存在することを確認してください。
以上でコンテナをGoogle Cloudにアップロードする操作は完了です。
ToolJetをCloud Runにデプロイ
ここではToolJetをGoogle CloudのCloud Runにデプロイする方法を解説します。
手順を解説する前にToolJetをデプロイする際のポイントを紹介します。
ToolJetをCloud Runで動作させる際に3つのステップがあります。
- サンプルコンテナをデプロイし、Cloud Run上で実行するコンテナへアクセスするためのURLを取得する。
- ToolJetコンテナからDB migrationを実行し、DB上にテーブルを作成する。
- ToolJetコンテナから、ToolJetを実行させる。
手順を実施する前にGoogle Cloud コンソール「APIとサービス」にてCloud Run APIが有効化されていることを確認してください。有効化されていない場合は有効化を実施してください。
Google Cloud コンソールのナビゲーションメニューから「Cloud Run」を選択します。
「サービスを作成」を選択します。
まずはサンプルコンテナを実行し、URLを取得するためにサンプルコンテナでテストを選択します。
その後サービス名、リージョンを選択します。
CPUの割当、自動スケーリング、Ingressの制御、認証も同様に設定していきます。
設定完了後、「作成」ボタンを押下します。
作成が完了するとCloud Runにデプロイされ画面にアクセス用URLが表示されます。
こちらで最初のステップは完了となります。
次にToolJetコンテナからDBの設定を行っていきます。
デプロイしたCloud Runの画面から「新しいリビジョンの編集とデプロイ」を選択します。
コンテナの編集のコンテナイメージのURLを先程Container RegistryにアップロードしたToolJetのイメージに変更します。コンテナポートについても3000番を指定します。
次に設定を修正します。
コンテナコマンドにnpm run db:migrate:prodを入力します。こちらは画像のように区切って入力してください。
リソースについてもメモリ:1GB、CPU:1に設定します。
また環境変数も追加していきます。環境変数は画像のように設定してください。
その他にもSSOやメールを設定する際にも環境変数を設定する必要がありますので詳しくは公式ドキュメントを参照してください。
また、今回は値を見れるよう環境変数に設定しましたが、データベースの情報等が含まれているため、Secret Managerを利用してセキュアに管理することをおすすめします。
環境変数に設定する値ついてユーザーによって値が変動する項目と設定方法は下記となります。
- PG_HOST
- /cloudsql/"Cloud SQL接続名"を設定
- TOOLJET_HOST
- 前ステップで表示されたCloud RunのURLを設定
- LOCKBOX_MASTER_KEY
- Shellでopenssl rand -hex 32を実行した結果を設定
- SECRET_KEY_BASE
- Shellでopenssl rand -hex 64を実行した結果を設定
最後にCloud SQLを接続します。
Cloud SQL接続からToolJetで利用するDBを選択します。
以上で設定は完了の為、「デプロイ」ボタンを押下します。
しばらくすると画像のようなエラーが発生します。
Cloud Loggingを確認していただけるとCloud SQLからログが出力されていれば問題ございません。
さあ、最後のステップです。
Cloud LoggingにCloud SQLからログが出力されていることを確認後、再度Cloud Runの「新しいリビジョンの編集とデプロイ」を押下します。
設定タブのコンテナコマンドをnpm run start:prodに書き換えます。
そして再度「デプロイ」ボタンを押下します。
デプロイ完了すると画像のように正常にデプロイできていることが確認できます。
正常にデプロイできたら、Cloud RunのURLにアクセスしてみましょう。
画像のような画面が出力されるとデプロイ完了です!!
お疲れ様でした。
おわりに
今回はCloud Runを使ってToolJetをデプロイしてみました。
私は公式ドキュメントを見つつデプロイしましたが、ドキュメントとは異なる点があったかと思います。
そこが私が躓いたポイントになりますので皆様に共有できればと思い本ブログを執筆いたしました。
皆様の参考になれば幸いです。
- カテゴリ:
- Google Cloud