Java-在Google App Engine标准上托管Angular应用程序。 webapp文件夹与GCS存储桶?

时间:2019-06-12 07:48:39

标签: angular google-app-engine

我有一个使用App Engine标准JAVA作为后端API的Angular Web应用程序。

在同一项目下托管有角度的Web应用程序的最佳方法是什么?

我想将Web应用程序托管在同一个Google项目下。

当我将文件放在Java API项目下的src / main / Webapp文件夹下时,该应用程序运行正常。但是,这需要每次我需要更改Web应用程序时都刷新后端API。

或者,遇到了类似这样的事情,用于在GCS存储桶中托管角度应用程序: https://medium.com/@asanoop24/deploying-angular-6-app-on-google-app-engine-b6259d4c16c2

关于在GAE上托管有角度的Web应用程序的首选方法有何建议?

谢谢

1 个答案:

答案 0 :(得分:0)

这是您可以考虑的一种方法。我将它用于Google AppEngine Standard上的多个完整堆栈部署,由于GAE功能(版本,流量拆分,日志...),因此更喜欢此版本(相对于GCS)。但是成本可能会高于GCS公共存储桶。

要这样做:

1)为前端部署第一项服务

只需简单部署由dist生成的Angular ng build --prod文件夹。 选择一个简单的标准python环境即可。

app.yaml应该看起来像:

runtime: python27
threadsafe: true
api_version: 1

handlers:
- url: /(.+\.js)
  static_files: app/\1
  upload: app/(.+\.js)

- url: /(.+\.css)
  static_files: app/\1
  upload: app/(.+\.css)

- url: /(.+\.png)
  static_files: app/\1
  upload: app/(.+\.png)

- url: /(.+\.jpg)
  static_files: app/\1
  upload: app/(.+\.jpg)

- url: /(.+\.svg)
  static_files: app/\1
  upload: app/(.+\.svg)

- url: /favicon.ico
  static_files: app/favicon.ico
  upload: app/favicon.ico

- url: /(.+\.json)
  static_files: app/\1
  upload: app/(.+\.json)

- url: /(.+)
  static_files: app/index.html
  upload: app/index.html

- url: /
  static_files: app/index.html
  upload: app/index.html

我确信处理程序规则可能会得到优化。我不是regexp的专家。 ;-)

deploy文件夹的目录结构应类似于:

/deploy
  app.yaml
  /app  =>  generated by ng build
    index.html
    ...bundles..js
    /assets
      ...

此默认服务将照常在https://YOUR_PROJECT_ID.appspot.com上提供。

2)为后端部署第二项服务

然后(并且仅在第一次前端部署之后),在Java标准环境下为后端部署第二个服务。

但是我们在<service>标记内精确调整了服务的名称。在这里,我选择api,但可以使用其他任何名称。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <version>1</version>
    <threadsafe>true</threadsafe>
    <runtime>java8</runtime>          
    <instance-class>F4</instance-class>
    ...
    <service>api</service>
    ...

这项新服务将在https://YOUR_SERVICE_NAME-dot-YOUR_PROJECT_ID.appspot.com上提供,因此在https://api-dot-YOUR_PROJECT_ID.appspot.com

请注意在后端管理CORS,以正确接受来自https://YOUR_PROJECT_ID.appspot.com的请求。