使用两种环境的Google云平台php应用程序部署(标准和灵活)

时间:2018-11-15 09:13:08

标签: php google-app-engine google-cloud-platform yaml app-engine-flexible

通过分别为标准环境和灵活环境配置app.yaml,我可以在Google云中部署php应用程序。

“ app.yaml”(对于标准环境):

 runtime: php55
 api_version: 1
 threadsafe: true

 handlers:
  - url: /.*
  script: helloworld.php

  - url: /fileUpload.php
  script: fileUpload.php

“ app.yaml”以实现灵活的环境:

 runtime: php55
 env: flex  # flexible env
 api_version: 1
 threadsafe: true

 handlers:
  - url: /.*
  script: helloworld.php

  - url: /fileUpload.php
  script: fileUpload.php

现在我想在单个应用程序中同时使用两种环境。

1. helloworld.php URL的标准环境
2. fileUpload.php URL的灵活环境

所以请建议我这个应用程序的结构。
在此先感谢

我尝试使用以下结构,但无法正常工作。.

|-dispatch.yaml
|-standard
|-app.yaml
|-helloworld.php
|-flexible
|-app.yaml
|-fileUpload.php

dispatch.yaml代码:

dispatch:
- url: "*/fileupload/*"
  service: flex-module
- url: "/.*"
  service: default

如何在单个应用程序中同时利用标准和灵活的环境?

示例:
域:example.com

  1. 如果我们访问网址“ example.com/”或“ example.com/helloworld.php”,则它将使用标准环境。

  2. 如果我们访问url'example.com/fileupload.php',那么它将使用灵活的环境。

是否可以处理以上两个条件?

2 个答案:

答案 0 :(得分:1)

Google Cloud上的环境是每个应用程序。如果要部署在不同的环境中,它们必须是分开的应用程序,或者至少是相同的副本在不同的微服务上。对于两个不同的环境,不是一个部署。

这是用于标准环境,但是是相同的概念https://cloud.google.com/appengine/docs/standard/php/microservices-on-app-engine 每个模块或微服务本身就是一个应用程序。因为它除了管理数据库等共享资源外,还管理自己的资源。

答案 1 :(得分:0)

是的,有可能:您将拥有一个带有2个服务,一个标准和一个flex的GAE应用程序(即一个GCP项目)。您几乎是朝这个方向开始的,但是您错过了一些事情。

运行时不正确,并且您缺少(非默认)flex-module app.yaml的服务命名。来自General settings

  

运行时:php

     

此设置是必需的。它是App Engine语言的名称   此应用程序使用的运行时。要指定PHP,请使用 php 。其他   运行时可用;请参阅每种语言的文档以了解   更多信息。

     

服务:service_name

     

如果创建服务,则为必需。对于默认服务是可选的。每   服务,每个版本必须有一个名称。名称可以包含数字,   字母和连字符。长度不能超过63个字符,并且   不能以连字符开头或结尾。为每个选择唯一的名称   服务和每个版本。不要在服务和   版本。

您也可以将standard env configs放到该文件中-当前会忽略它们,但以防万一检查变得更加严格。也许偷看了与How to tell if a Google App Engine documentation page applies to the standard or the flexible environment相关的某种方式

 runtime: php
 env: flex  # flexible env
 service: flex-module

您也应该检查The runtime_config部分,它似乎是强制性的,但是我不是PHP用户,我不知道在这里建议什么:

  

您必须在document_root部分中配置runtime_config,   例如上面的示例。

您需要注意dispatch.yaml的内容。 flex服务的模式与您为此服务选择的URL不匹配,需要匹配。您还可以在末尾放下默认服务模式-与指定路由模式不匹配的任何内容都将转到默认服务。

dispatch:
  - url: "*/fileUpload.php"
    service: flex-module

注意:我一直在dispatch.yaml中使用目录模式-即- url: "*/some_dir/*"-绝不仅是特定文件,我不是100%肯定上述内容会起作用,如果不需要的话,可能需要一些调整。

在默认服务的app.yaml中,您可以删除上载处理程序-由flex-module处理。只是化妆品。

还要小心部署-您有3个可部署项:2个服务(通过部署相应的app.yaml文件进行部署)和必须专门部署的dispatch.yaml文件。 3个.yaml文件的任何组合都可以包含在一个部署命令中(但这很方便,实际上每个文件实际上都是单独部署的):

gcloud app deploy standard/app.yaml flexible/app.yaml dispatch.yaml