メインコンテンツにスキップ

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:このアプリのデータモデル。この例では、UserPostの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リポジトリを初期化する

  1. サンプルコードをローカルマシンにダウンロードします。
  2. GitHub、GitLab、またはBitBucketに新しいGitリポジトリを作成します。
  3. サンプルコードを新しいリポジトリにアップロードします。

2. 手動でデプロイする

  1. Renderダッシュボードで、新規 > PostgreSQLをクリックします。データベース名を指定し、プランを選択します。(無料プランはこのデモで動作します。)
  2. データベースの準備ができたら、内部URLを調べます。
  3. Renderダッシュボードで、新規 > Webサービスをクリックし、サンプルコードを含むGitリポジトリを接続します。
  4. サービス作成中に次の値を指定します
設定
言語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はいくつかのテストユーザーと投稿を定義しています。

これらのユーザーをデータベースに追加するには、次のいずれかの方法を使用できます。

  1. シードスクリプトをデプロイ前コマンドに追加するか、
  2. SSHシェルを介してサーバーでコマンドを手動で実行します

方法1:デプロイ前コマンド

Renderサービスを手動でデプロイした場合

  1. Renderダッシュボードで、Webサービスに移動します。
  2. 設定を選択します。
  3. デプロイ前コマンドを次のように設定します:npx prisma migrate deploy; npx prisma db seed

Blueprintを使用してRenderサービスをデプロイした場合

  1. render.yamlファイルで、preDeployCommandを次のように変更します:npx prisma migrate deploy; npx prisma db seed
  2. 変更をGitリポジトリにコミットします。

方法2:SSH

Renderでは、WebサービスにSSHで接続できます。

  1. RenderのSSHガイドに従って、サーバーに接続します。
  2. シェルで、次を実行します:npx prisma db seed