java将分布式打包_携程Apollo一键打包/部署方案

本文介绍了如何借助Apollo-docker项目,轻松实现Java分布式应用的打包和部署。详细步骤包括下载源码、环境准备(Maven、Node.js、Docker)、解决兼容性问题、编译、配置修改及单机/分布式部署。特别强调了在编译过程中解决maven-assembly-plugin与maven版本不兼容问题的方法,以及通过docker-compose进行服务启动和状态检查。
摘要由CSDN通过智能技术生成

Apollo-docker

携程Apollo一键打包/部署方案。

几乎不需要修改任何Apollo源码或配置,实现快速开发/测试环境搭建。

1、下载源码

Apollo

git clone https://gitee.com/nobodyiam/apollo.git

编译脚本

git clone https://gitee.com/ellipse/apollo-docker.git

项目目录结构:

apollo-docker/

-- apollo/

-- admin/

-- config/

-- portal/

-- apollo.env

-- docker-compose.yml

-- build/

-- gulpfile.js

-- ...

2、环境准备

Maven

Apollo项目使用Maven构建

Node.js

脚本使用Gulp编写,需要Node.js

Docker

测试服务器需要安装Docker和Docker compose

3、兼容性检查

使用脚本打包前,先检查下maven版本兼容性。运行项目自带的编译脚本,如不报错则通过。

// 在项目根目录下运行

cd scripts

build.bat

我的maven版本是3.6.3,编译过程中会报错:

[INFO] Apollo ConfigService ............................... FAILURE [ 5.037 s]

[INFO] Apollo AdminService ................................ SKIPPED

[INFO] ------------------------------------------------------------------------

[INFO] BUILD FAILURE

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 49.311 s

[INFO] Finished at: 2020-05-23T11:08:01+08:00

[INFO] ------------------------------------------------------------------------

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single (default) on project apollo-configservice: Execution default of goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-assembly-plugin:2.6:single: java.lang.ExceptionInInitializerError: null

.....

.....

[ERROR] Number of foreign imports: 1

[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]

[ERROR]

[ERROR] -----------------------------------------------------

[ERROR] : Index 1 out of bounds for length 1

异常信息很不直观,经过一番摸索是maven-assembly-plugin与maven版本不兼容导致的。

修改根目录下的pom.xml文件,将maven-assembly-plugin版本修改为3.3.0。

org.apache.maven.plugins

maven-assembly-plugin

3.3.0

修改完毕再次运行build.bat脚本,编译通过。

4、编译

将本项目的build文件夹复制到apollo的根目录,目录结构为:

/

-- apollo-portal/

-- build/

-- gulpfile.js

在build目录下打开控制台,执行下列操作

# ~/apollo/build/

# 需要安装 Node.js

npm i

gulp

稍事等待后编译完成。

/

-- build/

-- apollo/

-- admin/

-- config/

-- portal/

-- apollo.env

-- docker-compose.yml

-- gulpfile.js

根据需要修改apollo.env和docker-compose.yml。

# apollo.env

DS_IP=192.168.0.109 # 数据库所在主机的IP

DS_PORT=3306 # 数据库端口

HOST_IP=192.168.0.103 # Docker宿主机IP,只在环境变量中引用

DS_URL=jdbc:mysql://${DS_IP}:${DS_PORT}/${DB_NAME}?characterEncoding=utf8

DS_USERNAME=root # 数据库用户名

DS_PASSWORD=123456 # 数据库密码

eureka.instance.ip-address=${HOST_IP} # 向Eureka注册时所指定的IP,这里使用的是宿主机IP

# docker-compose.yml

version: '3'

services:

apollo-config-01:

container_name: apollo-configservice-01

build: ./config

ports:

- 8080:8080

volumes:

- /data/apollo/config01:/opt/logs/100003171

env_file:

- apollo.env

environment:

- DB_NAME=ApolloConfigDB_Docker # 数据库名

...

...

apollo-portal-01:

container_name: apollo-portalservice-01

build: ./portal

ports:

- 8070:8070

volumes:

- /data/apollo/portal01:/opt/logs/100003173

env_file:

- apollo.env

environment:

- DB_NAME=ApolloPortalDB_Docker

- LOCAL_META=http://192.168.0.103:8080 # Eureka的地址

- DEV_META=http://192.168.0.103:8080 #

- FAT_META=http://192.168.0.103:8080 #

- UAT_META=http://192.168.0.103:8080 #

- LPT_META=http://192.168.0.103:8080 #

- PRO_META=http://192.168.0.103:8080 #

除此之外,其他的Spring配置都可以加到 environment 中从而覆盖Apollo的默认参数,例如

environment:

- server.port=18080

5、单机部署

测试环境为:CentOS8 (Vmware) 并安装Docker和Docker compose

将新生成的apollo文件夹上传到服务器

/

-- build/

-- apollo/

-- gulpfile.js

命令行进入apollo文件夹,运行

docker-compose up -d

检查是否启动成功

docker-compose ps

Name Command State Ports

-----------------------------------------------------------------------------------------

apollo-adminservice-01 /apollo-adminservice/scrip ... Up 0.0.0.0:8090->8090/tcp

apollo-configservice-01 /apollo-configservice/scri ... Up 0.0.0.0:8080->8080/tcp

apollo-portalservice-01 /apollo-portal/scripts/sta ... Up 0.0.0.0:8070->8070/tcp

注:docker-compose必须在包含docker-compose.yml文件的目录下才能执行。

若启动失败,在服务器/data/apollo/中查看日志。前面的配置中已将docker中的日志位置重定向到了宿主机。

由于服务注册和发现过程较慢,启动后需要等待约30秒(人肉计时)

浏览器中访问Eureka管理页面http://192.168.0.103:8080/,可以看到APOLLO-ADMINSERVICE和APOLLO-CONFIGSERVICE已经成功注册,并且ip地址也是正确的。

访问ApolloPortal管理页面http://192.168.0.103:8070/,管理员工具>系统信息,可以看到环境信息中已经成功获取了APOLLO-ADMINSERVICE和APOLLO-CONFIGSERVICE。

注:如果服务器开了防火墙,需要开放相应端口,并重启防火墙

firewall-cmd --zone=public --add-port=8080/tcp --permanen

6、分布式部署

6.1 测试环境

测试机1:CentOS 8(Vmware) 192.168.0.103

---- ConfigService

---- AdminService

---- Portal

测试机2:CentOS 8(Vmware) 192.168.0.104

---- ConfigService

---- AdminService

6.2 修改配置

这里选择预编译版本进行部署。

数据库

UPDATE serverconfig

SET `Value` = "http://192.168.0.103:8080/eureka/,http://192.168.0.104:8080/eureka/"

WHERE `Key` = "eureka.service.url"

测试机1

复制本项目根目录下的apollo文件夹,命名为apollo_103。修改apollo.env`,其他按实际环境修改。

HOST_IP=192.168.0.103

修改docker-compose.yml,其他按实际环境修改。

apollo-portal-01:

...

environment:

- DB_NAME=ApolloPortalDB_Docker

- LOCAL_META=http://192.168.0.103:8080,http://192.168.0.104:8080

- DEV_META=http://192.168.0.103:8080,http://192.168.0.104:8080

测试机2

复制apollo_103并重命名为apollo_104。修改apollo.env,其他按实际环境修改。

HOST_IP=192.168.0.104

修改docker-compose.yml,注释掉(或删除)apollo-portal-01部分。其他按实际环境修改。

# apollo-portal-01:

# container_name: apollo-portalservice-01

# build: ./portal

# ports:

# - 8070:8070

# volumes:

# - /data/apollo/portal01:/opt/logs/100003173

# env_file:

# - apollo.env

# environment:

# - DB_NAME=ApolloPortalDB_Docker

# - LOCAL_META=http://192.168.0.103:8080,http://192.168.0.104:8080

# - DEV_META=http://192.168.0.103:8080,http://192.168.0.104:8080

# - FAT_META=http://192.168.0.103:8080,http://192.168.0.104:8080

# - UAT_META=http://192.168.0.103:8080,http://192.168.0.104:8080

# - LPT_META=http://192.168.0.103:8080,http://192.168.0.104:8080

# - PRO_META=http://192.168.0.103:8080,http://192.168.0.104:8080

6.3 启动Apollo

分别登录两台服务器,在apollo_10X目录下执行:

docker-compose up -d

root@in_dev_docker:/apollo# bash scripts/msf_create_lossless_map.sh /apollo/hdmap/pcd_apollo/ 50 /apollo/hdmap/ /apollo/bazel-bin WARNING: Logging before InitGoogleLogging() is written to STDERR E0715 22:08:35.399576 6436 lossless_map_creator.cc:162] num_trials = 1 Pcd folders are as follows: /apollo/hdmap/pcd_apollo/ Resolution: 0.125 Dataset: /apollo/hdmap/pcd_apollo Dataset: /apollo/hdmap/pcd_apollo/ Loaded the map configuration from: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. E0715 22:08:35.767315 6436 lossless_map_creator.cc:264] ieout_poses = 1706 Failed to find match for field 'intensity'. Failed to find match for field 'timestamp'. E0715 22:08:35.769896 6436 velodyne_utility.cc:46] Un-organized-point-cloud E0715 22:08:35.781770 6436 lossless_map_creator.cc:275] Loaded 245443D Points at Trial: 0 Frame: 0. F0715 22:08:35.781791 6436 base_map_node_index.cc:101] Check failed: false *** Check failure stack trace: *** scripts/msf_create_lossless_map.sh: line 11: 6436 Aborted (core dumped) $APOLLO_BIN_PREFIX/modules/localization/msf/local_tool/map_creation/lossless_map_creator --use_plane_inliers_only true --pcd_folders $1 --pose_files $2 --map_folder $IN_FOLDER --zone_id $ZONE_ID --coordinate_type UTM --map_resolution_type single root@in_dev_docker:/apollo# bash scripts/msf_create_lossless_map.sh /apollo/hdmap/pcd_apollo/ 50 /apollo/hdmap/
07-16
根据提供的信息,执行脚本 `scripts/msf_create_lossless_map.sh` 时出现了错误。具体的错误信息如: ``` E0715 22:08:35.399576 6436 lossless_map_creator.cc:162] num_trials = 1 Pcd folders are as follows: /apollo/hdmap/pcd_apollo/ Resolution: 0.125 Dataset: /apollo/hdmap/pcd_apollo Dataset: /apollo/hdmap/pcd_apollo/ Loaded the map configuration from: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. Saved the map configuration to: /apollo/hdmap//lossless_map/config.xml. E0715 22:08:35.767315 6436 lossless_map_creator.cc:264] ieout_poses = 1706 Failed to find match for field 'intensity'. Failed to find match for field 'timestamp'. E0715 22:08:35.769896 6436 velodyne_utility.cc:46] Un-organized-point-cloud E0715 22:08:35.781770 6436 lossless_map_creator.cc:275] Loaded 245443D Points at Trial: 0 Frame: 0. F0715 22:08:35.781791 6436 base_map_node_index.cc:101] Check failed: false *** Check failure stack trace: *** scripts/msf_create_lossless_map.sh: line 11: 6436 Aborted (core dumped) $APOLLO_BIN_PREFIX/modules/localization/msf/local_tool/map_creation/lossless_map_creator --use_plane_inliers_only true --pcd_folders $1 --pose_files $2 --map_folder $IN_FOLDER --zone_id $ZONE_ID --coordinate_type UTM --map_resolution_type single ``` 这段错误信息表明在执行脚本时发生了一个检查失败的情况。错误的具体位置在 `base_map_node_index.cc:101`。可能的原因包括: 1. 数据不匹配:脚本中使用的数据可能存在不匹配的情况,例如字段名或者数据格式不正确。 2. 数据文件缺失:脚本所需的某些数据文件可能不存在或者路径不正确。 3. 依赖问题:脚本所依赖的某些组件或库可能缺失或者版本不兼容。 请检查脚本 `scripts/msf_create_lossless_map.sh` 中的相关代码,确保数据文件和依赖项的正确性。如果问题仍然存在,您可以提供更多的上下文信息,以便我们能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值