Google App Engine API 静态体系结构



我正在尝试(con(找出构建JS Client Nodejs Server应用程序以在Google Cloud Cloud Appengine(以及可能还有其他GCP资源(托管的最佳方法。所以我在这里寻找建议/最佳实践。

我们有一个在非默认附录服务上运行的API服务器,并且希望能够运行多个服务器,例如同一项目的开发/分期/生产版本(如果可能的话(。

我们想在此系统上托管/服务我们的静态客户端应用程序,因为我们想使用相同的域来指向它。

在基于普通服务器的设置中,客户端应用程序已在domain.com/上定位/提供,并且对API的请求在domain.com/v1/

我一直在处理不同的选项 - 托管一个在附录上运行的单独静态站点并使用dispatch.yaml尝试路由请求 - 此选项似乎不适用于域前缀,仅适用于通配符,例如。

dispatch:
- url: "my-client-service-project.appspot.com/"
  service: my-client-service
- url: "my-client-service-project.appspot.com/v1/*"
  service: my-backend-service

不起作用,但是:

- url: "*/v1/*"
  service: my-backend-service

做,我们不想要的,因为我们想运行 dev staging &生产如果可能的话。

我一直在寻找的另一个选项是将静态文件夹作为我的应用程序的一部分,但我似乎也无法正常工作,这是我的app.yaml的片段:

handlers:
  - url: /.*
    static_files: client/dist/index.html
    upload: frontend/dist/index.html
  - url: /v1/*
    script: dist/index.js

我的猜测是script可能与Python应用程序不一样,但我可能是错误的 - Doc的不清楚。

理想情况下,我想在存储上托管客户端前端静态文件,并指向appengine api服务器(没有专门指向客户端的域,例如/v1/auth/login而不是my-backend-service-project.appspot.com/v1/

参考:

如何使用桶存储在Google flex/App Engine环境中使用静态文件?

node.js Google App Engine提供的静态内容

https://cloud.google.com/appengine/docs/flexible/nodejs/serving-static-files

https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed#routing_via_url

https://cloud.google.com/appengine/docs/standard/python/config/appref

https://cloud.google.com/appengine/docs/standard/python/config/dispatchref

开始:您正在混合标准和灵活的env文档 - 这不是一个好主意,因为它们的工作方式不一样。查看如何判断Google App Engine文档页面是否适用于标准或灵活的环境。

由于您的应用程序是node.js,因此您必须使用灵活的env, scriptstatic_files不适用于 app.yaml中。这就是为什么您无法让他们工作的原因。

列表中的第一个参考显示了您提供静态文件的选项。但是我有点质疑您使用共享GCS选项的愿望 - 无论DEV/分期/生产环境如何,它都会提供相同的内容,因此:

  • 您不能拥有不同的客户端环境
  • 您如何看待选择特定的服务器端环境,因为客户端的参考只能指向一个方向(即环境,如果我正确理解您的意图(?

如果您希望使用单个域的愿望意味着您仍然可以使用不同的子域(该域的(,并且如果您愿意使用自定义域,则可能是感兴趣的:如何将GAE的dispatch.yaml与多个开发环境使用?

更新:

node.js当前也可以在标准环境中使用,因此您可以使用这些功能,请参阅:

  • 现在,您可以将node.js应用程序部署到应用程序标准环境
  • Google App Engine Node.js标准环境文档

以@dan corneliscu之一的补充,因为我认为这很有用,并总结了您在做错了什么以及在您的场景类型中可以实现的目标展示。无论如何,我想提供一些可能有用的信息。

关于您建议的 dispatch规则方法 dispatch规则不起作用的原因,您应该相应地更新应用程序中的路径。他们现在应该像以前那样听/v1/your_endpoint而不是/your_endpoint。更改 dispatch 文件还不够。然后,还要确保在您的应用程序引擎>在控制台的服务选项卡中填充 dispatch路线字段。

您建议的替代方法确实将使用static_files使用,但是您可以遵循本指南,解释如何从GAE灵活应用程序中提供静态文件。

最新更新