• 饮冰三年-人工智能-Python-65-Apollo之07 Docker环境部署


    上一节:饮冰三年-人工智能-Python-64-Apollo之06测试环境部署

    一、准备工作

    本次使用的是10.5.1.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.1.155
    • FAT 测试环境,相当于alpha环境(功能测试)
    • UAT 集成环境,我们使用10.5.1.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.1.46 ApolloPortalDB 3306  
    10.5.1.46 ApolloConfigDBUAT 3306 UAT
    10.5.1.46 ApolloConfigDBDEV 3306 DEV
    10.5.1.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.1.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.1.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.1.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.1.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.1.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.1.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 服务器上部署成功。

  • 相关阅读:
    Caffe 编译
    Caffe 在 Ubuntu 中安装
    【转】git
    Using OpenCV with gcc and CMake
    【转】linux下安装opencv
    【转】shell 教程——07 Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
    【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
    python全栈开发-面向对象-初识2
    python全栈开发-面向对象-初识
    python全栈开发-前方高能-内置函数2
  • 原文地址:https://www.cnblogs.com/YK2012/p/14051839.html
Copyright © 2020-2023  润新知