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

Koyebへのデプロイ

このガイドでは、PostgreSQLとともにPrisma ORMを使用するNode.jsサーバーをKoyebにセットアップしてデプロイします。このアプリケーションはREST APIを公開し、Prisma Clientを使用してデータベースからのレコードのフェッチ、作成、削除を処理します。

Koyebは、グローバルにアプリケーションをデプロイするための開発者フレンドリーなサーバーレスプラットフォームです。このプラットフォームを使用すると、Dockerコンテナ、Webアプリケーション、およびAPIを、gitベースのデプロイ、TLS暗号化、ネイティブオートスケーリング、グローバルエッジネットワーク、および組み込みのサービスメッシュとディスカバリーを使用してシームレスに実行できます。

Koyebのgit駆動型デプロイメントメソッドを使用すると、コードの変更をGitHubリポジトリにプッシュするたびに、Koyebサーバーレスプラットフォームでアプリケーションの新しいビルドとデプロイが自動的にトリガーされます。このガイドでは、後者のアプローチを使用し、GitHub上のアプリのリポジトリにコードをプッシュします。

このアプリケーションには、次のコンポーネントがあります。

  • バックエンド:PostgreSQLデータベース(Herokuでホストされているなど)に対してデータベース操作を処理するためにPrisma Clientを使用するリソースエンドポイントを備えたExpress.jsで構築されたNode.js REST API。
  • フロントエンド:APIと対話するための静的なHTMLページ。

architecture diagram

このガイドの焦点は、Prisma ORMを使用するプロジェクトをKoyebにデプロイする方法を示すことです。出発点は、Prisma Koyebの例です。これには、いくつかの事前構成されたRESTエンドポイントとシンプルなフロントエンドを備えたExpress.jsサーバーが含まれています。

注: ガイド全体にわたるさまざまなチェックポイントを使用すると、手順を正しく実行したかどうかを検証できます。

