本教程介绍如何配置 Cloud Storage 存储桶以托管域名归您所有的静态网站。静态网页可使用 HTML、CSS 和 JavaScript 等客户端技术。静态网页不能包含动态内容,例如 PHP 等服务器端脚本。
本教程介绍了如何通过 HTTP 传送内容。如需查看使用 HTTPS 的教程,请参阅托管静态网站。
如需查看有关静态网页的示例和提示(包括如何为动态网站托管静态资源),请参阅静态网站页面。
目标
在此教程中,您将学习以下操作:- 使用
CNAME
记录将您的网域指向 Cloud Storage。 - 创建一个与您的域名相关联的存储桶。
- 上传和共享您的网站的文件。
- 测试网站。
费用
本教程使用 Google Cloud 的以下收费组件:
- Cloud Storage
如需详细了解托管静态网站时可能产生的费用,请参阅关于监控存储费用的提示;如需详细了解 Cloud Storage 费用,请参阅价格页面。
准备工作
- 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.
- 准备一个归您所有或管理的网域。如果您没有现成可用的域名,可以通过多项服务(例如 Cloud Domains)注册新网域。
本教程使用的网域是
example.com
。 - 确认您是要使用的网域的所有者或管理员。确保您所验证的网域是顶级域名(如
example.com
),而不是子网域(如www.example.com
)。注意:如果您是要关联到存储桶的网域的所有者,则说明您过去可能已经执行此步骤。如果您的网域是通过 Cloud Domains 购买的,那么系统会自动进行验证。
将您的网域连接到 Cloud Storage
如需将您的网域连接到 Cloud Storage,请通过您的域名注册服务创建 CNAME
记录。CNAME
记录是一种 DNS 记录。它会将请求访问您域名中的网址的流量定向到您想要传送的资源(在本例中为 Cloud Storage 存储桶中的对象)。对于 www.example.com
,CNAME
记录可能包含以下信息:
NAME TYPE DATA www CNAME c.storage.googleapis.com.
如需详细了解 CNAME
重定向,请参阅适用于 CNAME
别名的 URI。
如需将您的网域连接到 Cloud Storage,请按如下所述操作:
创建一条指向
c.storage.googleapis.com.
的CNAME
记录。您使用的网域注册服务应具备供您管理网域(包括添加
CNAME
记录)的方法。例如,如果您使用 Cloud DNS,则可以在添加、修改和删除记录页面上找到添加资源记录的说明。
创建存储桶
使用与您为域名创建的 CNAME
相匹配的名称创建一个存储桶。
例如,如果您添加了从 example.com
的 www
子网域指向 c.storage.googleapis.com.
的 CNAME
记录,则用于创建名称为 www.example.com
的存储桶的 Google Cloud CLI 命令会类似于以下内容:
gcloud storage buckets create gs://www.example.com --location=US
如需查看如何使用不同工具创建存储桶的完整说明,请参阅创建存储桶。
上传网站的文件
要将您希望网站传送的文件添加到您的存储桶中,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您创建的存储桶的名称。
点击对象标签中的上传文件按钮。
在文件对话框中,浏览至所需文件并将其选中。
上传完成后,您应该会看到文件名和存储桶中显示的文件信息。
命令行
使用 gcloud storage cp
命令将文件复制到您的存储桶。
例如,要从文件 index.html
的当前位置 Desktop
复制此文件,请使用以下命令:
gcloud storage cp Desktop/index.html gs://www.example.com
如果成功,则响应类似如下示例:
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
Object 请求调用 JSON API。对于 www.example.com 的索引页面:curl -X POST --data-binary @index.html \ -H "Content-Type: text/html" \ -H "Authorization: $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/upload/storage/v1/b/www.example.com/o?uploadType=media&name=index.html"
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过PUT
Object 请求调用 XML API。对于 www.example.com 的索引页面:curl -X PUT --data-binary @index.html \ -H "Authorization: $(gcloud auth print-access-token)" \ -H "Content-Type: text/html" \ "https://storage.googleapis.com/www.example.com/index.html"
共享您的文件
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要设为公开的存储桶的名称。
选择页面顶部附近的权限标签。
如果公开访问窗格显示非公开,请点击标有移除禁止公开访问的按钮,然后在出现的对话框中点击确认。
点击 add_box 授予访问权限按钮。
此时会显示“添加主账号”对话框。
在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单中,选择 Cloud Storage 子菜单,然后点击 Storage Object Viewer 选项。
点击保存。
点击允许公开访问。
对象群组被公开共享后,“公共访问权限”列中会针对每个对象显示一个链接图标。您可以点击此图标来获取相应对象的网址。
命令行
使用 buckets add-iam-policy-binding
命令:
gcloud storage buckets add-iam-policy-binding gs://www.example.com --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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
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-bucket
。
XML API
XML API 不支持将存储桶中的所有对象设为可供公开读取。请改用 Google Cloud 控制台或 gcloud storage
。
如果需要,您还可以将存储桶的某些部分设为可公开访问。
如果访问者向网址请求非公开或不存在的文件,他们会收到 http 403
响应代码。如需了解如何添加使用 http 404
响应代码的错误页面,请参阅下一部分。
推荐:分配专用页面
您可以分配索引页面后缀(由 MainPageSuffix
属性控制)和自定义错误页面(由 NotFoundPage
属性控制)。分配这些页面都是可选的,但如果没有索引页面,则当用户访问您的顶级网站(例如 http://www.example.com
)时,将没有内容可以传送。如需了解详情,请参阅网站配置示例。
在以下示例中,MainPageSuffix
设置为 index.html
,NotFoundPage
设置为 404.html
:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,找到您所创建的存储桶。
点击与存储桶关联的 Bucket overflow 菜单 (more_vert),然后选择修改网站配置。
在网站配置对话框中,指定主页面和错误页面。
点击保存。
命令行
使用带有 --web-main-page-suffix
和 --web-error-page
标志的 buckets update
命令。
gcloud storage buckets update gs://www.example.com --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
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个 JSON 文件,以将
website
对象中的mainPageSuffix
和notFoundPage
属性设置为所需页面:{ "website":{ "mainPageSuffix": "index.html", "notFoundPage": "404.html" } }
使用
cURL
,通过PATCH
Bucket 请求调用 JSON API。对于 www.example.com:curl -X PATCH --data-binary @web-config.json \ -H "Authorization: $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/www.example.com"
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个 XML 文件,以将
WebsiteConfiguration
元素中的MainPageSuffix
和NotFoundPage
元素设置为所需页面:<WebsiteConfiguration> <MainPageSuffix>index.html</MainPageSuffix> <NotFoundPage>404.html</NotFoundPage> </WebsiteConfiguration>
使用
cURL
,通过PUT
Bucket 请求和websiteConfig
查询字符串参数调用 XML API。对于 www.example.com:curl -X PUT --data-binary @web-config.xml \ -H "Authorization: $(gcloud auth print-access-token)" \ https://storage.googleapis.com/www.example.com?websiteConfig
测试网站
通过在浏览器中请求访问相应域名,您可以验证内容是否来源于相应存储桶。为实现此目的,您可以使用对象路径,也可以仅使用域名(如果设置了 MainPageSuffix
属性)。
例如,如果您的一个名为 test.html
的对象存储在名为 www.example.com
的存储桶中,请在您的浏览器中转至 www.example.com/test.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.