上一篇介绍过apollo的架构和各个模块的功能,对apollo服务端和客户端的交互有了一定的初步认识,下面我们看一下怎么部署的。
因为我修改了源码,并且是部署在docker容器中的,所以我们从编译源码开始,一步一步的讲解部署方法。apollo原始的部署方法请参见:
apollo分布式部署方法
1.准备工作
1.1 jdk
apollo服务端:jdk1.8+
apollo客户端:jdk1.7+
由于需要同时编译,所以需要jdk1.8+,安装方法在这里不说了
1.2 maven
编译使用maven编译,安装maven方法在这里不说了。
1.3 数据库
本例中用的是mysql数据库,需要5.6.5以上版本
1.3.1 创建数据库
Apollo服务端共需要两个数据库:
apolloportaldb
和
apolloconfigdb
,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。sql脚本在下载源码中script/sql/中。
1.3.2 调整服务配置
1.3.2.1 apolloportaldb
配置统一存储在serverconfig表中,配置项如下图:
从上到下依次表示:
(1).apollo.portal.envs – 可支持的环境列表
默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:
DEV,FAT,UAT,PRO
注意:只在数据库添加环境是不起作用的,需要配合修改scripts/build.sh,添加新增环境对应的meta server地址。
(2)
.organizations – 部门列表
Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:
[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"}]
(3).superAdmin – Portal超级管理员
超级管理员拥有所有权限,需要谨慎设置。
如果没有接入自己公司的SSO系统的话,可以先暂时使用默认值apollo(默认用户)。等接入后,修改为实际使用的账号,多个账号以英文逗号分隔(,)。
(4).consumer.token.salt – consumer token salt
如果会使用开放平台API的话,可以设置一个token salt。如果不使用,可以忽略。
(5).wiki.address
portal上“帮助”链接的地址,默认是Apollo github的wiki首页,可自行设置。
(6).admin.createPrivateNamespace.switch
是否允许项目管理员创建private namespace。默认是允许,如果关闭请设置值为“false”。
1.3.2.2 apolloconfigdb
配置统一存储在serverconfig表中,配置项如下图:
从上到下依次表示:
1.eureka.service.url – Eureka服务Url
不管是apollo-configservice还是apollo-adminservice都需要向eureka服务注册,所以需要配置eureka服务地址。 按照目前的实现,apollo-configservice本身就是一个eureka服务,所以只需要填入apollo-configservice的地址即可,如有多个,用逗号分隔(注意不要忘了/eureka/后缀)。
需要注意的是每个环境只填入自己环境的eureka服务地址,比如FAT的apollo-configservice是1.1.1.1:8080和2.2.2.2:8080,UAT的apollo-configservice是3.3.3.3:8080和4.4.4.4:8080,PRO的apollo-configservice是5.5.5.5:8080和6.6.6.6:8080,那么:
-
在FAT环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://1.1.1.1:8080/eureka/,http://2.2.2.2:8080/eureka/
-
在UAT环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://3.3.3.3:8080/eureka/,http://4.4.4.4:8080/eureka/
-
在PRO环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://5.5.5.5:8080/eureka/,http://6.6.6.6:8080/eureka/
注:这里需要填写本环境中全部的eureka服务地址,因为eureka需要互相复制注册信息
2.namespace.lock.switch – 一次发布只能有一个人修改开关
这是一个功能开关,如果配置为true的话,那么一次配置发布只能是一个人修改,另一个发布。
1.4 环境
可以搭建多套环境,本例只用了一个开发环境
1.5 jenkins持续集成环境
由于使用docker容器部署,所以需要使用jenkins将编译好的jar封装成镜像。
2.编译
2.1 下载源码:
apollo原生源码下载地址:
https://github.com/ctripcorp/apollo
apollo修改源码后的下载地址:
https://github.com/dewey-its/apollo-custom
源码下载后的目录结构如图所示:
2.2 修改编译文件build.sh
# apollo config db info
apollo_config_db_url=jdbc:mysql://your_mysql_ip:3306/apolloconfigdb?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=mysql
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://your_mysql_ip:3306/apolloportaldb?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=mysql
# meta server url, different environments should have different meta server addresses
dev_meta=your_env_address
fat_meta=your_env_address
uat_meta=your_env_address
pro_meta=your_env_address
需要修改的部分如上所示,有数据库地址,用户名密码以及各个环境的meteServer的地址。
2.3 编译
将源码放在虚拟机上,使用命令cd apollo/scripts/进入脚本所在文件夹,此时可能没有权限执行build.sh,使用命令chmod a+x build.sh。最后执行./build.sh进行编译。
出现如下几个日志说明编译成功:
编译完成后或在每个模块下生成一个jar,主要的jar有:apollo-configservice.jar,apollo-adminservice.jar,apollo-portal.jar,apollo-client.jar,apollo-core.jar,apollo-buildtools.jar,分别在各自的模块target下。
到这以后,生成的jar可以按照apollo官方给出的方式直接部署到服务器上。在往下的步骤是根据jar生成镜像。请继续向下阅读。
3.构建
分别构建apollo-configservice,apollo-adminservice,apollo-portal,由于三个步骤,文件结构都相同,此处以apollo-portal为例:
3.1 目录结构为
其中两个jar为上个步骤中编译生成的jar。Dockerfile为构建文件。scripts中存放启动脚本startup.sh。logs为日志目录。config为存放配置文件app.properties。apollo-jenkins.sh为jenkins使用,若直接使用docker build命令即可构建。
Dockerfile内容:
FROM registry.paas:443/admin/openjdk:8-alpine
ADD ./ /apollo-portal/
RUN sed -i '$d' /apollo-portal/scripts/startup.sh \
&& echo "tail -f /dev/null" >> /apollo-portal/scripts/startup.sh \
&& chmod a+x /apollo-portal/scripts/startup.sh
EXPOSE 8557
CMD ["/apollo-portal/scripts/startup.sh"]
app.properties内容:由于修改了源码,app.properties必填
app.id=hystrixdashboard
local.meta=http://localhost:8555
dev.meta=http://10.126.3.127:8555
fat.meta=http://10.126.3.127:8555
uat.meta=http://10.126.3.127:8555
lpt.meta=http://10.126.3.127:8555
pro.meta=http://10.126.3.127:8555
4.部署
将生成的apollo-configservice,apollo-adminservice,apollo-portal部署,随后访问apollo-portal的地址即可登录apollo配置中心。