Prisma 服务器(Prisma Servers)全面指南:部署形态、发布渠道与认证机制
后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载导读Prisma API 并不是凭空运行的它需要托管在被称为Prisma 服务器Prisma servers的运行时环境上。本文以 Prisma 1.14 文档《Prisma Servers Overview》为主线系统讲解 Prisma 服务器的三种部署形态本地/自托管、Prisma Sandbox、私有服务器、prisma deploy的两种目标服务器选择方式、stable/beta/alpha 三条发布渠道以及基于公钥/私钥的非对称认证与基于单一密钥的对称认证机制。读完本文你将能够正确选择服务器的部署方式、配置docker-compose.yml中的认证参数并理解 Prisma CLI 与服务器之间完整的鉴权调用链。什么是 Prisma 服务器Prisma API 托管在Prisma 服务器上这些服务器为 Prisma API 提供运行时环境runtime environment。简单来说Prisma 服务器是承载 GraphQL 数据访问层Prisma API的服务端基础设施你的数据模型datamodel经过prisma deploy部署后将以一个可访问的 GraphQL endpoint 形式运行在某台 Prisma 服务器上。注意在 Prisma 1.7 之前Prisma 服务器被称为clusters集群。术语变更后文档与 CLI 中仍存在部分历史遗留叫法例如 CLI 源码中的getDeployEndpoint()在检测到旧版本服务器时会自动回退到/cluster路径见 Cluster.ts。三种可部署的服务器形态本质上你可以将 Prisma API 部署到以下三种服务器之一形态说明适用场景本地 / 自托管Local / self-hosted基于 Docker 在本地或任意云厂商主机上自行搭建通过 Docker CLI 管理底层的 Docker 镜像与容器生产环境首选Prisma SandboxPrisma CloudPrisma Cloud 提供的免费开发服务器用于学习与原型验证带有请求限流与存储上限学习、原型验证私有服务器Private servers服务器连接到你自己的数据库该数据库在初始化设置服务器时完成配置生产环境首选对于生产用途私有服务器与自托管服务器是部署 Prisma 服务的首选方案。本章节主要聚焦自托管服务器Prisma Cloud 相关内容可参考 Prisma Cloud 专属文档。Prisma Sandbox 的限流与存储限制Prisma Sandbox 存在明确的资源限制原文档 InfoBox 中的内容限流平均每 10 秒最多 10 个请求。排队机制如果超过该速率请求会被放入内存队列当队列超过 25 个请求时立即返回错误。响应头标记HTTP 响应会包含throttled-by头字段用于指示请求因限流而被延迟的时间单位为毫秒。存储上限运行在 Sandbox 中的 Prisma API存储容量上限为 100 MB。这意味着 Sandbox 只适合功能验证与原型演示不应承载任何规模化的生产流量。部署时的两种目标服务器场景当你为某个 Prisma API 运行prisma deploy时根据prisma.yml中是否声明endpoint属性存在两种场景场景一prisma.yml中已指定endpoint此时 CLI 会直接将该 API 部署到endpoint所指向的服务器。从源码看prisma.yml中的endpoint还可被环境变量PRISMA_MANAGEMENT_API_ENDPOINT覆盖见 PrismaDefinition.ts。场景二prisma.yml中未指定endpoint此时 Prisma CLI 的交互向导wizard会向你提出几个问题为你构造endpoint并把 API 部署到对应服务器同时将endpoint写回prisma.yml作为后续部署的默认值。若要再次唤起向导可以运行prisma deploy --new或者手动将endpoint从prisma.yml中删除。从 CLI 实现看见 deploy.ts当endpoint/serviceName/stage缺失或传入--new源码中映射为interactive时CLI 会通过EndpointDialog.getEndpoint()进入交互式选择流程并在选择完成后调用this.definition.replaceEndpoint(results.endpoint)将构造出的 endpoint 写回prisma.yml。部署完成后CLI 还会打印 HTTP 与 WS 两种协议下的 endpoint 地址getWSEndpoint将http前缀替换为ws见 Cluster.ts。发布渠道Channels安装 Prisma 时可以在三条渠道中选择stable经过充分测试、可用于生产环境的发布版。beta正在接受大规模测试、尚未晋升为 stable 的版本。alpha每当 Prisma 合入新特性或 bugfix 时立即更新的版本。文档中的快速上手教程默认从stable渠道安装。如需安装 beta 或 alpha 渠道按如下步骤操作安装 Prisma Beta使用 npmnpm install -g prismabeta如果直接使用 Docker 镜像可以前往 Docker Hub 上prismagraphql/prisma镜像的 tags 页面查找最新 beta 镜像或直接使用betatag 以始终获取最新版本docker pull prismagraphql/prisma:beta安装 Prisma Alpha使用 npmnpm install -g prismaalpha同样地Docker 用户可以使用alphatagdocker pull prismagraphql/prisma:alpha认证AuthenticationPrisma 服务器的认证方式根据部署形态分为两类Docker 自托管服务器支持对称与非对称两种方案Prisma Cloud 则使用基于会话密钥的登录机制。Docker 自托管非对称认证公钥/私钥对在非对称认证方案中Prisma 服务器使用公钥/私钥对进行安全保护服务器端持有公钥通过docker-compose.yml中的legacySecret属性配置该属性即服务端公钥。私钥保存在本地由 Prisma CLI 持有用于生成认证令牌JWT。这些令牌用于向服务器认证请求例如一次prisma deploy调用服务器使用公钥验证令牌的有效性。CLI 侧的实现印证了这一点在 Cluster.ts 的getLocalToken()中当使用legacySecret即clusterSecret时CLI 采用RS256算法基于私钥对grants授权声明如[{ target: */*, action: * }]签名生成令牌有效期长达 5 年而当使用PRISMA_MANAGEMENT_API_SECRET环境变量时则改用HS256对称算法。非对称方案下服务器用配置的公钥即可验证 RS256 令牌的签名。Docker 自托管对称认证单一密钥Prisma 1.7 引入了新的对称认证方案使用单一密钥来认证 Prisma CLI 对服务器的请求。该密钥由服务器管理员选择通过部署服务器所用的docker-compose.yml中的managementApiSecret属性设置。如果未设置managementApiSecretCLI 无需认证其请求。如果已设置CLI 必须能够访问名为PRISMA_MANAGEMENT_API_SECRET的环境变量其值包含该密钥否则 CLI 无法与服务器通信——典型表现是prisma deploy直接失败。在 CLI 侧getToken()的逻辑清晰展示了这一判定过程见 Cluster.ts对于需要认证的本地/私有服务器若存在PRISMA_MANAGEMENT_API_SECRET环境变量则走本地令牌对称 HS256路径对于共享服务器如 Prisma Cloud则通过云 API 调用generateClusterTokenmutation 换取集群令牌。若缺少密钥导致签名失败CLI 会抛出明确的错误提示Did you provide the env var PRISMA_MANAGEMENT_API_SECRET?。服务端侧ConfigLoader.scala 负责解析PRISMA_CONFIG中的managementApiSecret并注入PrismaConfig同时保留了基于环境变量的legacyConfig()向后兼容路径读取PRISMA_MANAGEMENT_API_JWT_SECRET等旧环境变量。Prisma Cloud登录与会话登录CLI 使用存储在~/.prisma/config.yml中的cloudSessionKey向 Prisma Cloud 认证。首次登录时prisma loginCLI 会将该 key 写入该文件。从 CLI 逻辑看登录态参与部署流程的方式是当目标集群是非本地且私有的集群且缺少PRISMA_MANAGEMENT_API_SECRET与有效cloudSessionKey时prisma deploy会先强制触发登录流程随后用会话密钥填充cluster.clusterSecret以完成后续认证见 deploy.ts。登出使用prisma logout命令登出 Prisma CLI该命令会从~/.prisma/config.yml文件中移除cloudSessionKey。延伸docker-compose.yml 中的服务器配置自托管服务器的基础设施完全基于 Docker详见 Docker 部署文档。仓库中真实可用的配置示例可参考 server/docker-compose/mysql/prisma.yml它演示了port、databases.default.connector/host/port/user/password/rawAccess等关键配置项port: 4466 databases: default: connector: mysql host: 127.0.0.1 port: 3306 user: root password: prisma rawAccess: true结合 ConfigLoader.scala服务端配置解析遵循以下要点配置来源优先级环境变量PRISMA_CONFIG 配置文件prisma.yml或prisma.yaml可通过PRISMA_CONFIG_PATH指定 旧版环境变量向后兼容。顶层支持port、managementApiSecret、clusterAddress、rabbitUri、enableManagementApi、prototype以及databases等键。databases下默认使用default这一数据库名每个数据库条目必须包含connector如mysql、postgres、mongo并支持host、port、user、password、connectionLimit校验要求至少为 2、pooled、ssl、rawAccess等参数。若配置中未定义任何数据库No databases defined或缺少必填键如connector、host、user配置加载将直接失败并抛出InvalidConfiguration。这些参数与docker-compose.yml中PRISMA_CONFIG环境变量的写法一一对应读者可以据此灵活编排自托管服务器的数据库连接与认证配置。小结Prisma 服务器是 Prisma API 的运行时载体理解其部署形态与认证机制是使用 Prisma 的基础三种形态本地/自托管Docker、Prisma Sandbox免费、限流、100 MB 上限、私有服务器连接自有数据库生产环境优先选择后两者。两种部署路径prisma.yml指定endpoint直接部署或借助交互向导自动构造 endpointprisma deploy --new可随时重新唤起向导。三条发布渠道stable/beta/alpha分别对应生产稳定、测试验证与每日更新npm 与 Docker tag 均可按渠道安装。两种 Docker 认证legacySecret非对称、RS256 公钥/私钥对与managementApiSecret对称、单一密钥 PRISMA_MANAGEMENT_API_SECRET环境变量。Prisma Cloud 会话prisma login写入、prisma logout移除~/.prisma/config.yml中的cloudSessionKey。在实际部署前建议先阅读 Docker 部署文档 了解docker-compose.yml的完整写法与常见调试命令再结合本仓库中的 mysql 配置示例 与 服务端配置解析实现 进行二次核对即可快速搭建出符合预期的 Prisma 服务器环境。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 服务器Prisma Servers详解部署形态、发布渠道与认证机制Prisma 服务器Prisma Servers详解部署形态、发布渠道与认证机制 Prisma 生成的 GraphQL API 并非独立运行而是托管在被后端数据库GraphQLPrisma 服务器Prisma Servers完全指南部署形态、鉴权机制与 CLI 对接实践Prisma 服务器Prisma Servers完全指南部署形态、鉴权机制与 CLI 对接实践 本篇技术指南以 Prisma 1.13 官方参考文档中《P后端数据库GraphQLPrisma Server 完全指南三类部署形态、Channel 选择与双认证机制Prisma Server 完全指南三类部署形态、Channel 选择与双认证机制 Prisma API 运行在 _Prisma server_ 之上这类服后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考