Renderへのデプロイ
このガイドでは、Prisma ORMとPostgreSQLを使用するNode.jsサーバーをRenderにデプロイする方法について説明します。
Prisma Renderデプロイの例には、RESTエンドポイントとシンプルなフロントエンドを備えたExpress.jsアプリケーションが含まれています。このアプリはPrisma Clientを使用して、データベースからレコードをフェッチ、作成、および削除します。
Renderについて
Renderは、開発者がフルスタックアプリケーションを簡単にデプロイおよびスケーリングできるクラウドアプリケーションプラットフォームです。この例では、次のことを知っておくと役立ちます。
- Renderを使用すると、長時間実行される「サーバーフル」のフルスタックアプリケーションをデプロイできます。Renderサービスを構成して、CPUやメモリの使用量に基づいて自動スケーリングできます。これは、選択できるいくつかのデプロイパラダイムの1つです。
- Renderは、Node.jsやBunなどの一般的なランタイムをネイティブにサポートしています。このガイドでは、Node.jsランタイムを使用します。
- Renderは、コミット時の自動デプロイのためにGitリポジトリと統合されています。GitHub、GitLab、またはBitbucketからRenderにデプロイできます。このガイドでは、Gitリポジトリからデプロイします。
前提条件
- Renderアカウントにサインアップする
サンプルコードを入手する
サンプルコードをローカルマシンにダウンロードします。
curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/deployment-platforms/render
cd render
例を理解する
アプリをデプロイする前に、サンプルコードを見てみましょう。
Webアプリケーション
Expressアプリのロジックは2つのファイルにあります
src/index.js
:API。エンドポイントはPrisma Clientを使用して、データベースからデータをフェッチ、作成、および削除します。public/index.html
:Webフロントエンド。フロントエンドは、APIエンドポイントの一部を呼び出します。
Prismaスキーマと移行
このアプリのPrismaコンポーネントは、2つのファイルにあります
prisma/schema.prisma
:このアプリのデータモデル。この例では、User
とPost
の2つのモデルを定義しています。このファイルの形式は、Prismaスキーマに従います。prisma/migrations/<migration name>/migration.sql
:PostgreSQLデータベースでこのスキーマを構築するSQLコマンド。このような移行ファイルは、prisma migrate dev
を実行して自動生成できます。
Render Blueprint
render.yaml
ファイルは、Renderブループリントです。ブループリントは、RenderのInfrastructure as Code形式です。ブループリントを使用して、Renderでサービスをプログラムで作成および変更できます。
render.yaml
は、ブループリントによってRenderで起動されるサービスを定義します。このrender.yaml
では、次のことがわかります。
- Nodeランタイムを使用するWebサービス:これはExpressアプリです。
- PostgreSQLデータベース:これは、Expressアプリが使用するデータベースです。
このファイルの形式は、ブループリント仕様に従います。
RenderデプロイがPrisma Migrateで動作する仕組み
一般に、すべてのデータベース移行をWebアプリの起動前に実行する必要があります。そうしないと、アプリが予期されるテーブルと行を持たないデータベースにクエリを実行するときにエラーが発生する可能性があります。
Renderデプロイのデプロイ前コマンド設定を使用して、アプリが起動される前にデータベース移行などのコマンドを実行できます。
デプロイ前コマンドの詳細については、Renderのデプロイガイドを参照してください。
サンプルコードでは、render.yaml
にWebサービスのビルドコマンド、デプロイ前コマンド、および開始コマンドが示されています。特に、npx prisma migrate deploy
(デプロイ前コマンド)は、npm run start
(開始コマンド)の前に実行されます。
コマンド | 値 |
---|---|
ビルドコマンド | npm install --production=false |
デプロイ前コマンド | npx prisma migrate deploy |
開始コマンド | npm run start |
例をデプロイする
1. Gitリポジトリを初期化する
- サンプルコードをローカルマシンにダウンロードします。
- GitHub、GitLab、またはBitBucketに新しいGitリポジトリを作成します。
- サンプルコードを新しいリポジトリにアップロードします。
2. 手動でデプロイする
- Renderダッシュボードで、新規 > PostgreSQLをクリックします。データベース名を指定し、プランを選択します。(無料プランはこのデモで動作します。)
- データベースの準備ができたら、内部URLを調べます。
- Renderダッシュボードで、新規 > Webサービスをクリックし、サンプルコードを含むGitリポジトリを接続します。
- サービス作成中に次の値を指定します
設定 | 値 |
---|---|
言語 | Node |
ビルドコマンド | npm install --production=false |
デプロイ前コマンド(注:これは「詳細設定」タブにある場合があります) | npx prisma migrate deploy |
開始コマンド | npm run start |
環境変数 | DATABASE_URL をデータベースの内部URLに設定します |
以上です。ビルドが完了するとすぐに、Webサービスはonrender.com
URLでライブになります。
3. (オプション)Infrastructure as Codeでデプロイする
Render Blueprintを使用して例をデプロイすることもできます。Renderの[ブループリントセットアップガイド]に従い、例のrender.yaml
を使用します。
ボーナス:データベースをシードする
Prisma ORMには、スターターデータでデータベースをシードするためのフレームワークが含まれています。例では、prisma/seed.js
はいくつかのテストユーザーと投稿を定義しています。
これらのユーザーをデータベースに追加するには、次のいずれかの方法を使用できます。
- シードスクリプトをデプロイ前コマンドに追加するか、
- SSHシェルを介してサーバーでコマンドを手動で実行します
方法1:デプロイ前コマンド
Renderサービスを手動でデプロイした場合
- Renderダッシュボードで、Webサービスに移動します。
- 設定を選択します。
- デプロイ前コマンドを次のように設定します:
npx prisma migrate deploy; npx prisma db seed
Blueprintを使用してRenderサービスをデプロイした場合
render.yaml
ファイルで、preDeployCommand
を次のように変更します:npx prisma migrate deploy; npx prisma db seed
- 変更をGitリポジトリにコミットします。
方法2:SSH
Renderでは、WebサービスにSSHで接続できます。
- RenderのSSHガイドに従って、サーバーに接続します。
- シェルで、次を実行します:
npx prisma db seed