本教程介绍如何配置 Cloud Storage 存储桶以托管域名归您所有的静态网站。静态网页可使用 HTML、CSS 和 JavaScript 等客户端技术。静态网页不能包含动态内容,例如 PHP 等服务器端脚本。
由于 Cloud Storage 本身不支持将自定义网域与 HTTPS 搭配使用,因此本教程将 Cloud Storage 与外部应用负载均衡器搭配使用,以通过 HTTPS 从自定义网域传送内容。如需了解通过 HTTPS 从自定义网域传送内容的更多方式,请参阅 HTTPS 传送问题排查。您还可以使用 Cloud Storage 来通过 HTTP 传送自定义网域内容,这不需要负载均衡器。
如需查看有关静态网页的示例和提示(包括如何为动态网站托管静态资源),请参阅静态网站页面。
目标
本教程将介绍如何执行以下操作:- 上传和共享您的网站的文件。
- 设置负载均衡器和 SSL 证书。
- 将负载均衡器连接到您的存储桶。
- 使用
A
记录将您的网域指向负载均衡器。 - 测试网站。
费用
本教程使用 Google Cloud 的以下收费组件:
如需详细了解托管静态网站时可能产生的费用,请参阅监控费用提示。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 为您的项目启用 Compute Engine API。
- 具有以下 Identity and Access Management 角色:Storage Admin 和 Compute Network Admin。
- 准备一个归您所有或管理的网域。如果您没有现成可用的域名,可以通过多项服务(例如 Cloud Domains)注册新网域。
本教程使用的网域是
example.com
。 - 准备一些您要传送的网站文件。如果您至少有一个索引页面 (
index.html
) 和 404 页面 (404.html
),那么最适合使用本教程。 - 拥有一个 Cloud Storage 存储桶,用于存储您要传送的文件。如果您目前没有存储桶,请创建一个存储桶。
- (可选)如果您希望 Cloud Storage 存储桶与您的网域同名,则必须确认您是要使用的网域的所有者或管理员。确保您所验证的网域是顶级网域(如
example.com
),而不是子网域(如www.example.com
)。 如果您的网域是通过 Cloud Domains 购买的,那么系统会自动进行验证。
上传网站的文件
将您希望网站传送的文件添加到您的存储桶中:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您创建的存储桶的名称。
此时会打开“存储桶详情”页面,其中“对象”标签页处于选中状态。
点击上传文件按钮。
在文件对话框中,浏览至所需文件并将其选中。
上传完成后,您应该会看到文件名和存储桶中显示的文件信息。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用 gcloud storage cp
命令将文件复制到您的存储桶。
比方说,如需将文件 index.html
从其当前位置 Desktop
复制到存储桶 my-static-assets
,请使用以下命令:
gcloud storage cp Desktop/index.html gs://my-static-assets
如果成功,则响应类似如下示例:
Completed files 1/1 | 164.3kiB/164.3kiB
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
以下示例会上传单个对象:
以下示例会同时上传多个对象:
以下示例并发上传具有公共前缀的所有对象:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
以下示例会上传单个对象:
以下示例会同时上传多个对象:
以下示例并发上传具有公共前缀的所有对象:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
以下示例会上传单个对象:
以下示例会同时上传多个对象:
以下示例并发上传具有公共前缀的所有对象:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Terraform
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
通过POST
Object 请求调用 JSON API。对于上传到my-static-assets
存储桶的index.html
文件:curl -X POST --data-binary @index.html \ -H "Content-Type: text/html" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/upload/storage/v1/b/my-static-assets/o?uploadType=media&name=index.html"
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
通过PUT
Object 请求调用 XML API。对于上传到my-static-assets
存储桶的index.html
文件:curl -X PUT --data-binary @index.html \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: text/html" \ "https://storage.googleapis.com/my-static-assets/index.html"
共享您的文件
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要设为公开的存储桶的名称。
选择页面顶部附近的权限标签。
如果公开访问窗格显示非公开,请点击标有移除禁止公开访问的按钮,然后在出现的对话框中点击确认。
点击 add_box 授予访问权限按钮。
此时会显示“添加主账号”对话框。
在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单中,选择 Cloud Storage 子菜单,然后点击 Storage Object Viewer 选项。
点击保存。
点击允许公开访问。
对象群组被公开共享后,“公共访问权限”列中会针对每个对象显示一个链接图标。您可以点击此图标来获取相应对象的网址。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用 buckets add-iam-policy-binding
命令:
gcloud storage buckets add-iam-policy-binding gs://my-static-assets --member=allUsers --role=roles/storage.objectViewer
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Terraform
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL
通过PUT
Bucket 请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的 JSON 文件的路径。BUCKET_NAME
是您要公开其对象的存储桶的名称。例如my-static-assets
。
XML API
XML API 不支持将存储桶中的所有对象设为可供公开读取。请改用 Google Cloud 控制台或 gcloud storage
,或者为每个对象设置 ACL。 请注意,如需为每个对象设置 ACL,您必须将存储桶的访问权限控制模式切换为精细控制。
如果需要,您还可以将存储桶的某些部分设为可公开访问。
如果访问者向网址请求非公开或不存在的文件,他们会收到 http 403
响应代码。如需了解如何添加使用 http 404
响应代码的错误页面,请参阅下一部分。
推荐:分配专用页面
您可以分配索引页面后缀和自定义错误页面,称为专用页面。您可以选择分配任何一项,但如果您不分配索引页面后缀并且上传相应的索引页面,则系统将向访问您的顶级网站的用户传送包含存储桶中公共对象列表的 XML 文档树。
如需详细了解专用页面的行为,请参阅专用页面。
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,找到您所创建的存储桶。
点击与存储桶关联的 Bucket overflow 菜单 (more_vert),然后选择修改网站配置。
在网站配置对话框中,指定主页面和错误页面。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用带有 --web-main-page-suffix
和 --web-error-page
标志的 buckets update
命令。
在以下示例中,MainPageSuffix
设置为 index.html
,NotFoundPage
设置为 404.html
:
gcloud storage buckets update gs://my-static-assets --web-main-page-suffix=index.html --web-error-page=404.html
如果成功,此命令会返回以下内容:
Updating gs://www.example.com/... Completed 1
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个 JSON 文件,以将
website
对象中的mainPageSuffix
和notFoundPage
属性设置为所需页面。在以下示例中,
mainPageSuffix
设置为index.html
,notFoundPage
设置为404.html
:{ "website":{ "mainPageSuffix": "index.html", "notFoundPage": "404.html" } }
使用
cURL
通过PATCH
Bucket 请求调用 JSON API。对于存储桶my-static-assets
:curl -X PATCH --data-binary @web-config.json \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/my-static-assets"
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个 XML 文件,以将
WebsiteConfiguration
元素中的MainPageSuffix
和NotFoundPage
元素设置为所需页面。在以下示例中,
MainPageSuffix
设置为index.html
,NotFoundPage
设置为404.html
:<WebsiteConfiguration> <MainPageSuffix>index.html</MainPageSuffix> <NotFoundPage>404.html</NotFoundPage> </WebsiteConfiguration>
使用
cURL
,通过PUT
Bucket 请求和websiteConfig
查询字符串参数调用 XML API。对于my-static-assets
:curl -X PUT --data-binary @web-config.xml \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/my-static-assets?websiteConfig
设置负载均衡器和 SSL 证书
Cloud Storage 本身不支持使用 HTTPS 的自定义网域,因此您还需要设置一份 SSL 证书(该证书会附加到 HTTPS 负载均衡器),以通过 HTTPS 传送您的网站。本部分介绍了如何将您的存储桶添加到负载均衡器的后端,以及如何将新的 Google 管理的 SSL 证书添加到负载均衡器的前端。
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置。
系统会显示负载均衡器的配置窗口。
基本配置
在继续配置之前,请输入负载均衡器名称,例如 example-lb
。
配置前端
本部分介绍了如何配置 HTTPS 协议和创建 SSL 证书。您还可以选择现有证书或上传自行管理的 SSL 证书。
- 点击前端配置。
- (可选)为您的前端配置指定一个名称。
- 在协议部分,选择 HTTPS(包括 HTTP/2)。
- 在 IP 版本部分,选择 IPv4。如果您希望使用 IPv6,请参阅 IPv6 终结了解详情。
对于 IP 地址字段:
- 在下拉列表中,点击创建 IP 地址。
- 在预留新的静态 IP 地址弹出式窗口中,输入一个名称(例如
example-ip
)作为 IP 地址的名称。 - 点击预留。
在端口中,选择 443。
在证书字段下拉菜单中,选择创建新证书。随即将在一个面板中显示证书创建表单。配置以下内容:
- 为您的证书指定一个名称,例如
example-ssl
。 - 在创建模式部分,选择创建 Google 管理的证书。
- 在网域部分,输入您的网站名称,例如
www.example.com
。如果您希望通过其他网域(例如根网域example.com
)传送内容,请按 Enter 键将这些网域添加到其他行。每个证书的网域上限为 100 个。
- 为您的证书指定一个名称,例如
点击创建。
(可选)如果您希望 Google Cloud 自动设置部分 HTTP 负载均衡器来重定向 HTTP 流量,请选中启用从 HTTP 到 HTTPS 的重定向旁边的复选框。
点击完成。
配置后端
- 点击后端配置。
- 在后端服务和后端存储桶下拉列表中,点击创建后端存储桶。
- 选择后端存储桶名称,例如
example-bucket
。您选择的名称可能与您之前创建的存储桶的名称不同。 - 点击 Cloud Storage 存储桶字段中的浏览。
- 选择您之前创建的
my-static-assets
存储桶,然后点击选择。 - (可选)如果要使用 Cloud CDN,请选中启用 Cloud CDN 对应的复选框,并根据需要配置 Cloud CDN。请注意,Cloud CDN 可能会产生额外费用。
- 点击创建。
配置路由规则
路由规则是外部应用负载均衡器的网址映射的组件。在本教程中,您应该跳过负载均衡器配置的这一部分,因为它会自动设置为使用您刚刚配置的后端。
检查配置
- 点击检查并最终确定。
- 检查前端、路由规则和后端。
- 点击创建。
您可能需要等待几分钟才能创建负载均衡器。
将您的网域连接到负载均衡器
创建负载均衡器后,点击负载均衡器的名称:example-lb
。请注意与负载均衡器关联的 IP 地址:例如 30.90.80.100
。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A
记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A
记录,所有网域均指向负载均衡器的 IP 地址。例如,为 www.example.com
和 example.com
创建 A
记录:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如需详细了解如何将网域连接到负载均衡器,请参阅排查网域状态问题。
推荐:监控 SSL 证书状态
Google Cloud 最长可能需要 60-90 分钟来预配证书并通过负载均衡器提供网站。如需监控您的证书状态,请执行以下操作:
控制台
- 转到 Google Cloud 控制台中的“负载均衡”页面。
进入“负载均衡” - 点击负载均衡器的名称:
example-lb
。 - 点击与负载均衡器关联的 SSL 证书的名称:
example-ssl
。 - 状态和网域状态行显示了证书状态。两行都必须处于活跃状态,才能使证书对您的网站有效。
命令行
如需检查证书状态,请运行以下命令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(name,managed.status)"
如需检查网域状态,请运行以下命令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.domainStatus)"
如需详细了解证书状态,请参阅排查 SSL 证书问题。
测试网站
在 SSL 证书生效后,请转到 https://www.example.com/test.html
(其中 test.html
是一个存储在用作后端的存储桶中的对象)验证是否从存储桶传送内容。如果您设置了 MainPageSuffix
属性,则 https://www.example.com
会转到 index.html
。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除负载均衡器和存储桶
如果您不想删除整个项目,请删除为教程创建的负载均衡器和存储桶:
- 转到 Google Cloud 控制台中的“负载均衡”页面。
进入“负载均衡” - 选中
example-lb
旁边的复选框。 - 点击删除。
- (可选)选中您要删除的资源以及负载均衡器(例如
my-static-assets
存储桶或example-ssl
SSL 证书)旁边的复选框。 - 点击删除负载均衡器或删除负载均衡器和所选的资源。
释放预留 IP 地址
如需删除用于教程的预留 IP 地址,请执行以下操作:
在 Google Cloud 控制台中,转到外部 IP 地址页面。
选中
example-ip
旁边的复选框。点击释放静态地址。
在确认窗口中,点击删除。
后续步骤
- 查看关于使用存储桶托管静态网站的示例和提示。
- 了解如何排查托管静态网站问题。
- 了解如何托管动态网站的静态资产。
- 了解其他 Google Cloud Web 传送解决方案。
自行试用
如果您是 Google Cloud 新手,请创建一个账号来评估 Cloud Storage 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
免费试用 Cloud Storage