Google App Engine(GAE)应用的多域部署

9
我们希望开发并销售定制的商业GAE应用程序。我们想了解如何在任意Google Apps域上(即非appspot)部署GAE应用程序的信息。
假设我们的公司是abc.com,我们正在向def.com和xyz.com销售应用程序。要将我们的应用程序部署到客户域上,需要哪些步骤?
当一个应用程序被部署在多个域名上时:
- 代码是复制还是共享? - 数据存储定义是复制还是共享(或者更准确地说是数据类型)? - 实体是否添加了任何域属性?

谢谢,非常有帮助。抱歉还不能投票 - 没有声望。 - Gig68
2个回答

14

目前针对像你所描述的“多租户”应用,您有三种选择:

  1. 您可以创建一个单一的应用程序,让您的客户将其添加到自己的域中。您的应用程序将拥有一个数据存储库,但您可以使用Host标头来确定哪个客户正在访问该应用程序,并根据该标头将数据存储分离出来。
    • 易于部署和升级
    • 客户安装方便
    • 用户必须拥有Google账户而非应用账户才能登录。
  2. 您可以为每个客户部署一个全新的应用程序实例。
    • 部署和升级较困难
    • 需要客户更多参与以完成安装
    • 提供完全隔离的数据
    • 用户可以使用他们的应用凭据进行登录
  3. 您可以与Google合作创建一个新的应用市场应用程序
    • 具备以上第1点和第2点的所有优势
    • 需要Google的参与
    • 尚无确定的发布日期

谢谢,非常有帮助。抱歉还不能投票 - 没有声望。 - Gig68
1
这是一个相当古老的问题,但最近已经发生了改变。现在,开发和部署多租户应用程序更加容易。 - Paweł Dyda

4
这是可能的,但据我所知,def.comxyz.com将需要注册Google Apps

一旦您的潜在客户使用Google Apps注册域名,他们就可以添加不仅是Google Apps(如Gmail和Docs)到子域名(mail.def.comdocs.def.com),还可以添加任何GAE应用程序(fooapp.def.com)。

  • 代码是重复的还是共享的?
    共享的
  • 数据存储定义是重复的还是共享的(或更精确地说是种类)?
    虽然模式(定义)是共享的,但未共享的是实际数据存储。即您的应用程序的每个实例都有单独的数据。
  • 实体是否添加了任何域属性?
    您可以使用其中一个CGI / HTTP环境变量找出您的应用程序正在哪个域下提供。我不记得确切的变量是哪个,但我会查看一些旧代码后更新答案。一旦找出当前域是什么,您可以选择对该信息采取什么操作,包括将其保存到实体中或仅拒绝访问。

这个功能的另一个很酷的特点是,假设公司def.com正在使用托管的GMail,并为其员工提供Google身份验证。现在,如果您的应用程序正在使用GAE提供的身份验证挂钩,那么您可以自动验证仅限于他们的员工,而无需更改您的代码!至少,这是理论,因为我自己还没有尝试过它;-)


第二点和脚注是不正确的:它们都使用相同的数据存储,目前你不能让单个应用实例认证多个应用程序域。 - Nick Johnson
我实际上在谈论的是来自同一代码的多个应用程序实例。如果公司def.com想要使用fooapp,他们可以到他们的Google Apps管理员中添加该应用程序。这将创建一个新的应用程序实例,该实例将使用不同的数据存储库并针对def.com进行身份验证而不是一般的Google帐户。这样做有错吗? - Deepak Sarda
阅读您的答案,我本意是描述您概述的第二种情况,但可能表达不够清晰! - Deepak Sarda
谢谢,非常有帮助。抱歉还不能投票 - 没有声望。 - Gig68

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接