如何在Ubuntu 18.04上手动设置Prisma服务器

Prisma是一个数据层,它取代了应用程序中的传统ORM,支持REST API和GraphQL服务器构建。在本教程中,学习如何在Ubuntu 18.04上手动设置Prisma服务器并运行测试GraphQL查询。

作者选择电子前沿基金会作为Write for DOnations计划的一部分接受捐赠。

介绍

Prisma是一个数据层,它取代了应用程序中的传统对象关系映射工具(ORM)。 Prisma支持构建GraphQL服务器和REST API,简化了数据库访问,重点关注类型安全并支持声明性数据库迁移 类型安全性有助于减少潜在的代码错误和不一致,而声明性数据库迁移允许您将数据模型存储在版本控制中。 这些功能可帮助开发人员减少专注于设置数据库访问,迁移和数据管理工作流的时间。

您可以通过多种方式部署Prisma服务器,该服务器充当数据库的代理,并远程或本地托管它。 通过Prisma服务,您可以使用GraphQL API访问数据并连接到数据库,GraphQL API允许实时操作以及创建,更新和删除数据的功能。 GraphQL是API的一种查询语言,允许用户发送查询以从其服务器访问所需的确切数据。 Prisma服务器是一个独立的组件,位于数据库之上。

在本教程中,您将在Ubuntu 18.04上手动安装Prisma服务器,并在GraphQL Playground中运行测试GraphQL查询。 您将在本地托管Prisma设置代码和开发 - 在实际构建应用程序的位置 - 同时在远程服务器上运行Prisma。 通过手动运行安装,您将对设置的底层基础架构有更深入的了解和可自定义性。

虽然本教程介绍了在Ubuntu 18.04服务器上部署Prisma的手动步骤,但您也可以使用Docker Machine以更自动化的方式完成此操作,方法是按照Prisma网站上的本教程进行操作。

注意 :本节中描述的设置不包括您通常期望的生产就绪服务器的功能,例如自动备份和主动故障转移。

先决条件

要完成本教程,您需要:

第1步 - 启动Prisma Server

Prisma CLI是用于部署和管理Prisma服务的主要工具。 要启动服务,您需要设置所需的基础结构,其中包括Prisma服务器和要连接的数据库。

Docker Compose允许您管理和运行多容器应用程序。 您将使用它来设置Prisma服务所需的基础结构。

首先,创建docker-compose.yml文件以在服务器上存储Prisma服务配置。 您将使用此文件自动启动Prisma,一个关联的数据库,并在一个步骤中配置必要的详细信息。 一旦文件与Docker Compose一起使用,它将为您的数据库配置密码,因此请务必使用安全的东西替换managementAPIsecretMYSQL_ROOT_PASSWORD的密码。 运行以下命令以创建和编辑docker-compose.yml文件:

sudo nano docker-compose.yml

将以下内容添加到文件中以定义Prisma设置的服务和卷:

Docker窗,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-dbdb
  • 它引入了最新版本的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

这将获取prismamysql的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文件中, prisma.yml将包含您可以在下一步中查询的示例数据模型。 数据模型是Prisma API的基础,并为您的应用程序指定模型。 此时,您只是创建文件和示例数据模型。 在此步骤稍后运行prisma deploy之前,您不会对数据库进行任何更改。

现在,您可以在本地运行以下命令来创建新的文件结构:

prisma init hello-world

运行此命令后,您将看到一个交互式提示。 询问时,选择, Use other server并按ENTER

  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)开头并且指示了端口号是关键。

Enter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466

对于管理API密钥,请输入您在配置文件中先前指出的短语或密码:

Enter the management API secret my-secret

对于后续选项,您可以通过按ENTERservice nameservice stage选择默认变量:

Choose a name for your service hello-world
Choose a name for your stage dev

您还可以选择Prisma客户端的编程语言。 在这种情况下,您可以选择首选语言。 您可以在此处阅读有关客户的更多信息。

  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

完成提示后,您将看到以下输出,确认您所做的选择:

Created 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服务。

您的输出将如下所示:

Creating 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已根据您使用类型 User数据模型(在prisma init步骤中创建)更新了数据库。 类型是数据模型的重要组成部分; 它们代表应用程序中的项目,每种类型包含多个字段。 对于您的数据模型,描述用户的关联字段是:用户的ID,名称,创建时间以及更新时间。

如果您在此阶段遇到问题并获得不同的输出,请仔细检查您是否在交互式提示中正确输入了所有字段。 您可以通过查看prisma.yml文件的内容来完成prisma.yml操作。

运行Prisma服务后,您可以连接到两个不同的端点:

  • 管理界面,可从http:// SERVER_IP_ADDRESS :4466/management ,您可以在其中管理和部署Prisma服务。

  • 适用于Prisma服务的GraphQL API,可从http:// SERVER_IP_ADDRESS :4466/ hello-world / dev

GraphQL API探索_Your Project_

您已成功设置和部署Prisma服务器。 您现在可以在GraphQL中探索查询和突变。

第4步 - 运行示例查询

要探索另一个Prisma用例,您可以尝试使用GraphQL playground工具,它是服务器上的开源GraphQL集成开发环境(IDE)。 要访问它,请从上一步骤访问浏览器中的终端:

http://SERVER_IP_ADDRESS:4466/hello-world/dev

变异是一个GraphQL术语,它描述了一种通过GraphQL修改 - 创建,更新或删除(CRUD)后端数据的方法。 您可以发送突变以创建新用户并探索功能。 为此,请在页面左侧运行以下变异:

mutation {
  createUser(data: { name: "Alice" }) {
    id
    name
  }
}

按下播放按钮后,您将在页面右侧看到结果。
GraphQL Playground创建新用户

随后,如果要使用数据库中的ID列查找用户,可以运行以下查询:

query {
  user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
    id
    name
  }
}

您现在已在服务器上启动并运行Prisma服务器和服务,并且您已在GraphQL的IDE中运行测试查询。

结论

您的服务器上有一个正常运行的Prisma设置。 您可以在“ 入门指南”中查看一些其他Prisma用例和后续步骤,或者在Prisma Docs中探索Prisma的功能集。 完成本教程中的所有步骤后,您可以使用许多选项来验证与数据库的连接,一种可能是使用Prisma Client