【问题标题】:How do you undeploy 'helloworld.go' from App Engine Quickstart, and instead point to a html in bucket?如何从 App Engine 快速入门中取消部署“helloworld.go”,而是指向存储桶中的 html?
【发布时间】:2026-01-15 22:50:01
【问题描述】:

我正在尝试了解如何在 GCP 上托管网站,并且刚刚完成了 App Engine 快速入门,它为我提供了一个运行在 helloworld.go 上的可运​​行的 appspot.com 域。

但现在我想尝试一个经过测试可以在本地工作的预制 html 模板(包含 .html、.DS_STORE 和 css/fonts/images/js 文件夹)。

按照“托管静态网站”教程,我已将 html 模板文件夹上传到我的存储桶“... .appspot.com”中,并使整个存储桶可以公开查看/阅读。然后我禁用并重新启用 App Engine 会话以尝试将其重置。

但是,该 URL 仍会加载快速入门中使用的默认“Hello, world”明文。

我可能对 App Engine 上的网络托管的工作原理有一个非常根本的误解。有人可以检查我正在尝试做的事情是否合理,如果是,我该怎么做?

编辑:我也成功部署了 Quickstart 中包含的其他代码示例,但仍未弄清楚如何忽略这些并直接从存储桶进行部署。

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

    我了解到您的 Google Cloud Storage 存储桶中有一个静态 HTML 页面,并且您希望您的 App Engine 应用程序指向该 html 页面。

    可以这样做,只需从存储桶中取出文件,然后打印内容,但如果您只想要一个静态页面,最好的选择可能如下:

    1. 创建一个存储桶并仅上传该存储桶中的静态模板,请不要在那里上传敏感信息。
    2. 点击右侧三个点可编辑存储桶的权限。
    3. 将“存储对象查看者”角色授予成员“allUsers”
    4. 进入您的存储桶并点击您的 index.html 的公共链接

    链接类似于:https://storage.googleapis.com//index.html

    编辑

    根据 OP 的要求,链接 https://storage.googleapis.com/< YOUR_BUCKET >/index.html 真的很长而且不太友好,因此这是一个关于如何将自定义域附加到您的 Google Cloud Storage 存储桶的小教程。

    1. 创建一个域,您可以使用Google Domains,或者如果您只是想要一个免费域,您可以使用Freenom 之类的东西并免费获得您的域。
    2. 转到Google Search Console 并按照小教程进行操作,这只是为了验证您的域实际上是您的。它会要求您将文件上传到您的域中。要做到这一点,就像

      2.1。将您的域指向 Compute Engine 实例的外部 IP 您拥有的安装了 apache 的文件和其中的文件。

      2.2。您可以在 Marketplace

      2.3。只需将谷歌提供的文件上传到 /var/www/html/ 在你的新实例中。

      2.4。验证完成后,删除此 Compute Engine 实例以 不要浪费钱。

    3.创建一个与您已验证的域同名的存储桶,也就是说,如果您的域是“larrycai.tk”,则您的存储桶应命名为“larrycai.tk”。如果是“2”。如果制作正确,它将允许您创建该存储桶,如果没有,它将向您显示一条错误消息,指出您需要验证您是该域的所有者。

    4. 再次访问您的域提供商(在我的例子中是 freenom)并在 DNS 菜单中添加以下记录:

    如您所见,您需要添加 CNAME 记录,目标将是 c.storage.googleapis.com,如果它要求您设置名称,只需添加您的域“larrycai.tk”。

    5.(可选)如果您想将存储桶 url 重定向到主文件(例如 index.html),只需运行以下命令:

    gsutil web set -m index.html gs://[your_bucket]
    

    现在,通过所有这些步骤,您应该能够在自己的域中看到您的静态网页。

    【讨论】:

    • 我通过创建一个新项目并运行应用引擎 tute 来为我创建一个 apppot 存储桶,而无需部署任何东西。然后我将静态文件添加到这个存储桶中并调整了权限。回到存储“仪表板”,它确实显示“公共”。但是基本 url (bucketdeploytest.appspot.com) 和 +/index.html (bucketdeploytest.appspot.com/index.html) 都返回 404。我还缺少什么吗?
    • 在这里您可以找到您的静态 HTML 模板:storage.googleapis.com/bucketdeploytest.appspot.com/index.html
    • 谢谢!我还在我的原始项目(部署了 helloworld.go)中对此进行了测试,该 URL 也可以工作并显示 HTML 模板。因此,该项目托管 2 个网站,1 个在 apppot 上,另一个在 storage.googleapis 上。这只是查看存储桶中托管网站的默认方式吗?我想知道是否可以使用更短的网址(如 xxx.appspot.com)使其更易于访问。尼克森似乎在说些什么,希望他能再次回应。
    • @LarryCai 我更新了我的消息,解释了如何将自定义域附加到 GCS 存储桶。
    【解决方案2】:

    使用 Google Cloud Platform 部署网站有多种方法。 “托管静态网站”教程是指仅使用云存储托管静态网站。

    要使用 App Engine 托管静态网站,您需要编辑应用程序的 app.yaml 文件并创建指向您的静态网站的请求处理程序。

    当您使用 go qwikstart 教程时,我将假设您的目录如下所示:

    helloworld
    |-- app.yaml
    |-- helloworld.go
    |-- helloword_test.go
    
    1. 在 helloworld 目录中创建一个新文件夹,在本例中,我将其命名为 www
    2. 将静态文件移动到刚刚创建的文件夹中,在我的例子中是www 文件夹
    3. 在 app.yaml 文件中,添加以下内容,将 www 替换为您的文件夹名称:

      handlers:
      - url: /
        static_files: www/index.html
        upload: www/index.html
      
      - url: /(.*)
        static_files: www/\1
        upload: www/(.*)
      
    4. 使用 gcloud app deploy 部署您的应用程序。

    有关更多信息,Google 提供了有关为以下对象提供静态内容的文档:

    【讨论】:

    • 我认为我在运行时遇到了问题:和 api: 行。 html模板没有说明,我在“runtime:”中尝试了所有这些,同时删除了“api:”行。我还尝试过在其他一些故障排除线程中看到的“env:flex”。如何轻松检查要使用的运行时?还是我完全找错了树,并且由于其他原因而出现错误?
    • 我假设你在谈论 app.yaml 文件?您唯一需要做的就是添加我指定的处理程序,并将 app.yaml 的其余部分保持不变