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を実行します。