后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载导读本文基于 Prisma 官方文档中“使用 Zeit Now 部署 GraphQL 服务器”的实战指南完整讲解如何把基于graphql-yogaprisma-binding构建的 GraphQL 服务器一键部署到 Zeit Now 云平台。文章包含两个递进实战先用now完成node-basic模板的直接部署再针对node-advanced模板讲解如何用now --dotenv .env注入PRISMA_ENDPOINT等环境变量、区分开发与生产部署目标。读完后你将掌握 Now 的部署原理、start脚本启动机制、.env环境变量约定及其在 Prisma 服务配置${env:...}语法中的实际作用并能独立完成一次完整的 GraphQL 服务上线。部署前的基础你的 GraphQL 服务器与 Prisma 的关系在进入 Now 部署流程之前需要先明确被部署对象的架构。教程中使用的两个 GraphQL boilerplate 项目node-basic、node-advanced都是基于graphql-yoga构建的——graphql-yoga是一个以 Express.js、apollo-server和graphql-tools为底层实现的轻量 GraphQL 服务器。服务器的核心代码模式如下可参考 01-Build-a-GraphQL-Server-with-Prisma.md 中的完整实现在src/index.js中实例化GraphQLServer并通过prisma-binding创建Prisma绑定对象挂载到context上使所有 resolver 可以把查询、变更操作委托给 Prisma 的 GraphQL API 执行const server new GraphQLServer({ typeDefs: src/schema.graphql, resolvers, context: req ({ ...req, db: new Prisma({ typeDefs: src/generated/prisma.graphql, // 自动生成的 Prisma 数据库 schema endpoint: process.env.PRISMA_ENDPOINT, // Prisma API 端点环境变量方式提供 debug: true, }), }), })这个结构决定了部署时的一个关键点服务器必须知道 Prisma API 的endpoint才能工作。在node-basic模板中这个端点被直接写死在代码里所以部署最简单而在node-advanced模板中端点通过环境变量PRISMA_ENDPOINT注入见下文src/index.js中的process.env.PRISMA_ENDPOINT因此部署时必须显式提供该变量——这正是本教程 Basic / Advanced 两部分的根本差异。关于 Prisma 服务的构建与 Prisma 数据库 schema 的下载graphql get-schema --project prisma可阅读 01-Build-a-GraphQL-Server-with-Prisma.md 与 01-Setup-Prisma.md。第一步安装 Now DesktopZeit Now 提供两种使用方式桌面应用与nowCLI。本教程的第一步是下载Now Desktop并登录。打开浏览器访问https://zeit.co/download点击DOWNLOAD按钮下载安装 Now Desktop安装后启动应用并登录你的 Zeit 账号注意Now Desktop 安装包内已附带nowCLI无需再单独安装命令行工具。后续所有部署命令都在终端中通过now命令完成因此 CLI 是否可用是执行后续步骤的前提。Part 1使用now的基础部署用 GraphQL CLI 引导node-basic项目node-basic是 GraphQL Boilerplates 社区提供的 Node.js GraphQL 服务器模板最便捷的获取方式是使用 GraphQL CLI 的graphql create命令npm install -g graphql-cli graphql create hello-basic --boilerplate node-basic命令执行后会创建名为hello-basic的新目录其中包含 GraphQL 服务器的全部源文件以及所属 Prisma 服务的配置。创建过程中 CLI 会询问要把 Prisma 服务部署到哪个 Prisma 服务器此时选择Demo server选项即 Prisma Cloud 上托管的演示环境。选择 Demo server 需要先用 Prisma Cloud 账号完成认证。Demo server 的注册与选择流程详见 01-Demo-Server.md首次使用时 CLI 会在浏览器中打开注册页面登录后需要选择区域如demo-eu1或demo-us1CLI 会显示各服务器的延迟以便你选择更近的节点。运行now完成部署now命令的工作方式是将你的源文件上传到 Zeit 云平台然后调用package.json中定义的start脚本启动远端服务器。因此项目的package.json中必须存在可用的start脚本例如node src/index.js。cd hello-basic now如果是第一次使用nowCLI 会要求你先完成 Zeit 服务的认证。部署完成后CLI 会打印一个形如https://hello-basic-__ID__.now.sh的 URL其中__ID__是now为你的服务生成的随机标识你的 GraphQL 服务器即已对公网可用。整个基础流程到此结束——因为node-basic的所有配置包括 Prismaendpoint都已硬编码在项目内now无需任何额外参数即可让服务器正常对外服务。Part 2进阶——使用环境变量部署引导node-advanced项目node-advanced模板与node-basic的核心差异有三点内置用户认证、通过.env文件使用环境变量、包含基于 GraphQL Subscriptions 的实时功能。在终端新目录中执行graphql create hello-advanced --boilerplate node-advanced同样在提示选择 Prisma 服务部署位置时选择Demo server。为什么基础部署方式在这里会失败如果你直接像 Part 1 那样对hello-advanced运行now部署不会成功——更准确地说部署上去的 Playground 无法正常工作它不知道该连接哪个 Prisma 服务。原因在于这部分信息不再写死在代码里而是通过环境变量提供。node-advanced的src/index.js中Prisma 绑定对象的端点是这么读取的db: new Prisma({ typeDefs: src/generated/prisma.graphql, endpoint: process.env.PRISMA_ENDPOINT, debug: true, })而在database/prisma.yml中端点和密钥同样通过${env:...}语法从环境变量取值# 你的 Prisma API 端点部署到 Prisma Sandbox。 endpoint: ${env:PRISMA_ENDPOINT} # 数据模型定义文件。 datamodel: datamodel.graphql # 基于 seed.graphql 为服务注入初始数据。 seed: import: seed.graphql # 部署后将 Prisma API 的 GraphQL schema 下载到 # src/generated/prisma.graphql见 .graphqlconfig.yml。 hooks: post-deploy: - graphql get-schema --project database # 若指定secret 将用于生成 JWT并附加到访问 Prisma API 的 # HTTP 请求的 Authorization 头中。 # 说明https://www.prisma.io/docs/reference/prisma-api/concepts-utee3eiquo#authentication # secret: ${env:PRISMA_SECRET}从源码层面看这种${env:VAR}语法是 Prisma 配置体系的一等公民prisma-yml包中的PrismaDefinitionClass在加载prisma.yml时会调用dotenv.config()读取.env文件并把其中的变量并入process.env见 PrismaDefinition.ts随后配置解析会对env:引用做展开。这解释了为什么“.env文件 环境变量”是 Prisma 项目配置的标准做法——它不仅在服务器运行时生效也贯穿 Prisma CLI 读取服务配置的整个过程。使用now --dotenv .env注入环境变量.env文件是声明环境变量的社区惯例与最佳实践。Docker 等许多工具以及其他部署工具链都“认识”.env文件now同样通过--dotenv标志支持它。.env文件示例位于项目根目录PRISMA_ENDPOINThttps://eu1.prisma.sh/jane-doe/hello-advanced/dev APP_SECRETjwtsecret123部署命令cd hello-advanced now --dotenv .env--dotenv选项接收一个.env文件路径作为参数now会在部署时把其中声明的变量注入到远端构建与运行环境。为不同环境准备不同的.env文件环境变量最常见的用途是在不同部署阶段development / production之间切换配置。例如本地开发时你的 Prisma 服务可能跑在 Docker 里此时.env中的PRISMA_ENDPOINT指向本地地址PRISMA_ENDPOINThttp://localhost:60000/hello-advanced/dev而上线生产环境时该端点必须指向一个公网可访问的 Prisma 服务。为此可以再创建一个.env.prod文件把PRISMA_ENDPOINT改为远程 URL前提是你已经把 Prisma 服务部署到了某个公网服务器上然后显式引用它now --dotenv .env.prod这种“按环境维护多个.env文件、部署时按需选择”的方式让你无需修改任何代码即可切换 GraphQL 服务器所连接的 Prisma 服务也避免了把密钥写进仓库。部署后的验证与常见注意点如何验证服务器是否正常工作部署成功后浏览器中打开的 URL 会呈现一个 GraphQL Playground。你可以通过它发送查询来验证服务器与 Prisma 服务的联通性例如query { drafts { id title text isPublished } }如果返回了预期数据说明now已成功上传并启动服务器、start脚本执行正常、PRISMA_ENDPOINT环境变量注入成功、服务器与 Prisma API 的连接建立无误。关键注意事项start脚本是部署契约now通过执行package.json的start脚本来启动远端服务器本质上是yarn start或npm run start项目必须保证该脚本能在无交互环境下直接运行环境变量必须与代码引用一一对应只要代码中出现process.env.PRISMA_ENDPOINT或在prisma.yml中出现${env:PRISMA_ENDPOINT}部署时就必须通过--dotenv提供对应值否则服务器要么启动失败要么运行时无法连接数据库 APIDemo server 仅适合学习与原型开发Demo server 虽然免费但有速率限制与存储容量上限不应作为生产环境使用参见 01-Demo-Server.md订阅Subscriptions类实时功能在无状态平台上受限如果服务器使用 WebSocket 实现 GraphQL Subscriptions需要维护客户端连接池有状态而 Lambda 类平台在空闲时会回收实例导致连接中断。Now 的容器模型与 AWS Lambda 不同但若你的部署目标是无状态 serverless 平台应评估实时功能是否可用。总结两套部署模式的适用场景部署方式适用场景配置要点now基础所有配置硬编码在项目内、无敏感信息的服务无需任何参数start脚本就绪即可now --dotenv .env进阶使用环境变量管理端点、密钥的多环境服务提供.env文件确保PRISMA_ENDPOINT等变量与代码引用一致通过这两个递进实战你可以把同一套graphql-yogaprisma-binding架构的 GraphQL 服务器从本地开发环境平滑地带到公网并借助.env文件在不同部署阶段之间无痛切换。如果希望了解另一种一键部署工具 Apex Up部署到 AWS Lambda可对照阅读姊妹篇 02-Deployment-with-Up.md本文相关的 GraphQL 服务器构建完整流程可参考 01-Build-a-GraphQL-Server-with-Prisma.md。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐使用 Zeit Now 部署 Prisma GraphQL 服务器从基础部署到环境变量配置使用 Zeit Now 部署 Prisma GraphQL 服务器从基础部署到环境变量配置 本文是 Prisma 文档系列中构建与部署 GraphQL 服务后端数据库GraphQL使用 Zeit Now 部署 Prisma GraphQL 服务器基础部署与 --dotenv 环境变量实战指南使用 Zeit Now 部署 Prisma GraphQL 服务器基础部署与 dotenv 环境变量实战指南 本教程源自 Prisma 1.x 文档 Depl后端数据库GraphQL使用 Zeit Now 部署 Prisma GraphQL 服务器从一键部署到环境变量管理使用 Zeit Now 部署 Prisma GraphQL 服务器从一键部署到环境变量管理 本篇技术指南以 Prisma 1.x 时代官方教程为骨架系统讲解后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
