本文属使用Prisma构建GraphQL服务系列。
当搞定了GraphQL服务端开发,且经过充分测试,那么接着需要部署上线。
本文中,我们来了解下如何使用Now CLI(Zeit团队的一个惊人的One-Click部署工具,支持windows、macos、linux)来部署您的GraphQL服务。
本文包括两部分:
- 基本使用:了解如何基于GraphQLnode-basic样板项目,使用
Now
进行简单直接部署。 - 高级使用:了解如何基于GraphQLnode-basic样板项目,使用
Now
环境变量进行部署。
安装Now桌面版
首先下载Now桌面版并登录。
(1) 浏览器打开https://zeit.co/download
,点击DOWNLOAD
按钮。
注意:桌面版Now包含Now CLI。
基本使用
GraphQL 服务起步
在本教程中,您将使用 node-basic
的GraphQL样板项目作为要部署的示例服务。访问此样板文件的最简单方法是使用GraphQL CLI中的graphql create
命令。
此样板项目基于graphql-yoga
——轻量级GraphQL服务器,基于Express.js
、apollo-server
和graphql-tools
。
(2) 如果您尚未安装GraphQL CLI,请先安装。然后,用graphql create
来启动你的GraphQL服务:
npm install -g graphql-cli
graphql create hello-basic --boilerplate node-basic
(3) 当提示您在何处(即向哪个群集cluster)部署您的Prisma服务时,请选择其中一个公共群集(public cluster)选项:prisma-eu1
或prisma-us1
。
上面的graphql create
命令创建一个名为hello-basic
的新目录,其中放置了GraphQL服务的源文件以及所属Prisma服务的配置。
使用now
部署服务
now
命令会上传源文件并调用在package.json
中定义的start
脚本来启动远程服务器,如下:
{
"scripts": {
"start": "dotenv -- nodemon -e ts,graphql -x ts-node src/index.ts",
"dev": "npm-run-all --parallel start playground",
"debug": "dotenv -- nodemon -e ts,graphql -x ts-node --inspect src/index.ts",
"playground": "graphql playground",
"build": "rimraf dist && tsc"
}
}
如此,具备部署GraphQL服务的基础。
(4) 切换到hello-basic目录并执行:
cd hello-basic
now
注意:如果这是您第一次使用
now
,它会要求您使用其服务进行身份验证。
如此,您的GraphQL服务现在已经部署并可在CLI输出的URL下使用。该URL看起来类似于https://hello-basic-__ID__.now.sh
(其中ID是now
生成的服务的随机ID)
高级使用:使用环境变量部署
GraphQL 服务起步
(5) 在终端中,导航到一个新目录并按照以下步骤下载node-advanced
样板:
graphql create hello-advanced --boilerplate node-advanced
(6) 像上面一样,当提示何处部署服务时,请选择prisma-eu1
或prisma-us1
。
该服务现在部署到开发群集。
使用now
部署服务
这次,您的服务需要设置特定的环境变量。如果您现在像上一节那样运行,部署将不会成功 - 或者说部署的Playground无法正常运行,因为它不知道应该运行哪个Prisma服务。因为这些信息现在是以环境变量的形式提供的。
这就是你可以now
命令的--dotenv
选项!其参数为.env
文件名称,.env
文件中指定了环境变量。
.env
文件是用于指定环境变量的约定/最佳实践。许多工具(例如Docker或其他部署工具)“明白”.env
文件——now
使用--dotenv标志亦如此。
(7) 只需切换到hello-advanced
目录并使用该参数调用即可:
cd hello-advanced
now --dotenv .env
如果您使用Docker在本地部署Prisma服务,则.env
文件将包含环境变量PRISMA_ENDPOINT
和PRISMA_CLUSTER
的本地引用(如http:// localhost:60000/hello-advanced/dev)。在这种情况下,你可以创建另一个.env
文件(如.env.prod),使PRISMA_ENDPOINT
和PRISMA_CLUSTER
设置适当的远程URL(当然,这需要你正确地部署Prisma的服务之前在网络上一些公共集群),然后在部署过程中参考:
now --dotenv .env
使用now
时,可以在这里找到一些关于如何处理环境变量和secrets
的文档。