前提条件

  • ホストされたPostgreSQLデータベースと、それにアクセスできるURL(例:postgresql://username:password@your_postgres_db.cloud.com/db_identifier)。(Supabaseを使用できます。Supabaseは無料プランを提供しています)。
  • GitHubアカウントと、コードをプッシュするために使用する空の公開リポジトリ。
  • Koyebアカウント。
  • Node.jsがインストールされていること。

Prisma ORMワークフロー

Prisma ORMの中核となるのは、Prismaスキーマです。これは、データモデルとその他のPrisma ORM関連の構成を定義する宣言的な構成です。Prismaスキーマは、Prisma ClientとPrisma Migrateの両方にとっての単一の信頼できる情報源でもあります。

このガイドでは、Prisma Migrateを使用してデータベーススキーマを作成し、データベーススキーマを作成します。Prisma MigrateはPrismaスキーマに基づいており、データベースに対して実行される.sqlマイグレーションファイルを生成することで機能します。

Migrateには、2つの主要なワークフローが付属しています。

  • prisma migrate devを使用してローカル開発中にマイグレーションを作成して適用する
  • prisma migrate deployを使用して生成されたマイグレーションを本番環境に適用する

簡潔にするために、このガイドでは、prisma migrate devでマイグレーションがどのように作成されるかについては説明しません。むしろ、本番環境のワークフローに焦点を当て、例のコードに含まれているPrismaスキーマとSQLマイグレーションを使用します。

Koyebのビルドステップを使用して、アプリケーションが開始される前にマイグレーションが適用されるように、prisma migrate deployコマンドを実行します。

Prisma Migrateでマイグレーションがどのように作成されるかの詳細については、ゼロからの開始ガイドを確認してください。

1. 例をダウンロードして依存関係をインストールする

ターミナルを開き、任意の場所に移動します。アプリケーションコードを保持するディレクトリを作成し、例のコードをダウンロードします。

mkdir prisma-on-koyeb
cd prisma-on-koyeb
curl https://github.com/koyeb/example-prisma/tarball/main/latest | tar xz --strip=1

チェックポイント: treeコマンドを実行すると、次のディレクトリとファイルが表示されるはずです。

.
├── README.md
├── package.json
├── prisma
│   ├── migrations
│   │   ├── 20210310152103_init
│   │   │   └── migration.sql
│   │   └── migration_lock.toml
│   └── schema.prisma
├── public
│   └── index.html
└── src
└── index.js

5 directories, 8 files

依存関係をインストールします。

npm install

2. Gitリポジトリを初期化し、アプリケーションコードをGitHubにプッシュする

前の手順で、コードをダウンロードしました。この手順では、コードからリポジトリを作成して、デプロイのためにGitHubリポジトリにプッシュできるようにします。

これを行うには、ソースコードフォルダからgit initを実行します。

git init
> Initialized empty Git repository in /Users/edouardb/prisma-on-koyeb/.git/

リポジトリを初期化したら、ファイルを追加してコミットします。

git add .
git commit -m 'Initial commit'

チェックポイント: git log -1はコミットを表示するはずです。

git log -1
commit 895534590fdd260acee6396e2e1c0438d1be7fed (HEAD -> main)

次に、リモートを追加してコードをGitHubリポジトリにプッシュします。

git remote add origin git@github.com:<YOUR_GITHUB_USERNAME>/<YOUR_GITHUB_REPOSITORY_NAME>.git
git push -u origin main

3. Koyebにアプリケーションをデプロイする

Koyebコントロールパネルで、アプリの作成ボタンをクリックします。

Koyebアプリの作成ページに移動します。ここでは、使用するデプロイ方法、リポジトリURL、デプロイするブランチ、実行するビルドコマンドと実行コマンドなど、デプロイするアプリケーションに関する情報を求められます。

デプロイ方法としてGitHubを選択し、アプリケーションを含むGitHubリポジトリを選択して、デプロイするブランチをmainに設定します。

注: Koyebを初めて使用する場合は、GitHubアカウントにKoyebアプリをインストールするように求められます。

環境変数セクションで、タイプがシークレットの新しい環境変数DATABASE_URLを作成します。値フィールドで、シークレットの作成をクリックし、シークレットにprisma-pg-urlという名前を付けて、PostgreSQLデータベース接続文字列をシークレット値として設定します。これは、postgresql://__USER__:__PASSWORD__@__HOST__/__DATABASE__のようになります。Koyebシークレットを使用すると、APIトークンやデータベース接続文字列などの機密情報を安全に保存および取得できます。ハードコードされた認証情報を削除してコードを保護し、環境変数をアプリケーションに安全に渡すことができます。

最後に、アプリケーションに名前を付けて、アプリの作成ボタンをクリックします。

チェックポイント: デプロイされたアプリのスクリーンショットをクリックして、デプロイされたアプリを開きます。ページが読み込まれたら、APIステータスの確認ボタンをクリックします。これにより、{"up":true}が返されるはずです。

deployed-screenshot

おめでとうございます!Koyebにアプリを正常にデプロイしました。

Koyebはアプリケーションをビルドしてデプロイします。GitHubリポジトリへの追加のコミットは、Koyebでの新しいビルドとデプロイをトリガーします。

チェックポイント: ビルドとデプロイが完了したら、Koyebコントロールパネルでkoyeb.appで終わるアプリURLをクリックしてアプリケーションにアクセスできます。アプリページが読み込まれたら、ページが読み込まれたら、APIステータスの確認ボタンをクリックします。これにより、{"up":true}が返されるはずです。

4. デプロイされたアプリケーションをテストする

静的なフロントエンドを使用して、プレビューURL経由でデプロイしたAPIと対話できます。

ブラウザでプレビューURLを開きます。URLはhttps://APP_NAME-ORG_NAME.koyeb.appのようになります。次のものが表示されるはずです。

deployed-screenshot

ボタンを使用すると、REST APIにリクエストを送信して、応答を表示できます。

  • APIステータスの確認{"up":true}を返すREST APIステータスエンドポイントを呼び出します。
  • データをシード:テストuserpostでデータベースをシードします。作成されたユーザーを返します。
  • フィードをロード:データベース内のすべてのusersを関連するprofilesとともにロードします。

Prisma ClientのAPIの詳細については、src/index.jsファイルのルートハンドラーを参照してください。

Koyebコントロールパネルからアプリサービスのランタイムログタブをクリックして、アプリケーションのログを表示できます。

node-72d14691	stdout	> prisma-koyeb@1.0.0 start
node-72d14691 stdout > node src/index.js
node-72d14691 stdout 🚀 Server ready at: https://#:8080
node-72d14691 stdout ⭐️ See sample requests: http://pris.ly/e/ts/rest-express#3-using-the-rest-api

Koyeb固有の注意点

ビルド

デフォルトでは、Node.jsランタイムを使用するアプリケーションの場合、package.jsonbuildスクリプトが含まれている場合、Koyebは依存関係のインストール後に自動的に実行します。例では、buildスクリプトはprisma generate && prisma migrate deploy && next buildを実行するために使用されます。

デプロイメント

デフォルトでは、Node.jsランタイムを使用するアプリケーションの場合、package.jsonstartスクリプトが含まれている場合、Koyebはアプリケーションを起動するために自動的に実行します。例では、startスクリプトはnode src/index.jsを実行するために使用されます。

データベースのマイグレーションとデプロイメント

デプロイした例では、マイグレーションはKoyebビルド中にprisma migrate deployコマンドを使用して適用されます(package.jsonbuildスクリプトで定義されているとおり)。

追加の注意点

このガイドでは、リージョン、インスタンスサイズ、および水平スケーリングのプリセット値を維持しました。ニーズに応じてカスタマイズできます。

注: [ポート]セクションは、アプリケーションがリッスンしているポートをKoyebに知らせ、受信HTTPリクエストを適切にルーティングするために使用されます。デフォルトのPORT環境変数は8080に設定され、新しいアプリケーションを作成すると、受信HTTPリクエストは/パスにルーティングされます。アプリケーションが別のポートでリッスンしている場合は、受信HTTPリクエストをルーティングする別のポートを定義できます。

まとめ

おめでとうございます!Node.jsアプリとPrisma ORMをKoyebに正常にデプロイしました。

例のソースコードは、このGitHubリポジトリにあります。

Prisma ClientのAPIの詳細については、src/index.jsファイルのルートハンドラーを参照してください。