Docker部署Apollo以及与SpringBoot的集成

1.Apollo定义

来源官网,仔细的定义和作用看官网就好啦

https://github.com/ctripcorp/apollo

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

2.使用Docker部署Apollo分布式环境(使用docker部署一个Dev和Pro双配置环境)
2.1 服务环境准备

1、CentOS 6.5 (64-bit) 或更高的版本
2、Docker和Rancher的安装(Docker必要,Rancher非必须)
3、MySQL 5.6.5+

2.2 数据库初始化

在MySql中创建ApolloPortalDB数据库 执行初始化脚本,因为Apollo一个环境需要一个ApolloConfigDB所以此次安装我们还要创建两个数据库 ApolloConfigDBDev(Dev环境配置),ApolloConfigDBPro(Pro环境配置);ApolloConfig初始化脚本

在这里插入图片描述

2.3 使用Rancher安装

打开Rancher添加需要安装的主机,点击添加容器

在这里插入图片描述

填写基础信息(使用idoop/docker-apollo:latest镜像)

在这里插入图片描述

添加环境变量

本次部署一个Dev和Pro双配置环境,在Apollo生产环境中需要注意的是portal(默认端口:8070)服务只需要在生产环境部署一个即可,而每个环境的都需要部署独立的admin和config服务。 镜像中默认四个环境以及其config和admin端口分别为DEV(8080-8090),FAT(8081-8091),UAT(8082-8092),PRO(8083-8093),启动之前请确保要启动的端口未被占用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 开启Portal,默认端口: 8070
PORTAL_DB: jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8
PORTAL_DB_USER: root
PORTAL_DB_PWD: 123456
 
# 开启dev环境, 默认端口: config 8080, admin 8090
DEV_DB: jdbc:mysql://xxx.xxx.xxx.xxx::3306/ApolloConfigDBDev?characterEncoding=utf8
DEV_DB_USER: root
DEV_DB_PWD: 123456
 
# 开启fat环境, 默认端口: config 8081, admin 8091
#FAT_DB: jdbc:mysql://xxx.xxx.xxx.xxx::3306/ApolloConfigDBFat?characterEncoding=utf8
#FAT_DB_USER: root
#FAT_DB_PWD: 123456
 
# 开启uat环境, 默认端口: config 8082, admin 8092
#UAT_DB: jdbc:mysql://xxx.xxx.xxx.xxx::3306/ApolloConfigDBUat?characterEncoding=utf8
#UAT_DB_USER: root
#UAT_DB_PWD: 123456
# 开启pro环境, 默认端口: config 8083, admin 8093
PRO_DB: jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDBPro?characterEncoding=utf8
PRO_DB_USER: root
PRO_DB_PWD: 123456

在这里插入图片描述

修改容器的网络模式为主机模式(网上一些博客上说可以支持桥接模式,但是之前用桥接模式注册到eureka中的地址是容器内网地址而无法使用,坑。。。)

点击创建等待一两分钟 查看容器日志出现如下日志表明启动成功

在这里插入图片描述

2.4 使用Docker命令安装

如果Rancher使用不熟练,把上面转换为docker脚本如下:

1
2
3
4
5
6
7
8
9
10
docker run --net="host" --name apollo -d \ 
 -e PORTAL_DB = 'jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8' \
 -e PORTAL_DB_USER = 'root' \
 -e PORTAL_DB_PWD = '123456' \
 -e DEV_DB = 'jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDBDev?characterEncoding=utf8' \
 -e DEV_DB_USER = 'root' \
 -e DEV_DB_PWD = '123456' \
 -e PRO_DB = 'jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDBPro?characterEncoding=utf8' \
 -e PRO_DB_USER = 'root' \
 -e PRO_DB_PWD = '123456' idoop/docker-apollo:latest

2.4 安装后问题处理

打开localhost:8070地址用默认的用户名密码 apollo admin登录新建一个demo项目发现项目环境只有DEV

在这里插入图片描述

虽然Apollo安装完毕,但是还是有很多坑~等待着我们一个个的解决。
1. 因为初始化ApolloConfigDBPro是默认连接的Eureka是dev环境的Eureka修改ApolloConfigDBPro数据库表ServerConfig中eureka.service.url的端口为8083。
2. 因为ApolloPortalDB默认只有一个dev环境,修改ApolloPortalDB数据库表ServerConfig中apollo.portal.envs值为dev,pro(多环境用逗号隔开不区分大小写)

重启apollo容器等待运行成功,登录查看环境如图:

在这里插入图片描述

输入localhost:8080,localhost:8083如图:

在这里插入图片描述

在这里插入图片描述

出现上面三张图到此我们的apollo安装配置结束。。。

3.Apollo与SpringBoot的集成

3.1 Apollo控制台新建demo项目(部门可在数据库配置)

在这里插入图片描述

分别在DEV和UAT环境添加并发布key为server.port的配置,其中DEV环境的值为1111,PRO环境的值为2222

在这里插入图片描述

3.2 新建SpringBoot项目Demo引入Apollo依赖。

1
2
3
4
5
6
7
8
9
10
11
<!-- apollo 携程apollo配置中心框架 -->
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-core</artifactId>
        <version>1.0.0</version>
    </dependency>

3.2 新建SpringBoot启动类加入EnableApolloConfig注解

在这里插入图片描述

3.3 设置启动VM配置实现项目零配置启动

idea修改启动配置
在这里插入图片描述
在这里插入图片描述
如上图配置是选择dev环境配置,点击应用启动springboot项目如图日志代表我们端口配置成功
在这里插入图片描述

 


作者:shouha

链接:https://blog.csdn.net/wangshouhan/article/details/86528700