实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

在 Google Cloud 上构建网站:实验室挑战赛

实验 25 分钟 universal_currency_alt 5 个点数 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP319

Google Cloud 自学实验的徽标

简介

在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。

在您参加实验室挑战赛期间,我们不会再教授新的 Google Cloud 概念知识。您需要拓展所学的技能,例如通过更改默认值和查看并研究错误消息来更正您自己所犯的错误。

要想获得满分,您必须在该时间段内成功完成所有任务!

我们建议已报名参加在 Google Cloud 上构建网站课程的学员参加本实验室挑战赛。准备好接受挑战了吗?

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

挑战场景

您刚在 FancyStore, Inc. 谋得新职。

当下任务是将公司现有的单体式电子商务网站分解成一系列逻辑上分离的微服务。现有的单体式应用代码存放在 GitHub 仓库中,您需要将该应用容器化,继而重构它。

您应该掌握了完成这些任务所需的技能和知识,所以我们不会提供分步指南。

上一支团队受够了单体式应用相关的各种问题,于是奔向了人生的旷野(他们真去经营薰衣草农场了),所以现在由您来牵头处理这项工作。您接下来的任务是拉取源代码,用它构建容器(有个农夫给您留下了 Dockerfile),然后把容器推送到 GKE。

您应该先构建、部署和测试该单体式应用,以便确保源代码是健全的。然后,再把组成该应用的各项服务分解为独立的微服务加以部署。

您应遵循的一些 FancyStore, Inc. 标准如下:

  • 中创建集群。
  • 命名时通常采用 <团队>-<资源> 格式,例如,可以将实例命名为 fancystore-orderservice1
  • 分配经济实惠的资源容量。各个项目会受到监控,过度使用资源会导致其所属的项目终止。
  • 除非另有指示,否则请使用 e2-medium 机器类型。

您的挑战

您刚坐在办公桌前并打开新笔记本电脑,就收到了完成以下任务的请求。祝您好运!

任务 1. 下载单体式应用代码并构建容器

  1. 登录新项目并激活 Cloud Shell。

  2. 首先,您需要克隆自己团队的 Git 仓库。项目的根目录中有一个 setup.sh 脚本,您需要运行该脚本来构建单体式应用容器。

  3. 运行 setup.sh 脚本后,运行以下命令,以便确保 Cloud Shell 中的 nodeJS 是最新版本:

nvm install --lts

有几个不同的项目可以构建和推送。

  1. 将单体式应用 build(为方便起见,存放在 monolith 目录中)推送到 Artifact Registry。~/monotlith-to-microservices/monolith 文件夹中有一个 Dockerfile,可用于构建应用容器。

  2. 您需要运行 Cloud Build(在上述 monolith 文件夹中)来构建容器,然后将其推送到 Artifact Registry。

  3. 按如下方式为该制品命名:

    • 仓库:gcr.io/${GOOGLE_CLOUD_PROJECT}
    • 映像名称:
    • 映像版本:1.0.0

点击检查我的进度以验证是否完成了以下目标: 下载单体式应用代码并构建容器

任务 2. 创建 Kubernetes 集群并部署应用

至此,您已经创建了映像并将其推送到了 Artifact Registry 中,接下来需要创建一个集群来部署该映像。

您已经得知要将所有资源部署在 可用区中,因此首先需要为其创建一个 GKE 集群。首先,请创建一个包含 3 个节点的集群。

  1. 按如下方式创建集群:

    • 集群名称:
    • 区域:
    • 节点数:3

现在,您已经构建好映像,集群也已开始运行,接下来就要部署应用了。

您需要将构建的映像部署到集群中。这样您的应用就可以正常运行了,但在您向外界公开该应用之前,它是无法访问的。您的团队告诉您,该应用在端口 8080 上运行,但您需要在更方便用户使用的端口 80 上公开该应用。

  1. 按如下方式创建并公开您的部署实例:

    • 集群名称:
    • 容器名称:
    • 容器版本:1.0.0
    • 应用端口:8080
    • 外部可访问的端口:80
注意:本实验中简化了服务的公开方式。一般要使用 API 网关来保证公共端点的安全。如需详细了解最佳实践,请参阅微服务最佳实践指南
  1. 记下在公开的部署操作中所分配的 IP 地址。现在,您应该可以从浏览器中访问此 IP 地址了!

您应该会看到以下内容:

Fancy Store 网页

点击检查我的进度以验证是否完成了以下目标: 创建 Kubernetes 集群并部署应用

现在,您已经能够构建和部署 Fancy Store 单体式应用了,接下来就要把它分解为微服务!

从单体式应用向微服务迁移

现在,GKE 上已经在运行现有的单体式网站,接下来就可以开始将每项服务分解为微服务了。具体分解哪些服务,通常需要提前做好计划,一般围绕应用的具体部分(如业务领域)进行拆分。

