Prisma 手动部署到 Digital Ocean Droplet 完整指南SSH 安装、集群配置与服务部署【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1本指南面向需要把 Prisma 数据库服务部署到 Digital Ocean 云服务器的开发者全程使用 SSH 手动安装 Docker、Node.js 与 Prisma CLI并通过prisma local start在 Droplet 上拉起本地集群。读完本文你将掌握从创建 Droplet、连接服务器、安装依赖到验证集群、配置~/.prisma/config.yml集群凭据最终用prisma init/prisma deploy把服务部署到远程集群的完整流程。文中所有命令与配置均以当前仓库docs/1.2/03-Tutorials/04-Cluster-Deployment/系列文档为骨架并结合 prisma-yml 源码补充底层实现细节。概述为什么选择手动部署本节对应 Digital Ocean (manual).md) 文档描述如何在20 分钟以内在 Digital Ocean 上搭建一个可用的 Prisma 服务器。在动手之前需要明确两点本流程会通过 SSH 连接 Droplet并手动安装全部依赖Docker、Docker Compose、Node.js、Prisma CLI不借助 Docker Machine 等自动化工具。大多数用户更推荐使用 Digital Ocean (Docker Machine).md) 的自动化流程本文面向希望完全掌控安装过程、理解每一步底层机制的场景。Digital Ocean 提供多种规格的虚拟服务器称为Droplet。文档明确指出10 美元/月的 1 GB 内存 Droplet 是 Prisma 服务器的良好起点。同时文档给出了重要的边界说明本节描述的安装不包含生产环境服务器通常应具备的特性例如备份backup和主动故障转移active failover。后续文档会补充更完整的生产级部署指南。这意味着本文方案适用于开发、演示、原型验证等场景生产级高可用部署需在本文基础上叠加备份与容灾措施。第一步创建 Droplet前置条件如果你还没有 Digital Ocean 账号请先前往 https://www.digitalocean.com/ 注册。创建步骤登录后创建新的 Droplet按以下步骤操作选择系统镜像选择最新的 Ubuntu 发行版。以文档写作时为准为Ubuntu 17.10。实际部署时应选择你登录时 Digital Ocean 提供的最新 LTS 版本。选择规格选择标准StandardDroplet10 美元/月、1 GB 内存的规格是一个不错的起点。选择区域选择离你的最终用户最近的区域。如果这个 Prisma 仅用于开发则选择离你最近的区域即可。配置 SSH 密钥创建一个用于连接 Droplet 的 SSH 密钥具体操作按 Digital Ocean 官方引导完成。命名 Droplet为 Droplet 设置一个名称例如prisma。等待创建完成Droplet 创建通常不到一分钟即可完成。第二步SSH 连接 DropletDigital Ocean 创建完成后会显示 Droplet 的 IP 地址。在 macOS 或 Linux 终端中可以直接用 SSH 连接ssh root37.139.15.166 # 如果创建了独立的 SSH 密钥可以显式指定密钥路径 ssh root37.139.15.166 -i /Users/demo/.ssh/id_rsa_do示例 IP37.139.15.166仅为文档演示值实际使用时请替换为你自己 Droplet 的 IP。第三步安装 Docker 与 Docker ComposePrisma 服务器以容器形式运行后续docker ps验证环节会看到prismagraphql/prisma与mysql两个容器因此需要同时安装Docker与Docker Compose。Digital Ocean 官方有详细的安装教程分别对应 Ubuntu 上的 Docker 与 Docker Compose 安装也可以直接执行下面的快速安装命令# 1. 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 2. 添加 Docker 官方 apt 软件源arch 与发行版代号自动适配 sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable # 3. 更新软件源并安装 docker-ce sudo apt-get update sudo apt-get install -y docker-ce # 4. 安装 docker-compose 1.18.0按 CPU 架构自动下载对应二进制 sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose各命令要点$(lsb_release -cs)会自动获取当前 Ubuntu 的发行版代号使软件源适配你的系统docker-compose的下载地址中使用了uname -s与uname -m自动匹配操作系统与 CPU 架构安装完成后建议执行docker --version与docker-compose --version确认安装成功。第四步安装 Node.jsPrisma CLI 基于 Node.js 运行使用 NodeSource 提供的 8.x 软件源安装curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs第五步安装 Prisma 并启动本地集群全局安装 Prisma CLInpm -g install prisma启动本地 Prisma 集群prisma local start该命令会在 Droplet 上启动一个完整的本地 Prisma 集群。prisma local start属于 CLI 的本地集群管理命令它会编排 Docker 容器Prisma 服务端与配套数据库并拉起集群进程。执行后 Prisma 即安装完成并处于运行状态。第六步验证 Prisma 安装检查 Docker 容器在 Droplet 上执行docker ps应能看到两个关键容器 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e5d2e028eba9 prismagraphql/prisma:1.0.0 /app/bin/single-ser… 51 seconds ago Up 49 seconds 0.0.0.0:4466-4466/tcp prisma 42d9d5acd0e4 mysql:5.7 docker-entrypoint.s… 51 seconds ago Up 49 seconds 0.0.0.0:3306-3306/tcp prisma-db从输出可以看到集群由两部分组成容器镜像端口映射作用prismaprismagraphql/prisma:1.0.00.0.0.0:4466-4466/tcpPrisma 服务端对外暴露 GraphQL 端点prisma-dbmysql:5.70.0.0.0:3306-3306/tcp集群底层数据库默认 MySQL检查集群列表执行prisma cluster list确认local集群出现在输出中。该命令读取本机~/.prisma/config.ymlEnvironment.ts 负责加载该配置并构造Cluster实例列表。访问 /cluster 端点最后在浏览器中打开 Droplet 的/cluster端点。假设 Droplet IP 为37.139.15.166访问http://37.139.15.166:4466/cluster如果出现GraphQL Playground界面说明 Prisma 集群已正确配置。从源码看该路径对应 Cluster.ts 中getDeployEndpoint()返回的${baseUrl}/cluster旧版部署端点或/management新版管理端点CLI 通过该端点做serverInfo版本探测与鉴权判断。第七步连接远程集群并部署服务集群的安全模型你的 Prisma 集群由一个公私钥对保护。要使用本地机器上的prismaCLI 连接它必须在 CLI 的配置文件中配置安全凭据clusterSecret。在 Cluster.ts 中可以看到clusterSecret是Cluster类的核心字段之一Cluster.ts#L16、L42CLI 会用它生成访问令牌。从 Cluster.ts 的getLocalToken()实现可以确认底层机制集群使用 RSA 私钥clusterSecret作为 JWT 签名密钥算法为RS256CLI 用该密钥签发出grants权限声明为*/*全部权限、有效期 5 年的本地令牌如果设置了环境变量PRISMA_MANAGEMENT_API_SECRET则优先使用该变量并改用HS256对称签名Cluster.ts#L86-L88。这也解释了为什么必须在本地与服务器两侧配置相同的clusterSecret——它既是身份凭据也是生成访问令牌的签名密钥。1. 从服务器复制集群配置在 Digital Ocean Droplet 上查看local集群的clusterSecret cat ~/.prisma/config.yml clusters: local: host: http://localhost:4466 clusterSecret: -----BEGIN RSA PRIVATE KEY----- [ long key omitted ] -----END RSA PRIVATE KEY-----\r\n2. 在本地配置中添加新集群在本地开发机上用编辑器打开~/.prisma/config.yml。该文件很可能已经定义了若干集群现在追加一个新集群并给它起一个描述性的名字例如do-clusterclusters: local: host: http://localhost:4466 clusterSecret: -----BEGIN RSA PRIVATE KEY----- [ long key omitted ] -----END RSA PRIVATE KEY-----\r\n do-cluster: host: http://37.139.15.166:4466 clusterSecret: -----BEGIN RSA PRIVATE KEY----- [ long key omitted ] -----END RSA PRIVATE KEY-----\r\n注意两点将host改为你 Digital Ocean Droplet 的实际 IP文档示例为37.139.15.166端口4466与 Docker 容器暴露的端口一致clusterSecret必须与服务器端~/.prisma/config.yml中的值完全一致含BEGIN/END RSA PRIVATE KEY标记与换行转义符否则 CLI 生成的令牌无法通过集群鉴权。3. 验证集群配置被识别在本地机器上执行prisma cluster list输出中应包含新添加的集群do-cluster。底层实现中Environment.ts 会读取~/.prisma/config.yml中的clusters段将每个条目实例化为Cluster对象Cluster.ts并通过getLocalClusterConfig()将非共享集群的host与clusterSecret序列化输出Environment.ts#L254-L269。4. 创建并部署服务现在可以创建新服务并部署到该集群prisma init prisma deploy在部署选项中选择新添加的集群do-cluster。部署成功后输出类似如下Added cluster: do-cluster to prisma.yml Creating stage dev for service demo ✔ Deploying service demo to stage dev on cluster do-cluster 1.3s 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 1.8s Hooks: Running $ graphql prepare... Your GraphQL database endpoint is live: HTTP: http://37.139.15.166:4466/demo/dev WS: ws://37.139.15.166:4466/demo/dev解读这个输出prisma init生成服务的prisma.yml配置文件并引导选择集群Added cluster: do-cluster to prisma.yml表示集群选择结果已被写回项目配置部署过程在do-cluster集群的devstage 上创建了demo服务并在数据模型中新增了User类型及其四个字段id、name、updatedAt、createdAt均为非空类型Running $ graphql prepare...是部署钩子Hooks在应用变更后执行部署完成后获得两个端点HTTP 端点http://droplet-ip:4466/demo/dev与 WebSocket 端点ws://droplet-ip:4466/demo/dev。从源码看端点路径的拼装规则定义在 Cluster.ts 的getApiEndpoint()/getWSEndpoint()中本地私有集群local或isPrivate的端点格式为${baseUrl}/${service}/${stage}而 WebSocket 端点会把 URL 的http协议前缀替换为ws。这也印证了输出中HTTP: http://37.139.15.166:4466/demo/dev与WS: ws://37.139.15.166:4466/demo/dev的对应关系。延伸本方案与自动化部署的对比文档同时提及了更推荐的 Digital Ocean (Docker Machine).md) 流程。两者对比如下维度手动部署本文Docker Machine 自动化安装方式SSH 进入 Droplet 手动逐项安装通过 Docker Machine 驱动自动创建并配置依赖管理手动安装 Docker、Compose、Node.js、Prisma CLIDocker Machine 处理 Docker 环境适合场景想完全掌控环境、排查底层问题大多数用户省时省力集群凭据需手动从服务器复制clusterSecret到本地流程自动化程度更高选择哪种方式取决于你对环境控制粒度的需求如果你需要精确理解每一个安装步骤、或需要对 Droplet 环境做额外定制手动部署本文是合适的选择否则建议使用 Docker Machine 自动化流程。总结本文基于 Digital Ocean (manual).md) 文档完整走通了在 Digital Ocean 上手动部署 Prisma 服务器并远程部署服务的全流程创建 Droplet选择 Ubuntu 镜像、标准规格推荐 10 美元/月 1 GB、就近区域并配置 SSH 密钥安装环境SSH 连接后依次安装 Docker、Docker Compose、Node.js 与 Prisma CLI启动并验证集群prisma local start拉起集群通过docker ps、prisma cluster list与浏览器访问/cluster三重验证配置远程集群从服务器复制clusterSecret到本地~/.prisma/config.yml新增do-cluster条目部署服务prisma initprisma deploy选择新集群得到可用的 HTTP 与 WebSocket GraphQL 端点。需要再次提醒的是本方案不包含备份与主动故障转移等生产级特性如需支撑线上流量应在理解本流程的基础上叠加高可用与数据备份方案。相关命令与配置的底层实现可继续深入阅读 Cluster.ts 与 Environment.ts 源码。【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
