🚀 部署我们的服务器
让我们使用 Railway 让我们的GraphQL 服务器在生产中启动并运行!
Railway是一个云服务平台,使我们能够部署我们的应用而不必担心具体的基础设施。本教程使用 Railway,因为它可以同步到 GitHub 存储库,且它有一个免费层,使我们能够在没有信用卡的情况下运行我们的应用!
我们可以单击主页上的 登录来开始使用 Railway。您可以选择使用您的电子邮件登录,或直接使用您的 GitHub 帐户登录。我们将使用我们的 GitHub 帐户进行身份验证,并为自己节省一些额外的步骤。
您可能还需要完成验证步骤,以便 Railway 能够访问您的帐户。
在仪表盘中,让我们单击 新建项目。
然后选择 从 GitHub 存储库部署。
接下来,我们将选择 配置 GitHub 应用,然后按照 GitHub 上的说明对 Railway 进行授权。现在我们可以访问我们的存储库了!
让我们选择我们已分叉的仓库。但在部署之前,我们需要设置一些环境变量。
🌲 添加环境变量
让我们点击 添加变量。
我们将使用 原始编辑器 同时处理这些 变量。
这将打开一个模态窗口,我们可以在其中粘贴我们所有便捷的 变量。
还记得在创建 图形 时 Studio 为我们提供的环境变量吗?让我们将它们派上用场!
回到 Studio 中,我们将复制 图形 的所有三个 变量。确保切换图标的眼睛以查看 APOLLO_KEY
变量,之后再复制 - 毕竟,我们需要真实的值!
让我们跳回到 Railway 并将那些 变量 粘贴到 ENV 面板中。然后,单击 更新变量。
现在,如果我们跳回到 部署 标签页,我们将看到 Railway 触发了我们应用程序的新部署。只需片刻,我们应该就能看到它起作用了!
接下来,我们希望在互联网上的公共 URL 上 查询 我们的服务器。为此,我们需要生成一个域名。前往你的应用 设置 标签页,然后单击域名标题下方的 生成域名 按钮。
这将自动创建一个生产 URL,我们将在稍后的客户端应用中使用它。
让我们点击生成的 URL,咦?
我们需要对我们的代码进行一个更改。Railway 需要我们的服务器在由幕后设置的 PORT
环境变量指定的一个端口上运行。
🔌 设置 PORT
让我们打开 server
代码库。在 src
文件夹中,打开 index.js
文件。
现在,默认情况下,Apollo Server 在端口 4000
上侦听。我们需要通过在 listen
方法中指定 options
对象来更新它。
await server.listen({ port: process.env.PORT || 4000 });
将 port
属性设置为 process.env.PORT
(其中 PORT
全部大写)。为了确保我们的服务器仍可在我们自己的机器上本地工作,我们将添加一个“或”(||
)并指定 4000
作为我们的端口号。
就是这样!让我们务必添加并提交这些更改,并将它们推送到我们的 GitHub 代码库。
编辑以下代码,以配置 Apollo Server 侦听由 process.env.PORT
指定的端口,如果不存在,则侦听硬编码端口号 4000
。
回到 Railway,我们应该看到新的提交触发另一次部署。
让我们再试一次。返回生成的 URL,我们看到了 Apollo Server 在生产环境中的着陆页!太棒了! 🎉🎉
但这个页面看起来与我们在本地运行服务器时通常看到的页面稍有不同。
我们无法通过 Apollo Sandbox查询我们的服务器NODE_ENV
环境变量自动设置为 production
, 这会提醒我们的 Apollo 服务器也将其本身切换为生产, 并自动禁用 内省。
🤔 什么是 GraphQL 内省?
内省是 GraphQL的一项功能,它使我们能够 查询一个 GraphQL 服务器以获取有关底层模式的信息。这包括类型、字段和字段级别的描述等数据。类似 Apollo Sandbox这样的工具使用内省来构建和运行查询。
问题在于在生产中拥有 内省 可能是一个重大的安全问题。它向全世界展示了所有 图形的结构以及我们可以对其做什么。在大多数情况下,这不是我们想要的!这就是为什么 Apollo 服务器在生产环境中默认禁用 内省。
如果我们不能使用依赖introspection的工具来查询我们的服务器,该如何对其进行测试?嗯,感谢架构注册表,我们现在有了安全的方式来访问我们的图,并使用 Apollo Explorer 其上运行查询。
通过 Explorer 进行查询
让我们导航到 Explorer 中来测试tracksForHome
查询。
query GetTracks {tracksForHome {idtitlethumbnaillengthmodulesCountauthor {namephoto}}}
您首次尝试运行查询时,Explorer 会提示您输入生产服务器的 URL。这是我们在 Railway 中生成的域名 URL。
我们发现,tracksForHome
查询仍然有效!
太棒了,我们的服务器在生产环境中运行起来了! 🎉接下来,让我们来处理客户端应用。
分享您对本课程的疑问和评论
您的反馈有助于我们进行改进!如果您遇到了难题或感到困惑,请告诉我们,我们会为您提供帮助。所有评论均为公开的,必须遵守 Apollo 行为准则。请注意,已解决或得到处理的评论可能会被删除。
在下方发帖,您需要一个 GitHub 帐户。没有帐户? 改在我们的 Odyssey 论坛发帖。