介绍
本文提供了将GeOlocation API部署到您自己的Google Cloud Project中的分步指南。本文将重点侧重于使用自动化工具和脚本在将FastApi Python Web应用程序部署到Google Cloud的Cloud Run(无服务器容器平台)中。
。有关所使用的设计和技术堆栈的更多信息,请参阅构建地理位置API。在本文中,我们将专注于部署。
作为一个概述,该项目具有五个不同的组件:
- 处理Web请求和查询IP地址的FastAPI应用程序从MaxMind Geolite2数据库中检索地理位置数据。
- 一个自动下载Geolite2数据库并构建轻量级Docker Image的过程。
-
cloudbuild.yaml
文件定义了构建管道的必要步骤,其中包括构建docker映像并部署新的修订云运行。 - CDKTF(用于Terraform的云开发套件)应用程序,该应用程序部署了地理位置API所需的云基础架构。
- 一个设置云外壳VM环境的
deploy.sh
shell脚本。
出于部署的目的,我们只会执行deploy.sh
Shell脚本,该脚本将负责设置我们的环境并部署我们的CDKTF应用程序。但是,在运行脚本之前,我们需要先手动做一些事情。请继续阅读以了解更多信息。
随附YouTube视频
如果您想观看视频而不是阅读一篇长文章,这是YouTube视频,伴随着此内容。
现场演示
探索在我的Google Cloud平台上托管的地理位置API的实时演示,作为云运行修订版on this page运行。输入有效的公共IP地址,无论是IPv4还是IPv6,以检索其详细信息。如果不提供输入,API将返回您自己的IP地址的详细信息。
部署步骤概述
- 我们将从获得MaxMind开发人员帐户开始以获取许可证密钥。该密钥将在我们的
Dockerfile
中使用以下载最新的Geolite2数据库。 - 我们将登录到我们的Google云平台创建一个项目并使用Google Cloud Shell部署所需的组件。
- 我们将分配GitHub存储库以能够连接到云构建触发器。
- 我们将把我们的github存储库连接到云构建触发器以将其用作源。
- 我们将使用
.env
文件自定义和配置我们的环境。 - 我们将使用
deploy.sh
Shell脚本准备Google Cloud Shell Console VM并部署我们的FastAPI应用程序。
让我们首先浏览此列表中的每个项目,一次。
创建一个MaxMind开发人员帐户
要在我们的容器中设置自动数据库更新,我们需要创建一个MaxMind帐户并获得许可证密钥。为此:
- 访问MaxMind网站和sign up以获取一个帐户以访问Geolite2数据库。
- 检查您的电子邮件中是否有验证链接。单击链接为您的帐户设置密码。
- 登录到您的MaxMind帐户。您将通过电子邮件收到验证代码。复制并粘贴验证代码以完成身份验证过程。
- 在您的帐户仪表板上,单击左侧栏中的“ 管理许可密钥”。
- 单击“ 创建新许可证密钥”,然后输入您的许可证密钥的名称。
- 单击“ 创建”以生成许可证密钥。
我们很快就需要保持许可键窗口。
创建 Google Cloud Project
我们开始之前,请确保您已登录到Google Cloud帐户并拥有有效的计费帐户。您可能会因使用Google Cloud Services服务而受到费用,但是Google Cloud的免费层足以测试我们的部署而不会产生任何费用。
免费层包含一组Google Cloud Services,您可以免费使用,并具有一定的使用限制。如果您超出了使用限制,则将为额外的用法收取费用。
免费层是尝试Google Cloud Services并测试我们的部署而不会产生任何费用的好方法。
如果您不想继续使用该服务,我们的CDKTF实现使仅在一个命令中删除已部署的资源非常容易。
- 转到Google Cloud Console。
- 单击 按钮中的签名。
- 输入您的Google帐户电子邮件地址和密码。
- 单击 按钮中的签名。
登录后,您将被带到Google Cloud Platform控制台。从这里,您可以开始使用Google Cloud Services。
创建一个新的Google Cloud项目,用于部署我们的地理位置服务,请按照以下步骤:
- 单击选择项目按钮位于GCP控制台的左上角。
- 单击“ 新项目”以创建一个新项目。
- 在“ 项目名称”字段中,输入“ geolocation ”。
- 记下Google Cloud分配的随机项目ID。这是在全球范围内必须是唯一的,因此Google云将随机数分配给名称。
- 单击“ 创建。”
- 单击选择项目按钮,然后选择新创建的项目以使其成为活动项目。
您还可以通过单击位于GCP控制台左上角的选择项目下拉按钮,然后选择项目。
要了解有关在Google Cloud平台上创建项目的更多信息,请遵循此guide。
叉子和克隆git存储库
我们需要分配Git repository,因为云构建仅允许从我们自己的GitHub帐户连接到存储库,即使存储库是公开的。分叉存储库会在我们自己的帐户中创建它的副本,然后我们可以克隆到我们的云外壳环境中。克隆存储库后,我们可以将其连接到我们的云构建触发器。
这是对所涉及步骤的更详细说明:
- 转到GitHub repository。
- 单击页面右上角的 fork 按钮。
- 这将在我们自己的github帐户中创建存储库的副本。
- 一旦存储库分配了,请单击 clone 按钮。
- 在带有HTTPS的克隆中
- 在我们的云外壳环境中打开终端窗口。
- 键入以下命令以克隆存储库:
git clone <URL>
用我们在步骤5中复制的URL替换<URL>
。
存储库将被克隆到我们的云外壳环境中。
连接git存储库
在此步骤中,我们对github存储库进行身份验证并将其连接到CloudBuild Trigger。
要将我们的github存储库连接到云构建,请按照以下步骤:
- 转到 Repositories 页面 Google Cloud Console 。 。
- 滚动到页面底部,然后单击连接存储库。
- 将区域留作作为全局,并确保选择 github 。
- 单击继续。
- 如果您尚未登录到GitHub,则会提示您这样做。
- 登录后,请单击 googlecloudbuild授权Google Cloud Build 。
- 单击连接连接您的存储库。
尚未创建触发器。我们将使用CDKTF进行。
创建.env
文件
我们的CDKTF堆栈取决于.env
文件的值以设置我们的基础架构
要设置.env
文件,请按照以下步骤:
- 单击激活页面顶部的云外壳按钮。
- 等待云外壳会话打开。
- 单击“ 打开编辑器”打开文件编辑器。
- 复制
example_env.txt
文件的内容。 - 创建一个新文件并粘贴复制的内容。
- 将文件作为
.env
保存在克隆存储库的根目录中。 - 找到Google分配给您的项目ID的随机数字ID并将其设置为
RANDOM_ID
变量。 - 将您首选的Google Cloud区域设置为可变
REGION_PREFERRED
。 - 将您的分叉git存储库的URL设置为可变
GIT_SOURCE_REPOSITORY
。 - 如果您将从前端使用此API,请相应地设置
FASTAPI_CORS_ORIGINS
变量。 - 查找MaxMind帐户的帐户ID和许可证密钥,并分别为
GEOIPUPDATE_ACCOUNT_ID
和GEOIPUPDATE_LICENSE_KEY
环境变量分配这些值。
请确保在相等符号或变量值之后删除任何不需要的空间。
我们的.env
文件现在已配置,我们准备部署我们的云运行服务。
运行deploy.sh
脚本
在最后一步中,我们执行了deploy.sh
脚本。为了详细了解我们的脚本的作用,请参阅构建GeOlocation API视频。从部署的角度来看,在新鲜和干净的云外壳环境中,我们的脚本将首先准备我们的云外壳VM,然后部署我们的CDKTF堆栈。
最初开始从事该项目时,我开始记录撰写详细指南的步骤,以设置云外壳VM以部署我们的微服务。但是,我意识到,这项工作的大部分都可以轻松自动化,并且简单的外壳脚本对参与的每个人都更加有益和用户友好。
因此,我继续创建了一个外壳脚本,该脚本处理我们的基础CDKTF堆栈的设置和部署。然后,我们必须手动触发构建,然后才能部署第三个也是最终的CDKTF堆栈才能部署我们的云运行服务。
在此版本的脚本中,我使用pyenv
在全球设置Python版本,并且在特定时间点上有几个手动步骤要按确切顺序采取。这使得很难理解和故障排除。因此,我花了更多时间来重构和使脚本更好,结果是完全自动化的端部部署我们的微服务地理位置API。
要执行我们的脚本,请确保您在项目root Directory中并运行./deploy.sh
脚本。
# make sure we are in the right directory
cd ~/geolocation
./deploy.sh
如果提示,请选择Authorize
继续。
现在,坐下来观看我们的云外壳VM设置,我们的云运行服务在云运行中构建,测试和部署。
这个脚本实际上做了很多工作,要了解更多,请观看我的视频构建GeOlocation API,我可以在其中浏览代码并深入研究各种工具如何一起工作,以及该外壳脚本如何将所有内容整合在一起。设置VM,构建容器映像然后部署云运行修订大约需要12分钟。
。终点线:完成部署旅程
在此阶段,我们应该为我们的地理位置服务进行运行的云运行修订。您可以检查我们部署的云运行服务here的状态。单击“服务链接”以打开云运行页面并访问服务托管的URL。
此外,请检查是否为每周配置的时间表触发我们的云构建here。因此,每周,我们的云构建都会通过更新的MaxMind Geolite2数据库触发并重建图像,并部署新的云运行修订版。
在这里需要做很多工作,但是从现在开始,自动化将接管。现在,我们可以在需要地理位置信息的任何数量的应用程序中使用此API。我们不必担心将数据库保持最新或服务的可扩展性。设计由设计运行的云将根据需求根据需求旋转尽可能多的容器,当没有需求时,云运行将终止所有容器并将服务缩小到零。我们仅在集装箱服务请求的时间内被收费。
感谢您的阅读。希望这个对你有帮助。我知道有很多可以改进的地方。您的反馈和建议对我来说非常重要。请花点时间发表评论。