在这项挑战赛中,我们不妨把节奏放快一些,假设您已成功将单体式应用分解为一系列微服务,分别是:Orders(订单)、Products(商品)和 Frontend(前端)。代码已准备就绪,现在您要开始部署服务。

任务 3. 创建新的微服务

您需要把 3 项服务拆分到各自的容器中。由于您要将所有服务移到容器中,因此需要跟踪每项服务的以下信息:

  • 服务的根文件夹(构建容器的地方)
  • 要将容器上传到的仓库
  • 容器制品的名称和版本

创建微服务的容器化版本

需要容器化的一组服务如下所示。

  1. 导航到下面提及的源代码根目录,将创建的制品连同所示的元数据一起上传到 Artifact Registry:

Orders 微服务

服务根文件夹:~/monolith-to-microservices/microservices/src/orders

GCR 仓库:gcr.io/${GOOGLE_CLOUD_PROJECT}

映像名称:

映像版本:1.0.0

Products 微服务

服务根文件夹:~/monolith-to-microservices/microservices/src/products

GCR 仓库:gcr.io/${GOOGLE_CLOUD_PROJECT}

映像名称:

映像版本:1.0.0

  1. 将这些微服务容器化并将其映像上传到 Artifact Registry 之后,就要部署和公开这些服务了。

点击检查我的进度以验证是否完成了以下目标: 创建 Orders 和 Products 微服务的容器化版本

任务 4. 部署新的微服务

按照部署 单体式应用的流程来部署这些新容器。请注意,这些服务将监听不同的端口,因此请记录下表中的端口映射信息。

  1. 按如下方式创建并公开您的部署实例:

Orders 微服务

集群名称:

容器名称:

容器版本:1.0.0

应用端口:8081

外部可访问的端口:80

Products 微服务

集群名称:

容器名称:

容器版本:1.0.0

应用端口:8082

外部可访问的端口:80

注意:请记下 Orders 和 Products 服务公开后的 IP 地址,后续步骤中需要用到它们。
  1. 您可以在浏览器中访问以下网址,验证部署是否成功以及服务是否已公开:

    • http://ORDERS_EXTERNAL_IP/api/orders
    • http://PRODUCTS_EXTERNAL_IP/api/products

如果部署成功,您应该会看到每项服务都返回一个 JSON 字符串。

点击检查我的进度以验证是否完成了以下目标: 部署新的微服务

任务 5. 配置并部署 Frontend 微服务

现在,您已经提取出 Orders 和 Products 微服务,接下来需要配置 Frontend 服务以指向它们,并部署该服务。

重新配置 Frontend

  1. 使用 nano 编辑器将本地网址替换为新 Products 微服务的 IP 地址:
cd ~/monolith-to-microservices/react-app nano .env

编辑器打开后,您的文件应如下所示。

输出:

REACT_APP_ORDERS_URL=http://localhost:8081/api/orders REACT_APP_PRODUCTS_URL=http://localhost:8082/api/products
  1. REACT_APP_PRODUCTS_URL 替换为新格式,同时换上 Orders 和 Products 微服务的 IP 地址,使其如下所示:
REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=http://<PRODUCTS_IP_ADDRESS>/api/products
  1. 按 CTRL+O,再按 ENTER 键,然后按 CTRL+X,即可在 nano 编辑器中保存文件。

  2. 现在运行以下命令来重新构建前端应用,以便后续将其容器化:

npm run build

任务 6. 创建 Frontend 微服务的容器化版本

Orders 和 Products 微服务现已完成容器化并部署完毕,Frontend 服务也经过配置指向了它们,最后一步就是容器化和部署 Frontend。

请按照如下说明,使用 Cloud Build 将 Frontend 服务的内容打包并推送到 Artifact Registry:

  • 服务根文件夹: ~/monolith-to-microservices/microservices/src/frontend
  • 仓库:gcr.io/${GOOGLE_CLOUD_PROJECT}
  • 映像名称:
  • 映像版本:1.0.0

此过程可能需要几分钟时间,请耐心等待。

点击检查我的进度以验证是否完成了以下目标: 创建 Frontend 微服务的容器化版本

任务 7. 部署 Frontend 微服务

按照部署 Orders 和 Products 微服务的流程部署此容器。

  1. 按如下方式创建并公开您的部署实例:

    • 集群名称:
    • 容器名称:
    • 容器版本:1.0.0
    • 应用端口:8080
    • 外部可访问的端口:80
  2. 您可以在浏览器中访问 Frontend 服务的 IP 地址,验证部署是否成功以及微服务是否已正确公开。

此时您应该会看到 Fancy Store 首页,其中包含 Products 和 Orders 页面的链接,它们现在由新的微服务提供支持。

点击检查我的进度以验证是否完成了以下目标: 部署 Frontend 微服务

恭喜!

Build_a_Website_on_Google_Cloud_Skill_WBG.png

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

本手册的最后更新时间:2026 年 3 月 10 日

本实验的最后测试时间:2026 年 3 月 10 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。