[英]how should I architecture an API and front app in Google App Engine?
[英]Google App Engine API + static architecture
我正在尝试(构建)构建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/
参考文献:
如何在google flex / app引擎环境中使用存储桶存储来提供静态文件?
由Google App Engine提供的Node.js +静态内容
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
首先:你正在混合标准和灵活的环境文档 - 这不是一个好主意,因为它们的工作方式不同。 请参阅如何判断Google App Engine文档页面是否适用于标准环境或灵活环境 。
由于您的应用程序是Node.JS,您必须使用灵活的env,其中script
和static_files
不适用于app.yaml
。 这就是为什么你不能让他们工作的原因。
列表中的第一个引用显示了为静态文件提供服务的选项。 但我有点质疑您希望使用共享GCS选项 - 无论dev / staging / production环境如何,它都将提供相同的内容,因此:
如果您希望使用单个域意味着您仍然可以使用不同的子域(该域名),并且如果您愿意使用自定义域,则可能会对此感兴趣: 如何使用GAE的dispatch.yaml有多个开发环境?
更新:
Node.JS目前也可在标准环境中使用,因此您可以使用这些功能,请参阅:
把这个答案作为@Dan Corneliscu的补充,因为我认为它非常有用,并总结了你做错了什么以及你所呈现的场景类型可以实现什么。 无论如何,我想提供一些可能有用的更多信息。
至于您建议的调度规则方法不起作用的原因,您应该相应地更新应用程序中的路径。 他们现在应该正在侦听/v1/your_endpoint
而不是/your_endpoint
就像他们之前可能做的那样。 更改您的调度文件是不够的。 然后还要确保在控制台的App Engine>服务选项卡中填充Dispatch routes字段。
此外,您建议的替代方法确实无法使用static_files
,但您可以按照本指南说明如何从GAE Flexible应用程序提供静态文件 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.