5.3.10.2. 分布式的 UberJAR 部署

配置分布式应用程序,在 Studio 中打开项目,点击 CUBA > Deployment > UberJAR Settings 主菜单项或者双击项目树中 Project > Deployment 的条目,按照如下介绍配置选项:

  • 打开 Uber JAR 标签页。

  • 取消勾选 Single Uber JAR

appProperties 添加下面这些内容:

  1. appProperties = ['cuba.automaticDatabaseUpdate': true,
  2. 'cuba.webHostName':'sales-core',
  3. 'cuba.connectionUrlList': 'http://sales-core:8079/app-core',
  4. 'cuba.webAppUrl': 'http://sales-web:8080/app',
  5. 'cuba.useLocalServiceInvocation': false,
  6. 'cuba.trustedClientPermittedIpList': '*.*.*.*']
  • cuba.webHostName 定义了应用程序模块运行的机器名称。名称需要跟 Dockerfile 里面定义的 core 服务的名称一致。

  • cuba.connectionUrlList 定义了客户端模块连接中间件服务的 URL。服务的 host 名称需要跟 core 服务的名称一致,上下文名称(URL 的最后一段)需要跟 core *.jar 包的名字一致。

  • cuba.webAppUrl 定义 web 客户端应用程序的 URL。服务的主机名称需要跟 Dockerfile 里面定义的 web 服务名称一致。

  • cuba.useLocalServiceInvocation 在这个例子需要设置成 false,因为 core 和 web 服务是部署在不同的容器中。

  • cuba.trustedClientPermittedIpList 定义了一份 IP 地址列表白名单,从这个列表的 IP 可以允许登录应用系统。



如果有多个中间件服务,需要在 cuba.connectionUrlList 属性里全部列出,并且配置 Web 客户端的集群,应用程序扩展 部分会有介绍。

运行 buildUberJar 任务生成这些 JAR 包:

  1. gradle buildUberJar

docker-image 目录为 web 和 core JAR 包创建两个子目录。需要为这两个 JAR 分别创建容器,所以需要配置两个 Dockerfiles

coreDockerfile

  1. ### Dockerfile
  2. FROM openjdk:8
  3. COPY . /usr/src/cuba-sales
  4. CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app-core.jar

webDockerfile

  1. ### Dockerfile
  2. FROM openjdk:8
  3. COPY . /usr/src/cuba-sales
  4. CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app.jar

docker-compose.yml 文件包含了 coreweb 单独的两个容器的配置:

  1. version: '2'
  2. services:
  3. postgres:
  4. image: postgres:9.6.6
  5. environment:
  6. - POSTGRES_PASSWORD=cuba
  7. - POSTGRES_USER=cuba
  8. - POSTGRES_DB=sales
  9. ports:
  10. - "5433:5432"
  11. networks:
  12. - sales-network
  13. sales-core:
  14. image: cuba-sample-sales-core
  15. networks:
  16. - sales-network
  17. sales-web:
  18. image: cuba-sample-sales-web
  19. ports:
  20. - "8080:8080"
  21. networks:
  22. - sales-network
  23. networks:
  24. sales-network:

用以下命令构建镜像:

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

启动应用程序,切换到包含 docker-compose.yml 文件的目录,执行:

  1. docker-compose up

这个任务完成之后,可以从 http://localhost:8080/app 地址访问应用程序。



如果需要在不同的物理机器部署多个容器,需要安装配置 Docker Swarm 或者 Kubernetes