是否有可能使用 Google App Engine 托管多个应用程序?
Posted
技术标签:
【中文标题】是否有可能使用 Google App Engine 托管多个应用程序?【英文标题】:Is there possibility to host multiple applications with Google App Engine? 【发布时间】:2015-05-31 21:37:45 【问题描述】:我是否需要为每个新的 Google App Engine 应用创建新项目?或者有没有其他方法可以在一个项目中拥有多个应用程序?
编辑:删除“额外问题”
【问题讨论】:
每个问题保留一个问题.. 对于欧洲地区,您可能需要联系销售/支持:cloud.google.com/appengine/docs/python/gettingstartedpython27/… “附带问题”问here 【参考方案1】:这很容易通过services
完成。当您部署到 App Engine 时,使用如下行定义您的 app.yaml
文件:service: my-second-app
另一个 Node.js 服务的完整 app.yaml 文件:
service: my-second-app
runtime: nodejs
env: flex
automatic_scaling:
min_num_instances: 1
部署时,从包含 app.yaml 文件的目录执行:
gcloud app deploy
或者,如果您想在 yaml 文件中为您的第二个应用定义配置:
gcloud app deploy my-second-app.yaml
新服务将与您的 default
服务一起部署,并将获得它自己的 URL,例如:
https://my-second-app-dot-my-project-name.appspot.com
【讨论】:
这是否也启用了单独的版本控制? 尚未尝试对服务进行版本控制,但相关文档似乎表明它受支持:cloud.google.com/appengine/docs/admin-api/deploying-apps 只是为了澄清:您不必事先创建新服务,如果您只需在 app.yaml 中键入新服务名称即 service: my-second-app ,它就会在部署时创建。 很有趣,但是如果我想让第二个应用程序使用第二个数据库怎么办?例如,gcloud 看起来每个项目只允许一个 Firestore db。【参考方案2】:我认为有一张图片(价值一千字)展示 Google App Engine 服务层次结构是个好主意。
图片取自An Overview of App Engine页面。
因此,您的 Google Cloud 项目 下有应用程序。一个应用程序可以有一个或多个服务。服务是松耦合的,并且是独立开发和维护的。对于许多人来说,这可能会让人感到困惑,因为他们可能将服务称为应用程序。 Google 将命名约定更改为使用 microservices 命名法。
一个服务可以有不同的版本(例如 v1.0.1、v1.0.2、v2.0.0 等),一个版本可以有多个处理新网络流量的实例。
显然,服务、版本和实例的数量存在限制,它们取决于An Overview of App Engine 中指定的地区和免费/付费版本。
【讨论】:
感谢您的精彩解释!对我帮助很大。【参考方案3】:每次您在 App Engine 上上传内容时,您都必须定义一个 version name,并且您最多可以为同一应用程序 ID 上传 25 个不同的版本。
每个版本都有一个如下所示的直接 URL:
http://version.application-id.appspot.com
或者如果想要HTTPS
https://version-dot-application-id.appspot.com
如果您从 URL 中省略版本,您将获得您从仪表板中选择的默认版本。
所以理论上您可以在同一个项目下运行多达 25 个不同的应用程序,但它们将共享同一个数据存储区。
另一种选择是使用App Engine Modules。
【讨论】:
没有理由为不同的应用程序使用版本。在同一个项目中可以有任意数量的应用程序,并且仍然有 25 个版本的项目。 这不是一个好主意。任务队列和其他东西只在默认版本上运行。非默认版本甚至没有 https。版本旨在为开发周期提供便利。 @AndreiVolgin 我更新了我的答案以检查模块,但我从问题中了解到,OP 希望更喜欢实验,因为无论哪种情况,我建议的解决方案都不会如果你想使用自定义域和关于任务的有效点,那就飞吧。也许 Maksim 可以给我们更多信息,关于他到底想要实现什么。 @ZigMandel,“非默认版本甚至没有 https”是什么意思?!他们当然会这样做,实际上,您正在评论的 A 甚至直接显示了如何获取它(在 URL 中使用-dot-
而不是 .
)...!
对不起,你在 https 上是对的。您的任务队列问题仍然正确吗?【参考方案4】:
现在回到这一点,我发现正确的方法是使用App Engine Services(以前称为模块)。每个服务都可以有自己的版本等。
编辑:将贬义的名称模块更新为服务
【讨论】:
“模块”重命名为“服务”。【参考方案5】:您可以使用相同的 projectId 运行无限数量的“应用程序”。例如,当用户在您的服务器上点击不同的 URL 时,您可以加载不同的客户端应用程序:/mainApp
、/setup
、/admin
等。
这些应用可以访问同一个数据存储区,因此您必须小心地将它们分开,例如,使用命名空间或不同的实体类型 - 如果您确实需要分开它们。在上面的示例中,“Setup”和“Admin”可能是访问相同数据的不同应用。
请注意,只有当这些应用密切相关时,才能在同一个项目中拥有多个应用。否则,即使您使用不同的 App Engine 模块来运行每个应用的服务器端代码,也会变得非常不方便。
【讨论】:
添加到 Andrei 的答案...如果应用程序密切相关,您可以使用 DomainRoute(在 webapp2 中),它提供了使用相同 URL 的选项,但根据域/子域访问不同地处理每个它。例如,如果托管一个共享相同功能但基于域提供不同内容的内容应用程序。 @andrei-volgin,能否请您链接到该文件的来源?以上是关于是否有可能使用 Google App Engine 托管多个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 Node.js 或其他一些服务器端 JavaScript 方法开发 Google App Engine 网络应用程序?
Google App Engine(即“纯 Python”):将 PDF 转换为图像