7.3.9.2. Distributed Uber JAR Deployment

Для настройки распределенной конфигурации откройте проект CUBA в Студии, выполните действие Deployment settings, перейдите на вкладку Uber JAR и затем отредактируйте настройки, как описано ниже:

  1. Включите Build Uber JAR

  2. Выключите Single Uber JAR.

Добавьте следующие настройки в appProperties:

appProperties = ['cuba.automaticDatabaseUpdate': true,
                 'cuba.webHostName':'sales-core',
                 'cuba.connectionUrlList': 'http://sales-core:8079/app-core',
                 'cuba.webAppUrl': 'http://sales-web:8080/app',
                 'cuba.useLocalServiceInvocation': false,
                 'cuba.trustedClientPermittedIpList': '*.*.*.*']
  • Свойство cuba.webHostName  — конфигурационный параметр, задающий имя хоста, на котором запущен данный блок приложения. Указанное значение должно совпадать с именем core сервиса, указанного в Dockerfile.

  • Свойство cuba.connectionUrlList задает список URL для подключения клиентских блоков к серверам Middleware. Имя хоста должно совпадать с именем сервиса core, указанного в Dockerfile, а contextName должен соответствовать имени файла core *.jar.

  • Свойство cuba.webAppUrl определяет URL, по которому доступен Web Client приложения. Имя хоста должно совпадать с именем сервиса web, указанного в Dockerfile.

  • Свойство cuba.useLocalServiceInvocation должно быть установлено в false, так как блоки Middleware и Web Client развернуты в отдельных контейнерах.

  • Свойство cuba.trustedClientPermittedIpList определяет список IP адресов, с которых возможен вход в приложение.

Tip

Если в приложении используется более одного сервера Middleware, их все нужно перечислитьв свойстве cuba.connectionUrlList и настроить кластер серверов Web Client как описано в разделе Масштабирование приложения.

Пересоберите JAR-файлы с помощью задачи buildUberJar:

gradle buildUberJar

Создайте две подпапки в папке docker-image для web и core JAR-файлов. Так как для распределенного приложения создается отдельный контейнер для каждого JAR-файла, то в этом случае необходимо конфигурировать два файла Dockerfile.

Конфигурационный файл Dockerfile для core имеет вид:

### Dockerfile

FROM openjdk:8

COPY . /usr/src/cuba-sales

CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app-core.jar

Конфигурационный файл Dockerfile для web имеет вид:

### Dockerfile

FROM openjdk:8

COPY . /usr/src/cuba-sales

CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app.jar

Файл docker-compose.yml конфигурирует два сервиса core и web и выглядит следующим образом:

version: '2'

services:
  postgres:
    image: postgres:9.6.6
    environment:
      - POSTGRES_PASSWORD=cuba
      - POSTGRES_USER=cuba
      - POSTGRES_DB=sales
    ports:
     - "5433:5432"
    networks:
     - sales-network
  sales-core:
    image: cuba-sample-sales-core
    networks:
     - sales-network
  sales-web:
    image: cuba-sample-sales-web
    ports:
     - "8080:8080"
    networks:
     - sales-network

networks:
  sales-network:

Соберите образы с помощью следующих команд:

docker build -t cuba-sample-sales-web ./web
docker build -t cuba-sample-sales-core ./core

Для запуска приложения перейдите в директорию с файлом docker-compose.yml и запустите следующую команду:

docker-compose up

Приложение будет доступно по адресу http://localhost:8080/app.

Tip

Для развертывания контейнеров на нескольких физических машинам вам может понадобиться установить и настроить Docker Swarm или Kubernetes.