我正在尝试(配置)构建 JS 客户端 + NodeJS 服务器应用程序以将其托管在 Google Cloud AppEngine(可能还有其他 GCP 资源)上的最佳方式。所以我在这里寻找建议/最佳实践。
我们有一个在非默认 AppEngine 服务上运行的 API 服务器,并且希望能够运行多个,例如同一项目的开发/暂存/生产版本(如果可能)。
我们想在这个系统上托管/提供我们的静态客户端应用程序,因为我们想使用相同的域来指向它。
在我们正常的基于服务器的设置中,客户端应用程序在 domain.com/
上代理/服务并且对 API 的请求在 domain.com/v1/
上
我一直在研究不同的选择——托管一个在 AppEngine 上运行的单独静态站点并使用 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 和production。
我一直在寻找的另一个选项是将静态文件夹托管为我的应用程序的一部分,但我似乎也无法正常工作,这是我的 app.yaml
中的片段:
handlers:
- url: /.*
static_files: client/dist/index.html
upload: frontend/dist/index.html
- url: /v1/*
script: dist/index.js
我的猜测是 script
可能与 Python 应用程序的工作方式不同,但我可能是错的 - 文档不是很清楚。
理想情况下,我想在存储上托管客户端前端静态文件并指向 AppEngine API 服务器(而不是专门指向来自客户端的域,例如 /v1/auth/login
而不是 my-backend-service-project.appspot.com/v1/
引用资料:
How can I use bucket storage to serve static files on google flex/app engine environment?
Node.js + static content served by 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 文档 - 这不是一个好主意,因为它们的工作方式不同。参见 How to tell if a Google App Engine documentation page applies to the standard or the flexible environment .
由于您的应用是 Node.JS,因此您必须使用灵活的环境,为此 script
和 static_files
在 app.yaml
内不适用.这就是您无法让它们工作的原因。
列表中的第一个引用显示了提供静态文件的选项。但我有点质疑您使用共享 GCS 选项的意愿 - 无论开发/暂存/生产环境如何,它都将提供相同的内容,所以:
- 你不能有不同的客户端环境
- 您如何看待选择特定的服务器端环境,因为客户端引用只能指向一个方向(即环境,如果我理解正确的话)?
如果您希望使用单个域意味着您仍然可以使用(该域的)不同子域,并且如果您愿意使用自定义域,这可能是感兴趣的:How to use GAE's dispatch.yaml with multiple development environments?
更新:
Node.JS 目前在标准环境中也可用,因此您可以使用这些功能,请参阅:
关于node.js - Google App Engine API + 静态架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48705676/