Вот один из подходов, который вы могли бы рассмотреть. Я использую его для нескольких развертываний с полным стеком в Google AppEngine Standard и предпочитаю это (против GCS) из-за функций GAE (управление версиями, разделение трафика, журналы ...). Но стоимость может быть выше, чем общедоступное ведро GCS.
Для этого:
1) развернуть первую службу для внешнего интерфейса
Простое развертывание вашей папки Angular dist
, созданной 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
Я уверен, что правила обработчиков, вероятно, могут быть оптимизированы. Я не эксперт в регулярных выражениях. ; -)
Структура каталогов 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
.