如何在Ubuntu18.04上手动设置Prisma服务器
警告: 本教程已过时,不再维护。 它基于不再积极开发的 Prisma 1。 要了解有关 最新版本 Prisma 的所有信息,请访问官方 Prisma 文档。
如果您想学习如何使用 Prisma 构建服务器端应用程序,您可以遵循这些新教程:
作者选择 电子前沿基金会 作为 Write for DOnations 计划的一部分接受捐赠。
介绍
Prisma 是一个数据层,可替代应用程序中的传统对象关系映射工具 (ORM)。 Prisma 提供对构建 GraphQL 服务器和 REST API 的支持,简化了数据库访问,重点关注 类型安全 并启用 声明性数据库迁移 。 类型安全有助于减少潜在的代码错误和不一致,而声明性数据库迁移允许您将数据模型存储在版本控制中。 这些功能可帮助开发人员减少专注于设置数据库访问、迁移和数据管理工作流的时间。
您可以通过多种方式部署充当数据库代理的 Prisma 服务器,并将其托管在远程或本地。 通过 Prisma 服务,您可以访问您的数据并使用 GraphQL API 连接到您的数据库,该 API 允许实时操作以及创建、更新和删除数据的能力。 GraphQL 是一种用于 API 的查询语言,它允许用户发送查询以从他们的服务器访问他们需要的确切数据。 Prisma 服务器是位于数据库顶部的独立组件。
在本教程中,您将在 Ubuntu 18.04 上手动安装 Prisma 服务器并在 GraphQL Playground 中运行测试 GraphQL 查询。 在远程服务器上运行 Prisma 时,您将在本地托管您的 Prisma 设置代码和开发——您将在其中实际构建您的应用程序。 通过手动运行安装,您将对设置的底层基础架构有更深入的了解和可定制性。
虽然本教程介绍了在 Ubuntu 18.04 服务器上部署 Prisma 的手动步骤,但您也可以按照 Prisma 网站上的 tutorial 使用 Docker Machine 以更自动化的方式完成此操作。
注意:本节中描述的设置不包括您通常期望生产就绪服务器提供的功能,例如自动备份和主动故障转移。
先决条件
要完成本教程,您需要:
- 按照 Initial Server Setup Guide 设置的 Ubuntu 18.04 服务器,包括 sudo 非 root 用户。
- Docker 安装在您的服务器上。 您可以按照 Docker Installation on Ubuntu 18.04 教程 的第 1 步来实现此目的。
- Docker Compose 已安装。 您可以在 Installing Docker Compose 的第 1 步中找到相关说明。
- Node.js 安装在您的服务器上。 您可以通过阅读 安装 Node.js 教程 的 PPA 部分来完成此操作。
第 1 步 — 启动 Prisma 服务器
Prisma CLI 是用于部署和管理 Prisma 服务的主要工具。 要启动这些服务,您需要设置所需的基础架构,其中包括 Prisma 服务器和供其连接的数据库。
Docker Compose 允许您管理和运行多容器应用程序。 您将使用它来设置 Prisma 服务所需的基础架构。
您将首先创建 docker-compose.yml
文件以将 Prisma 服务配置存储在您的服务器上。 您将使用此文件自动启动关联数据库 Prisma,并配置必要的详细信息,这一切都在一个步骤中完成。 使用 Docker Compose 启动文件后,它将为您的数据库配置密码,因此请务必将 managementAPIsecret
和 MYSQL_ROOT_PASSWORD
的密码替换为安全的密码。 运行以下命令以创建和编辑 docker-compose.yml
文件:
sudo nano docker-compose.yml
将以下内容添加到文件中以定义 Prisma 设置的服务和卷:
码头工人-compose.yml
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
。 - 它引入了最新版本的 Prisma。 在撰写本文时,这是 Prisma 1.20。
- 它设置 Prisma 可用的端口,并在
databases
部分中指定连接到 MySQL 数据库的所有凭据。
docker-compose.yml
文件设置 managementApiSecret
,它可以防止其他人在知道您的端点的情况下访问您的数据。 如果您将本教程用于除测试部署之外的任何内容,则应将 managementAPIsecret
更改为更安全的内容。 做的时候一定要记住,以便以后在prisma init
过程中输入。
该文件还提取 MySQL Docker 映像并设置这些凭据。 出于本教程的目的,这个 Docker Compose 文件启动了一个 MySQL 映像,但您也可以将 PostgreSQL 与 Prisma 一起使用。 两个 Docker 镜像都在 Docker hub 上可用:
保存并退出文件。
现在您已经保存了所有详细信息,您可以启动 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 数据库 API 创建文件结构,该 API 生成使用 Prisma 构建应用程序所需的文件。 您的端点将自动位于 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
对于后续选项,您可以通过按 ENTER
为 service name
和 service stage
选择默认变量:
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 已根据您的数据模型(在 prisma init
步骤中创建)使用 type User
更新了您的数据库。 类型是数据模型的重要组成部分; 它们代表您应用程序中的一个项目,并且每种类型都包含多个字段。 对于您的数据模型,描述用户的相关字段是:用户 ID、姓名、创建时间和更新时间。
如果您在此阶段遇到问题并获得不同的输出,请仔细检查您在交互式提示期间是否正确输入了所有字段。 您可以通过查看 prisma.yml
文件的内容来做到这一点。
随着您的 Prisma 服务运行,您可以连接到两个不同的端点:
- 管理界面,在
http://SERVER_IP_ADDRESS:4466/management
可用,您可以在其中管理和部署 Prisma 服务。 - 用于您的 Prisma 服务的 GraphQL API,可在
http://SERVER_IP_ADDRESS:4466/hello-world/dev
获得。
您已成功设置并部署了 Prisma 服务器。 您现在可以在 GraphQL 中探索查询和突变。
第 4 步 — 运行示例查询
要探索另一个 Prisma 用例,您可以试用 GraphQL playground 工具,它是您服务器上的开源 GraphQL 集成开发环境 (IDE)。 要访问它,请从上一步在浏览器中访问您的端点:
http://SERVER_IP_ADDRESS:4466/hello-world/dev
mutation 是一个 GraphQL 术语,描述了一种通过 GraphQL 在后端修改——创建、更新或删除(CRUD)——数据的方法。 您可以发送突变来创建新用户并探索功能。 为此,请在页面左侧运行以下突变:
mutation { createUser(data: { name: "Alice" }) { id name } }
按下播放按钮后,您将在页面右侧看到结果。
随后,如果要使用数据库中的 ID
列查找用户,可以运行以下查询:
query { user(where: { id: "cjkar2d62000k0847xuh4g70o" }) { id name } }
你现在有一个 Prisma 服务器和服务在你的服务器上启动和运行,你已经在 GraphQL 的 IDE 中运行了测试查询。
结论
您的服务器上有一个正常运行的 Prisma 设置。 您可以在 Getting Started Guide 中查看一些额外的 Prisma 用例和后续步骤,或在 Prisma Docs 中探索 Prisma 的功能集。 完成本教程中的所有步骤后,您有许多选项来验证您与数据库的连接,一种可能是使用 Prisma Client。
警告: 本教程已过时,不再维护。 它基于不再积极开发的 Prisma 1。 要了解有关 最新版本 Prisma 的所有信息,请访问官方 Prisma 文档。
如果您想学习如何使用 Prisma 构建服务器端应用程序,您可以遵循这些新教程: