5.3.10.2. 分布式的 UberJAR 部署
配置分布式应用程序,在 Studio 中打开项目,点击 CUBA > Deployment > UberJAR Settings 主菜单项或者双击项目树中 Project > Deployment 的条目,按照如下介绍配置选项:
打开 Uber JAR 标签页。
取消勾选 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 定义了应用程序模块运行的机器名称。名称需要跟
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 包:
gradle buildUberJar
在 docker-image
目录为 web 和 core JAR 包创建两个子目录。需要为这两个 JAR 分别创建容器,所以需要配置两个 Dockerfiles
。
core 的 Dockerfile
:
### 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
web 的 Dockerfile
:
### 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
地址访问应用程序。
如果需要在不同的物理机器部署多个容器,需要安装配置 Docker Swarm 或者 Kubernetes。 |