node.js - Google App Engine API + 静态架构

标签 node.js google-app-engine web-applications app-engine-flexible

我正在尝试(配置)构建 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

会,但我们不希望这样做,因为我们希望尽可能运行devstagingproduction

我一直在寻找的另一个选项是将静态文件夹托管为我的应用程序的一部分,但我似乎也无法正常工作,这是我的 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,因此您必须使用灵活的环境,为此 scriptstatic_filesapp.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/

相关文章:

php - 为什么你的 Web 应用程序不使用 C?

node.js - 如何执行并行命令

python - golang appengine - 文件名太长

python - 谷歌应用引擎日志记录系统中的无限递归

python - 谷歌应用引擎: Difficulty with Users API (or maybe just a Python syntax problem)

c# - Microsoft JScript 运行时错误 : Object doesn't support this property or method

node.js - Node and Express - 路由特定资源的 Assets 管理器

javascript - 从匿名 JavaScript 函数中获取变量

node.js - Azure不将index.html作为可执行入口点

java - 是否有任何关于 Spring MVC 与 Struts 2 和其他框架的使用情况的统计数据?