Ubuntu18.04でPrismaサーバーを手動でセットアップする方法
警告:このチュートリアルは古く、メンテナンスされていません。 これは、現在活発に開発されていないPrisma1に基づいています。 Prisma の最新バージョンに関するすべてを学ぶには、公式のPrismaドキュメントにアクセスしてください。
Prismaを使用してサーバー側アプリケーションを構築する方法を学びたい場合は、次の新しいチュートリアルに従うことができます。
著者は、 Write for DOnations プログラムの一環として、 Electronic FrontierFoundationを選択して寄付を受け取りました。
序章
Prisma は、アプリケーションの従来のオブジェクトリレーショナルマッピングツール(ORM)に代わるデータレイヤーです。 Prismaは、GraphQLサーバーとREST APIの両方の構築をサポートし、タイプセーフティに重点を置いてデータベースアクセスを簡素化し、宣言型データベース移行を可能にします。 型安全性は、潜在的なコードエラーと不整合を減らすのに役立ちますが、宣言型データベースの移行により、データモデルをバージョン管理に保存できます。 これらの機能は、開発者がデータベースアクセス、移行、およびデータ管理ワークフローの設定に集中する時間を削減するのに役立ちます。
データベースのプロキシとして機能するPrismaサーバーをさまざまな方法で展開し、リモートまたはローカルでホストできます。 Prismaサービスを介して、データにアクセスし、GraphQL APIを使用してデータベースに接続できます。これにより、リアルタイム操作と、データの作成、更新、および削除が可能になります。 GraphQLはAPIのクエリ言語であり、ユーザーがクエリを送信して、サーバーから必要な正確なデータにアクセスできるようにします。 Prismaサーバーは、データベースの最上位にあるスタンドアロンコンポーネントです。
このチュートリアルでは、Ubuntu 18.04にPrismaサーバーを手動でインストールし、 GraphQLPlaygroundでテストGraphQLクエリを実行します。 リモートサーバーでPrismaを実行しながら、Prismaセットアップコードと開発をローカル(実際にアプリケーションをビルドする場所)でホストします。 インストールを手動で実行することにより、セットアップの基盤となるインフラストラクチャをより深く理解し、カスタマイズできるようになります。
このチュートリアルでは、Ubuntu 18.04サーバーにPrismaをデプロイするための手動の手順について説明しますが、Prismaのサイトでこのチュートリアルに従うことで、DockerMachineを使用してより自動化された方法でこれを実行することもできます。
注:このセクションで説明するセットアップには、自動バックアップやアクティブフェイルオーバーなど、本番環境対応サーバーに通常期待される機能は含まれていません。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- 初期サーバーセットアップガイドに従ってセットアップされたUbuntu18.04サーバー(sudo非rootユーザーを含む)。
- サーバーにDockerがインストールされています。 これを実現するには、 Dockerインストール(Ubuntu 18.04チュートリアル)のステップ1に従います。
- DockerComposeがインストールされています。 この手順については、DockerComposeのインストールのステップ1を参照してください。
- サーバーにインストールされているNode.js。 これは、Node.jsのインストールチュートリアルのPPAセクションを実行することで実現できます。
ステップ1—Prismaサーバーを起動する
Prisma CLIは、Prismaサービスの展開と管理に使用される主要なツールです。 サービスを開始するには、必要なインフラストラクチャをセットアップする必要があります。これには、Prismaサーバーとそれに接続するためのデータベースが含まれます。
Docker Composeを使用すると、マルチコンテナーアプリケーションを管理および実行できます。 これを使用して、Prismaサービスに必要なインフラストラクチャをセットアップします。
まず、docker-compose.yml
ファイルを作成して、Prismaサービス構成をサーバーに保存します。 このファイルを使用して、関連するデータベースであるPrismaを自動的に起動し、必要な詳細をすべて1つのステップで構成します。 ファイルがDockerComposeでスピンアップされると、データベースのパスワードが構成されるため、managementAPIsecret
およびMYSQL_ROOT_PASSWORD
のパスワードを安全なものに置き換えてください。 次のコマンドを実行して、docker-compose.yml
ファイルを作成および編集します。
- sudo nano docker-compose.yml
次のコンテンツをファイルに追加して、Prismaセットアップのサービスとボリュームを定義します。
version: "3"
services:
prisma:
image: prismagraphql/prisma:1.20
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
managementApiSecret: my-secret
databases:
default:
connector: mysql
host: mysql
port: 3306
user: root
password: prisma
migrations: true
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: prisma
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
この構成は次のことを行います。
prisma-db
とdb
の2つのサービスを起動します。- Prismaの最新バージョンを取り込みます。 この記事の執筆時点では、それはPrisma1.20です。
- Prismaが使用できるポートを設定し、
databases
セクションでMySQLデータベースに接続するためのすべての資格情報を指定します。
docker-compose.yml
ファイルはmanagementApiSecret
を設定します。これにより、他のユーザーがエンドポイントの知識を持ってデータにアクセスできなくなります。 このチュートリアルをテスト展開以外の目的で使用している場合は、managementAPIsecret
をより安全なものに変更する必要があります。 その際は、後でprisma init
プロセス中に入力できるように、必ず覚えておいてください。
このファイルは、MySQL Dockerイメージも取得し、それらの資格情報も設定します。 このチュートリアルでは、このDocker ComposeファイルでMySQLイメージを起動しますが、PrismaでPostgreSQLを使用することもできます。 両方のDockerイメージはDockerハブで利用できます。
ファイルを保存して終了します。
すべての詳細を保存したので、Dockerコンテナーを起動できます。 -d
コマンドは、コンテナーにデタッチモードで実行するように指示します。つまり、コンテナーはバックグラウンドで実行されます。
- sudo docker-compose up -d
これにより、prisma
とmysql
の両方のDockerイメージがフェッチされます。 次のコマンドを使用して、Dockerコンテナーが実行されていることを確認できます。
- sudo docker ps
次のような出力が表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24f4dd6222b1 prismagraphql/prisma:1.12 "/bin/sh -c /app/sta…" 15 seconds ago Up 1 second 0.0.0.0:4466->4466/tcp root_prisma_1
d8cc3a393a9f mysql:5.7 "docker-entrypoint.s…" 15 seconds ago Up 13 seconds 3306/tcp root_mysql_1
Prismaサーバーとデータベースをセットアップすると、Prismaサービスを展開するためにローカルで作業する準備が整います。
ステップ2—Prismaをローカルにインストールする
Prismaサーバーは、Prismaサービスのランタイム環境を提供します。 Prismaサーバーを起動したので、Prismaサービスをデプロイできます。 これらの手順は、サーバーではなくローカルで実行します。
まず、すべてのPrismaファイルを含む別のフォルダーを作成します。
- mkdir prisma
次に、そのフォルダに移動します。
- cd prisma
MacOSを使用している場合は、HomebrewでPrismaをインストールできます。 これを行うには、次のコマンドを実行してPrismaリポジトリを追加します。
- brew tap prisma/prisma
次に、次のコマンドを使用してPrismaをインストールできます。
- brew install prisma
または、npm
を使用する場合:
- npm install -g prisma
Prismaをローカルにインストールすると、新しいPrismaサービスをブートストラップする準備が整います。
ステップ3—新しいPrismaサービスの構成を作成する
インストール後、prisma init
を使用して、Prismaでアプリケーションをビルドするために必要なファイルを生成する新しいPrismaデータベースAPIのファイル構造を作成できます。 エンドポイントは自動的にprisma.yml
ファイルに含まれ、datamodel.prisma
には、次の手順でクエリできるサンプルデータモデルが既に含まれています。 データモデルは、Prisma APIの基盤として機能し、アプリケーションのモデルを指定します。 この時点では、ファイルとサンプルデータモデルのみを作成しています。 このステップの後半でprisma deploy
を実行するまで、データベースに変更を加えることはありません。
これで、次のコマンドをローカルで実行して、新しいファイル構造を作成できます。
- prisma init hello-world
このコマンドを実行すると、インタラクティブなプロンプトが表示されます。 求められたら、Use other server
を選択し、ENTER
を押します。
Output Set up a new Prisma server or deploy to an existing server?
You can set up Prisma for local development (based on docker-compose)
Use existing database Connect to existing database
Create new database Set up a local database using Docker
Or deploy to an existing Prisma server:
Demo server Hosted demo environment incl. database (requires login)
❯ Use other server Manually provide endpoint of a running Prisma server
次に、Prismaサーバーとして機能しているサーバーのエンドポイントを提供します。 http://SERVER_IP_ADDRESS:4466
のようになります。 エンドポイントがhttp(またはhttps)で始まり、ポート番号が示されていることが重要です。
OutputEnter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466
管理APIシークレットについては、構成ファイルで前に指定したフレーズまたはパスワードを入力します。
OutputEnter the management API secret my-secret
以降のオプションでは、service name
およびservice stage
のENTER
を押して、デフォルトの変数を選択できます。
OutputChoose a name for your service hello-world
Choose a name for your stage dev
Prismaクライアントのプログラミング言語の選択肢も提供されます。 この場合、お好みの言語を選択できます。 クライアントの詳細については、こちらをご覧ください。
Output Select the programming language for the generated Prisma client (Use arrow keys)
❯ Prisma TypeScript Client
Prisma Flow Client
Prisma JavaScript Client
Prisma Go Client
Don't generate
プロンプトを完了すると、選択内容を確認する次の出力が表示されます。
OutputCreated 3 new files:
prisma.yml Prisma service definition
datamodel.prisma GraphQL SDL-based datamodel (foundation for database)
.env Env file including PRISMA_API_MANAGEMENT_SECRET
Next steps:
1. Open folder: cd hello-world
2. Deploy your Prisma service: prisma deploy
3. Read more about deploying services:
http://bit.ly/prisma-deploy-services
hello-world
ディレクトリに移動します。
- cd hello-world
これらの変更をprisma deploy
を使用してサーバーに同期します。 これにより、ローカルマシンからPrismaサーバーに情報が送信され、Prismaサーバー上にPrismaサービスが作成されます。
- prisma deploy
注:prisma deploy
を再度実行すると、Prismaサービスが更新されます。
出力は次のようになります。
OutputCreating stage dev for service hello-world ✔
Deploying service `hello-world` to stage 'dev' to server 'default' 468ms
Changes:
User (Type)
+ Created type `User`
+ Created field `id` of type `GraphQLID!`
+ Created field `name` of type `String!`
+ Created field `updatedAt` of type `DateTime!`
+ Created field `createdAt` of type `DateTime!`
Applying changes 716ms
Your Prisma GraphQL database endpoint is live:
HTTP: http://SERVER_IP_ADDRESS:4466/hello-world/dev
WS: ws://SERVER_IP_ADDRESS:4466/hello-world/dev
出力は、Prismaが type User
のデータモデル(prisma init
ステップで作成)に従ってデータベースを更新したことを示しています。 タイプはデータモデルの重要な部分です。 これらはアプリケーションのアイテムを表し、各タイプには複数のフィールドが含まれています。 データモデルの場合、ユーザーを説明する関連フィールドは、ユーザーのID、名前、作成された時刻、および更新された時刻です。
この段階で問題が発生し、別の出力が得られる場合は、対話型プロンプトですべてのフィールドを正しく入力したことを再確認してください。 prisma.yml
ファイルの内容を確認することでこれを行うことができます。
Prismaサービスを実行すると、2つの異なるエンドポイントに接続できます。
-
Prismaサービスを管理および展開できる
http://SERVER_IP_ADDRESS:4466/management
で利用可能な管理インターフェイス。 -
Prismaサービス用のGraphQLAPI。
http://SERVER_IP_ADDRESS:4466/hello-world/dev
で入手できます。
Prismaサーバーのセットアップとデプロイが正常に完了しました。 これで、GraphQLでクエリとミューテーションを調べることができます。
ステップ4—サンプルクエリの実行
Prismaの別のユースケースを調べるために、サーバー上のオープンソースのGraphQL統合開発環境(IDE)であるGraphQLプレイグラウンドツールを試すことができます。 アクセスするには、前の手順でブラウザのエンドポイントにアクセスします。
http://SERVER_IP_ADDRESS:4466/hello-world/dev
mutation は、GraphQLを介してバックエンドのデータを変更(作成、更新、または削除(CRUD))する方法を説明するGraphQL用語です。 ミューテーションを送信して、新しいユーザーを作成し、機能を調べることができます。 これを行うには、ページの左側で次のミューテーションを実行します。
mutation {
createUser(data: { name: "Alice" }) {
id
name
}
}
再生ボタンを押すと、ページの右側に結果が表示されます。
その後、データベースのID
列を使用してユーザーを検索する場合は、次のクエリを実行できます。
query {
user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
id
name
}
}
これで、Prismaサーバーとサービスがサーバー上で稼働し、GraphQLのIDEでテストクエリを実行しました。
結論
サーバー上に機能しているPrismaセットアップがあります。 Prismaのその他の使用例と次の手順については、入門ガイドを参照するか、 PrismaDocsでPrismaの機能セットを確認してください。 このチュートリアルのすべての手順を完了すると、データベースへの接続を確認するためのいくつかのオプションがあります。1つの可能性は、 PrismaClientを使用することです。
警告:このチュートリアルは古く、メンテナンスされていません。 これは、現在活発に開発されていないPrisma1に基づいています。 Prisma の最新バージョンに関するすべてを学ぶには、公式のPrismaドキュメントにアクセスしてください。
Prismaを使用してサーバー側アプリケーションを構築する方法を学びたい場合は、次の新しいチュートリアルに従うことができます。