饮冰三年-人工智能-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配置,那么我们需要重新“打扫”一下。大破大立!

  1. 删除46数据库中Apollo相关的数据库。(放心!其中有价值的测试数据以apolloconfigdbdev.sql附件做了备份)
  2. 停掉155上所有Apollo相关的服务
    1. 先查看当前系统中Apollo正在运行的服务:ps -ef | grep apollo
    2. 根据apollo安装位置,停止服务:sudo ./usr/lib/apollo/adminservice/scripts/shutdown.sh(注意:根据安装路径的不同,安装服务的多少,停止服务的操作略有不同)
    3.  
  3. 删除Apollo相关的目录
    1. sudo rm -r /usr/lib/apollo/
  4. 删除Apollo相关的日志(删除前,看一下日志是否有异常)
    1. sudo rm -r /opt/logs/

三、部署步骤

部署步骤共四步:

  1. 创建数据库:Apollo服务端依赖于MySQL数据库,所以需要事先创建并完成初始化
  2. 获取安装包:通过源码构建
  3. 构建docker镜像:为apollo-configservice, apollo-adminservice, apollo-portal构建Docker镜像
  4. 部署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`, `Commentfrom `ApolloPortalDB`.`ServerConfiglimit 1;

select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDBDEV`.`ServerConfig` limit 1;
调整ApolloPortalDB配置

配置项统一存储在ApolloPortalDB.ServerConfig表中,也可以通过管理员工具 - 系统参数页面进行配置。

  1. apollo.portal.envs - 可支持的环境列表
    默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:DEV,FAT,UAT,PRO,我这里设置为DEV
调整ApolloConfigDB配置

配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置。

  1. 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 获取安装包

可以通过两种方式获取安装包:

  1. 直接下载安装包
    • 从GitHub Release页面下载预先打好的安装包
    • 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
  2. 通过源码构建
    • 从GitHub Release页面下载Source code包或直接clone源码后在本地构建
    • 如果需要对Apollo的做定制开发,需要使用这种方式

这里我是通过源码构建的,当然,在配置UAT或其他环境时候会直接下载安装包

3.2.1 配置数据库连接信息

Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑scripts/build.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

# apollo config db info
apollo_config_db_url=jdbc:mysql://10.5.11.46:3306/ApolloConfigDBDEV?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=123
 
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://10.5.11.46:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=123
scripts/build.sh
配置各环境meta service地址

Apollo Portal需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以需要在打包时提供这些信息。我这里只部署UAT环境,配置修改如下:

# meta server url, different environments should have different meta server addresses
dev_meta=http://10.5.11.155:8080
#fat_meta=http://fill-in-fat-meta-server:8080
#uat_meta=http://fill-in-uat-meta-server:8080
#pro_meta=http://fill-in-pro-meta-server:8080
 
# META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dfat_meta=$fat_meta -Duat_meta=$uat_meta -Dpro_meta=$pro_meta"
META_SERVERS_OPTS="-Ddev_meta=$dev_meta"
/scripts/build.sh

注意:这里配置 dev_meta 要与数据中配置的一致。即:update `ApolloConfigDBDEV`.`ServerConfig` set value = 'http://10.5.11.155:8080/eureka/' where `Key`= 'eureka.service.url';

中如果使用的是IP地址,这里也要使用相同的IP。这里我们先只配置dev环境。

执行编译、打包

做完上述配置后,就可以执行编译和打包了。执行/scripts目录下build.sh脚本,该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal。

 

 

 

注意:此时会报mvn没有安装

安装Maven
1:指定的位置下载并解压

cd /usr/lib/

sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

sudo tar -zxvf apache-maven-3.6.3-bin.tar.gz

解压之后的文件夹名字为:apache-maven-3.6.3

2:修改全局配置文件并使之立即生效
sudo vi /etc/profile
export M2_HOME=/usr/lib/apache-maven-3.6.3
export PATH=${M2_HOME}/bin:$PATH
/etc/profile
source /etc/profile
3:检查是否安装成功

mvn -v

 

 

  

继续执行 ./build.sh

 

 

 

切换到root用户,刷新配置,再次编辑

sudo su root

输入密码

source /etc/profile

./build.sh

安装成功

获取安装包和Dockerfile文件
  1. 获取apollo-configservice安装包:安装包在位于apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip,Dockerfile在apollo-configservice/src/main/docker/目录下
  2. 获取apollo-adminservice安装包:安装包位于apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip,Dockerfile在apollo-adminservice/src/main/docker/目录下
  3. 获取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编辑受影响

{
"registry-mirrors": ["https://owwdylkq.mirror.aliyuncs.com"]
} 
daemon.json

sudo systemctl daemon-reload

sudo systemctl restart docker

 

部署Apollo服务端

我们通过docker compose部署Apollo服务端,部署的配置文件如下:

sudo vim docker-compose.yml

version: "3"
 
services:
  apollo-configservice:                                         ##容器服务名
    container_name: apollo-configservice                        ##容器名
    #build: apollo-configservice/src/main/docker/                ##Dockerfile路径
    image: yango/apollo_configservice                           ##镜像名
    ports:
      - "8080:8080"   
    volumes:
      - "/opt/logs/100003171:/opt/logs/100003171"    ##将/opt/logs/100003171目录挂载到宿主机的/opt/logs/100003171方便在宿主机上查看日志
  apollo-adminservice:
    container_name: apollo-adminservice
    #build: apollo-adminservice/src/main/docker/
    image: yango/apollo_adminservice
    ports:
      - "8090:8090"
    depends_on:
      - apollo-configservice
    volumes:
      - "/opt/logs/100003172:/opt/logs/100003172"
  apollo-portal:
    container_name: apollo-portal
    #build: apollo-portal/src/main/docker/
    image: yango/apollo_portal
    ports:
      - "8070:8070"
    depends_on:
      - apollo-adminservice
    volumes:
      - "/opt/logs/100003173:/opt/logs/100003173"
docker-compose.yml

sudo chmod 777 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
View Code

方式三,另外一种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
View Code

 

posted @ 2020-11-28 10:42  逍遥小天狼  阅读(188)  评论(0编辑  收藏  举报