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

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: このアプリのデータモデルです。この例では、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アプリが使用するデータベースです。

このファイルの形式は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リポジトリを初期化する

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

2. 手動でデプロイ

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

これらのユーザーをデータベースに追加するには、次のいずれかの方法があります。

  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を実行します。
© . All rights reserved.