饮冰三年-人工智能-Python-65-Apollo之07 Docker环境部署
上一节:饮冰三年-人工智能-Python-64-Apollo之06测试环境部署
一、准备工作
本次使用的是10.5.11.155服务器具体信息如下:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
1.1 Java和MySQL
对于Java和MySQL的要求可以参考以前的系列文章
1.2 Docker环境安装
1.3 Docker Compose安装
1.4 部署策略(来自官网)
分布式部署需要事先确定部署的环境以及部署方式。Apollo目前支持以下环境:
- DEV 开发环境,我们使用10.5.11.155
- FAT 测试环境,相当于alpha环境(功能测试)
- UAT 集成环境,我们使用10.5.11.156
- PRO 生产环境
1.4 部署策略(来自官网)
文件安装目录
文件名 |
作用 |
地址 |
备注 |
jdk1.8.0_256 |
用于存放jdk文件内容 |
/usr/lib/jvm |
|
mysql | 用于存放mysql文件内容 |
/usr/local/mysql |
数据保存在47服务器 |
apollo | 用于存放apollo文件内容 | /usr/lib/apollo | |
apollo-1.7.1 | 存放apollo的下载包 | /usr/lib/apollo-1.7.1 | |
apache-maven-3.6.3 | 用于生成镜像 | /usr/lib/apache-maven-3.6.3 |
二、打扫干净屋子再请客
由于原来我们在155上做了一些测试,可能会遗留一些Apollo配置,那么我们需要重新“打扫”一下。大破大立!
- 删除46数据库中Apollo相关的数据库。(放心!其中有价值的测试数据以apolloconfigdbdev.sql附件做了备份)
- 停掉155上所有Apollo相关的服务
- 先查看当前系统中Apollo正在运行的服务:ps -ef | grep apollo
- 根据apollo安装位置,停止服务:sudo ./usr/lib/apollo/adminservice/scripts/shutdown.sh(注意:根据安装路径的不同,安装服务的多少,停止服务的操作略有不同)
- 删除Apollo相关的目录
- sudo rm -r /usr/lib/apollo/
- 删除Apollo相关的日志(删除前,看一下日志是否有异常)
- sudo rm -r /opt/logs/
三、部署步骤
部署步骤共四步:
- 创建数据库:Apollo服务端依赖于MySQL数据库,所以需要事先创建并完成初始化
- 获取安装包:通过源码构建
- 构建docker镜像:为apollo-configservice, apollo-adminservice, apollo-portal构建Docker镜像
- 部署Apollo服务端:构建镜像后通过docker compose就可以部署到公司的测试和生产环境了
下载 Apollo 资源包。sudo wget https://codeload.github.com/ctripcorp/apollo/zip/v1.7.1
3.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,官网把数据库、表的创建和样例数据都分别准备了sql文件(在下载的源码/scripts/sql
目录下),只需要导入数据库即可。
我们后期要实现分布式部署不同的环境,所以,我们把ApolloConfigDB类型的数据库根据环境的不同创建不同名称的数据库。
服务器
|
数据库
|
端口
|
环境
|
---|---|---|---|
10.5.11.46 | ApolloPortalDB | 3306 | |
10.5.11.46 | ApolloConfigDBUAT | 3306 | UAT |
10.5.11.46 | ApolloConfigDBDEV | 3306 | DEV |
10.5.11.46 | ApolloConfigDBPRO | 3306 | PRO |
3.1.1 调整并验证配置
我们先配置dev环境,后期再拓展 dev,uat,pro
update `ApolloPortalDB`.`ServerConfig` set value ='dev' where `Key` = 'apollo.portal.envs';
这里也可以使用http://localhost:8080/eureka/,但是要与后面生成镜像时使用的地址保持一致
update `ApolloConfigDBDEV`.`ServerConfig` set value = 'http://10.5.11.155:8080/eureka/' where `Key`= 'eureka.service.url';
检验修改:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDBDEV`.`ServerConfig` limit 1;
调整ApolloPortalDB配置
配置项统一存储在ApolloPortalDB.ServerConfig表中,也可以通过管理员工具 - 系统参数页面进行配置。
- apollo.portal.envs - 可支持的环境列表
默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:DEV,FAT,UAT,PRO
,我这里设置为DEV
调整ApolloConfigDB配置
配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置。
- eureka.service.url - Eureka服务Url
不管是apollo-configservice还是apollo-adminservice都需要向eureka服务注册,所以需要配置eureka服务地址。 按照目前的实现,apollo-configservice本身就是一个eureka服务,所以只需要填入apollo-configservice的地址即可,如有多个,用逗号分隔(注意不要忘了/eureka/后缀)。这里我填写http://10.5.11.156:8080/eureka
。
3.2 获取安装包
可以通过两种方式获取安装包:
- 直接下载安装包
- 从GitHub Release页面下载预先打好的安装包
- 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
- 通过源码构建
- 从GitHub Release页面下载Source code包或直接clone源码后在本地构建
- 如果需要对Apollo的做定制开发,需要使用这种方式
这里我是通过源码构建的,当然,在配置UAT或其他环境时候会直接下载安装包
3.2.1 配置数据库连接信息
Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑scripts/build.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
配置各环境meta service地址
Apollo Portal需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以需要在打包时提供这些信息。我这里只部署UAT环境,配置修改如下:
中如果使用的是IP地址,这里也要使用相同的IP。这里我们先只配置dev环境。
执行编译、打包
做完上述配置后,就可以执行编译和打包了。执行/scripts目录下build.sh脚本,该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal。
注意:此时会报mvn没有安装
安装Maven
1:指定的位置下载并解压
cd /usr/lib/
sudo tar -zxvf apache-maven-3.6.3-bin.tar.gz
解压之后的文件夹名字为:apache-maven-3.6.3
2:修改全局配置文件并使之立即生效
sudo vi /etc/profile
source /etc/profile
3:检查是否安装成功
mvn -v
继续执行 ./build.sh
切换到root用户,刷新配置,再次编辑
sudo su root
输入密码
source /etc/profile
./build.sh
安装成功
获取安装包和Dockerfile文件
- 获取apollo-configservice安装包:安装包在位于apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip,Dockerfile在apollo-configservice/src/main/docker/目录下
- 获取apollo-adminservice安装包:安装包位于apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip,Dockerfile在apollo-adminservice/src/main/docker/目录下
- 获取apollo-portal安装包:安装包位于apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip,Dockerfile在apollo-portal/src/main/docker/目录下
分别将上面的安装包和Dockerfile文件上传至服务器(已安装Docker)上
2.3 构建docker镜像
上传到服务器上的安装包和Dockerfile文件目录结构如下:
root@serv-dev-03:/usr/lib/apollo# sudo mkdir apollo_portal apollo_config apollo_admin
root@serv-dev-03:/usr/lib/apollo# sudo chmod 777 apollo_portal apollo_config apollo_admin
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-configservice/target/apollo-configservice-1.7.1-github.zip apollo_config/
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-adminservice/target/apollo-adminservice-1.7.1-github.zip apollo_admin/
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-portal/target/apollo-portal-1.7.1-github.zip apollo_portal/
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-configservice/src/main/docker/Dockerfile apollo_config/
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-adminservice/src/main/docker/Dockerfile apollo_admin/
root@serv-dev-03:/usr/lib/apollo# sudo cp ../apollo-1.7.1/apollo-portal/src/main/docker/Dockerfile apollo_portal/
- 构建yango/apollo_portal镜像
进入apollo_portal
目录执行如下命令docker build -t yango/apollo_portal .
- 构建yango/
apollo_config
镜像
进入apollo_config
目录执行如下命令docker build -t yango/apollo_configservice .
- 构建yango/
apollo_admin
镜像
进入apollo_admin
目录执行如下命令docker build -t yango/apollo_adminservice .
如果比较慢,请修改配置文件(155上此时没有该配置)
sudo vim /etc/docker/daemon.json
暂时配置为: 如果该字段有值,记得制作完初始镜像后修改回来,防止其他docker编辑受影响
sudo systemctl restart docker
部署Apollo服务端
我们通过docker compose部署Apollo服务端,部署的配置文件如下:
sudo vim docker-compose.yml
启动:
sudo docker-compose up
至此,Apollo 在 155 服务器上部署成功。
方式二,通过docker启动
sudo docker pull apolloconfig/apollo-configservice:1.7.1 sudo docker run -p 8081:8080 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloConfigDBDEV?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -d -v /tmp/logs:/opt/logs --name apollo-configservice apolloconfig/apollo-configservice:1.7.1 sudo docker pull apolloconfig/apollo-adminservice:1.7.1 sudo docker run -p 8090:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloConfigDBDEV?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -d -v /tmp/logs:/opt/logs --name apollo-adminservice apolloconfig/apollo-adminservice:1.7.1 sudo docker pull apolloconfig/apollo-portal:1.7.1 sudo docker run -p 8071:8070 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloPortalDBDEV?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -e APOLLO_PORTAL_ENVS=dev \ -e DEV_META=http://10.5.11.174:8081 \ -d -v /tmp/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal:1.7.1 ---------------------------------------------另一个开发环境--------------------------------------------------------- sudo docker run -p 8082:8080 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloConfigDBUAT?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -d -v /tmp/logs:/opt/logs --name apollo-configservice2 apolloconfig/apollo-configservice:1.7.1 sudo docker run -p 8092:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloConfigDBUAT?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -d -v /tmp/logs:/opt/logs --name apollo-adminservice2 apolloconfig/apollo-adminservice:1.7.1 sudo docker run -p 8072:8070 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://10.5.11.46:3306/ApolloPortalDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123 \ -e APOLLO_PORTAL_ENVS=uat \ -e UAT_META=http://10.5.11.174:8082 \ -d -v /tmp/logs:/opt/logs --name apollo-portal2 apolloconfig/apollo-portal:1.7.1
方式三,另外一种yml文件
apollo-configservice: container_name: apollo-configservice image: apolloconfig/apollo-configservice:1.7.1 restart: always ports: - "8081:8080" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://10.5.11.190:3306/ApolloConfigDBPRO?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=apollo - SPRING_DATASOURCE_PASSWORD=admin volumes: - /opt/logs:/tmp/logs apollo-adminservice: container_name: apollo-adminservice image: apolloconfig/apollo-adminservice:1.7.1 restart: always links: - apollo-configservice ports: - "8091:8090" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://10.5.11.190:3306/ApolloConfigDBPRO?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=apollo - SPRING_DATASOURCE_PASSWORD=admin volumes: - /opt/logs:/tmp/logs apollo-portal: container_name: apollo-portal image: apolloconfig/apollo-portal:1.7.1 restart: always links: - apollo-adminservice ports: - "8071:8070" environment: - SPRING_DATASOURCE_URL=jdbc:mysql://10.5.11.46:3306/ApolloPortalDBPRO?characterEncoding=utf8 - SPRING_DATASOURCE_USERNAME=apollo - SPRING_DATASOURCE_PASSWORD=admin - APOLLO_PORTAL_ENVS=pro - PRO_META=http://10.5.11.46:8081 volumes: - /opt/logs:/tmp/logs