首先,我创建一个Google App Engine
并将其部署在API和前端上的自定义域(我们将其称为:mysite.ms
)上。该API用nodejs
用Express
编写,而前端是React
应用程序。这是我用于部署的app.yml
文件:
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: .5
memory_gb: 0.5
disk_size_gb: 10
handlers:
- url: /
static_files: www/build/index.html
upload: www/build/index.html
- url: /
static_dir: www/build
现在,我要分割元素。在mysite.ms
域上仅部署React
应用程序,在子域sub.mysite.ms
上部署API
。由于该域是在freenom上接管的,因此要创建一个子域,我添加了一个新的DNS
类型的CNAME
,其值是sub.mysite.ms
,并定位了原始域mysite.ms
。
是否可以仅使用Google App Engine和单个app.yml
文件来创建这些单独的部署,还是需要使用其他工具来分离文件?
您如何建议我继续?由于我在网上找不到任何清晰的信息,您能给我一些解决这些问题的提示吗?
我已经阅读了您提供给我的文档,对此我有些怀疑。首先,如何创建不同的服务?因为我创建了这个(但很可能是错误的)dispatch.yml
:
dispatch:
- url: "mysite.ms/*"
service: default
- url: "sub.mysite.ms/*"
service: api
但是当我使用此命令gcloud app deploy dispatch.yaml
进行部署时,出现错误,因为它找不到模块'api'。
在上一个版本中,在我的server.js
中,我有以下代码来处理React
:
app.use(express.static(path.resolve(__dirname, 'www', 'build')));
app.get('*', (req, res) => { res.sendFile(path.resolve(__dirname, 'www', 'build', 'index.html')); });
即使将前端和api分配在不同的域上,我也应该保留这两行代码吗?
我应该在Google App Engine的部分中将sub.mysite.ms
添加到自定义域区域吗?
即使我有app.yml
,我也应该保留文件dispath.yaml
吗?
答案 0 :(得分:1)
目前,使用相同的yaml
文件不能部署多个服务。假设您可能要部署两个服务:api
和frontend
。假设您希望frontend
服务是默认服务,因此每个人每次访问mysite.ms
时,他们都会看到frontend
服务。
假设您拥有app.yaml
服务的frontend
文件,如下所示:
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
您会注意到,service
中没有app.yaml
属性。在app.yaml
文件reference doc中,您将看到以下内容:
service: service_name
如果创建服务,则为必需。对于默认服务是可选的。每个服务和每个版本必须有一个名称。名称可以包含数字,字母和连字符。在灵活的环境中,服务和版本的总长度不能超过48个字符,并且不能以连字符开头或结尾。为每个服务和每个版本选择唯一的名称。不要在服务和版本之间重复使用名称。
由于没有service
属性,因此部署将设置为default
服务。现在,假设您还有另一个yaml
文件,尤其是api.yaml
文件来部署api
服务。这是一个示例:
runtime: nodejs
env: flex
service: api
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
您将看到我已经添加了service
属性,并且当您使用gcloud app deploy api.yaml
进行部署时,部署将创建服务api
。
最后,在创建服务之后,您将能够部署您创建的dispatch.yaml
文件。
为您提供一些建议:
app.yaml
文件分配给默认服务是一种很好的做法。对于其他服务,您可能想根据要使用该文件进行部署的服务来命名文件,即api.yaml
,backend.yaml
,api_external.yaml
等。gcloud app deploy path/to/service1 path/to/service2 path/to/service3 ...
部署部署两个服务,也可以单独进行部署以更好地进行调试,以防出现问题。handlers
属性为not supported。如果添加它们,这些将被忽略。app.yaml
,dispatch.yaml
,general docs。