Renderにデプロイ
このガイドでは、Prisma ORMとPostgreSQLを使用するNode.jsサーバーをRenderにデプロイする方法を説明します。
Prisma Renderデプロイメントの例には、RESTエンドポイントとシンプルなフロントエンドを持つExpress.jsアプリケーションが含まれています。このアプリはPrisma Clientを使用して、データベースからレコードのフェッチ、作成、削除を行います。
Renderについて
Renderは、開発者がフルスタックアプリケーションを簡単にデプロイし、スケーリングできるクラウドアプリケーションプラットフォームです。この例では、以下を知っておくと役立ちます。
- Renderを使用すると、長時間稼働する「サーバーフル」なフルスタックアプリケーションをデプロイできます。Renderサービスを自動スケーリングするように設定できます。これは、選択できるいくつかのデプロイメントパラダイムの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アプリが使用するデータベースです。
このファイルの形式はBlueprint仕様に従います。
RenderのデプロイとPrisma Migrateの連携方法
一般的に、Webアプリが起動する前にすべてのデータベースマイグレーションを実行することをお勧めします。そうしないと、アプリが予期されたテーブルや行がないデータベースをクエリしたときにエラーが発生する可能性があります。
RenderデプロイのPre-Deploy Command設定を使用すると、アプリが起動する前にデータベースマイグレーションなどの任意のコマンドを実行できます。
Pre-Deploy Commandの詳細については、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 |
事前デプロイコマンド(注: 「Advanced」タブにある場合があります) | npx prisma migrate deploy |
起動コマンド | npm run start |
環境変数 | DATABASE_URL をデータベースの内部URLに設定します |
これで完了です。ビルドが完了するとすぐに、Webサービスはonrender.com
のURLで稼働します。
3. (オプション) Infrastructure as Codeでデプロイ
Render Blueprintを使用してサンプルをデプロイすることもできます。Renderの[Blueprintセットアップガイド]に従い、サンプル内の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
を実行します。