Java - хостинг приложения Angular на стандартном движке приложений Google.папка веб-приложения против корзины GCS? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть угловое веб-приложение, которое использует стандарт JAVA App Engine в качестве внутреннего API.

Какой лучший способ разместить угловое веб-приложение в одном проекте?

Я бы хотел разместить веб-приложение под тем же проектом Google.

Приложение работает нормально, когда я помещаю файлы в папку src / main / Webapp в проекте Java API.Однако это потребует обновления API-интерфейсов сервера каждый раз, когда мне нужно изменить веб-приложение.

С другой стороны, вы сталкивались с чем-то подобным для размещения угловых приложений внутри корзины GCS: https://medium.com/@asanoop24/deploying-angular-6-app-on-google-app-engine-b6259d4c16c2

Любые предложения о том, какой подход является предпочтительным для размещения угловых веб-приложений в GAE?

Спасибо

1 Ответ

0 голосов
/ 02 июля 2019

Вот один из подходов, который вы могли бы рассмотреть. Я использую его для нескольких развертываний с полным стеком в 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.

...