Skip to content
idoop edited this page Nov 3, 2019 · 11 revisions

Welcome to the docker-apollo wiki!

Usage

0. Kubernetes中部署

点这儿查看

1. All in One 方式

即开启包括Potal面板,和Dev/Fat/Uat/Pro环境中的一个或多个.这种方法适合开发者临时调试/测试环境的构建.

因为所有服务都是在同一个Docker容器中,相应的服务地址就是本地,而构建该镜像时默认所有环境的服务地址已经配置成localhost,所以可以省略给Portal配置对应环境服务地址。

version: '2'
services:
  apollo-all-in-one:
    container_name: apollo-all-in-one
    image: idoop/docker-apollo:latest
    restart: always
    #  如果portal出现504错误,则使用"host"模式
    network_mode: "host"
    environment:
      # 开启Potal,默认端口:8070
      # 配置数据库ServerConfig表apollo.portal.envs字段值为要开启的环境,这里是:dev,fat,uat
      PORTAL_DB: jdbc:mysql://10.0.0.8:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password

      # 开启Dev环境,默认端口Admin:8090,Config:8080
      # 配置数据库ServerConfig表eureka.service.url字段值为http://localhost:8080/eureka/
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password

      # 开启Fat环境,默认端口Admin:8091,Config:8081
      # 配置数据库ServerConfig表eureka.service.url字段值为http://localhost:8081/eureka/
      FAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
     
      # 开启Uat环境,如果网络模式为host则可以自定义一下Uat环境的端口
      # 下方配置config端口为1000,则配置数据库ServerConfig表eureka.service.url字段值为http://localhost:1000/eureka/
      UAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBUat?characterEncoding=utf8
      UAT_DB_USER: root
      UAT_DB_PWD: password
      UAT_ADMIN_PORT: 2000
      UAT_CONFIG_PORT: 1000
      # 如果需要,还可以配置Pro环境

2.分布部署

部署1个Portal,部署多个Dev容器实例和多个Fat容器实例.

假设IP10.0.1.99为负载均衡器,如Nginx. Nginx开80给多个Dev实例的config做负载均衡,开8081给多个Fat实例做负载均衡.

先说Dev服务.

Dev使用对应数据库中ServerConfigeureka.service.url有两种配置方式:

  1. 配置字段值为http://localhost:8080/eureka/. 此时可以有两种部署模式:
  • 第一种,设置DEV_DB以及账号密码后,无需其他的额外设置,容器中会启动config和admin服务.admin会通过eureka.service.url的值连接config服务向其中的Meta Server注册.此时如果启动Portal,则也必须设置DEV_DB启动config和admin,因为portal服务从Meta Server拿到的地址是localhost.
  • 第二种,设置DEV_DB以及账号密码,并设置ONLY_CONFIG值为TRUE,则DEV服务容器中只会启动config服务.而作为Portal的容器同第一种一样,需要设置DEV_DB启动config和admin.这种配置的优点是DEV实例不在启动admin服务,因为client只连接config服务获取配置,而admin服务是配合portal服务进行操作,因此只需作为Portal的那个容器启动portal/admin/config三个服务即可,这样节省了DEV实例的内存和cpu的消耗.因为一个admin大概占用240-260MB的内存.(数据来自1.1.0版本) 此时Nginx可以只开config的80端口做负载均衡.
  1. 配置字段值为http://10.0.1.99:80/eureka/.
  • 此时服务启动后config和admin都会向该nginx代理端口后config中的Meta Server注册,因此建议admin的端口使用默认端口,然后在Nginx上同样开启对admin的代理并可以只放一个admin实例供portal使用.然后可选设置DEV_LB为Nginx代理地址,方便在Eureka页面查看.
  • 同样的,DEV服务容器也可以配置ONLY_CONFIG只启动config,但在作为Portal的容器中可以配置DEV_DB,需要同时启动admin和config,并将admin配到nginx中去,即将portal容器的admin作为nginx的admin负载代理的后端,所以portal连接的admin服务实际还是在同一个容器内. 如果设置了ONLY_CONFIG,也可以不设置XXX_LB地址,但还是推荐设置LB值,这样方便在Eureka页面查看,页面上也不会报错,虽然可以忽略这个错误.

这在以上两种方法同样适用于fat,uat,pro服务的配置.

这里的Dev服务,使用1的方法的第一种部署模式,Nginx只需开放80端口给client做Dev的负载代理,不过这样有点浪费资源,因为会同时启动admin和config.

version: '2'
services: 
  apollo-dev:
    image: idoop/docker-apollo:latest
    restart: always
    # admin和config都运行着,但此处只需暴露config. 当然也可以用使用host网络模式,不过会同时暴露config和admin
    ports:
    - 8080:8080
    environment:
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password

Fat服务使用2方法的第二种部署模式,此时需要在Nginx上开放两个端口,一个config,一个admin,并只将portal中的admin配置到nginx中,建议admin用默认端口.

version: '2'
services:
  apollo-fat:
    image: idoop/docker-apollo:latest
    restart: always
    # 可以用host模式,fat下config默认为8081,admin默认为8091,配置对应到nginx.
    network_mode: host
    environment:
      FAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
      ONLY_CONFIG: TRUE
      # LB 这里用域名也可以,但要保证能被正常解析出IP.
      FAT_LB: 10.0.1.99

单独部署的Portal配置

version: '2'
services:
  portal:
    container_name: apollo-portal
    image: idoop/docker-apollo:latest
    restart: always
    #  portal容易出现504错误,此时可以尝试直接host模式,方便调试.
    network_mode: host
    environment:
      # 配置portal数据库ServerConfig表apollo.portal.envs字段值为要开启的环境,这里是:dev,fat
      PORTAL_DB: jdbc:mysql://10.0.0.8:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password

      # 因为dev环境设置了ServerConfig表eureka.service.url字段值为localhost,所以需要在本地启动config和admin.
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password

      # 配置fat,同样子启动admin和config,在nginx中配置admin重定向回它自己,也可以将config添加到nginx负载代理中成为负载的一员.
      FAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
      

以上的配置,无论是dev还是fat,若是portal和这两个环境的config都在同一个网络中,则并无大碍,可如果两者是在不同网络,则需要做出一些调整,这时可以参考下方云上config 线下portal的例子.

3.云上Config 线下Portal

云上线下部署的情况和分布式部署大同小异,只是因为网络不同需要做些微调整。

类似阿里云这样的可能是通过弹性IP访问管理云上的Apollo服务,那么config连接的数据库中ServerConfig表的eureka.service.url字段值也是有两种配置方式:

  1. 配置字段值为http://localhost:8080/eureka/

部署方式同分布部署的第一种类似,只不过线下的portal容器需要连接线上的相关数据库,比如线上启动了Pro环境服务实例,则线下的portal容器中就需要配置PRO_DB用于启动admin和config.如果此时不方便暴露MySQL到公网,那么可以参考下方第二种方式.

云上的容器配置:

version: '2'
services:
  apollo-pro-config:
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      ONLY_CONFIG: "TRUE"
      PRO_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloConfigDBPro?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      # 如果有负载均衡器,则可以配置LB参数
      # PRO_LB: 10.10.10.10

线下的portal容器的配置,需要连接线上PRO的数据库,用于启动admin和config:

version: '2'
services:
  portal:
    container_name: apollo-portal
    image: idoop/docker-apollo:latest
    restart: always
    #  portal容易出现504错误,此时可以尝试直接host模式,方便调试.
    network_mode: host
    environment:
      PORTAL_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password
      
      PRO_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
  1. 配置字段值为http://阿里云弹性公网IP:config映射端口/eureka/

此种方式的配置就是在绑定了弹性IP的ECS上运行一个带config和admin的容器,并开放config和admin的端口映射到公网供线下的portal连接,此时需要将对应数据库中ServerConfig表的eureka.service.url字段值填为弹性IP与config映射出来的端口.即如果你要阿里云VPC中启动多个Pro环境服务实例并有负载均衡,那么就将容器PRO_LB设置为负载均衡的地址,而绑定弹性IP的ECS上起来的容器实例的PRO_LB设置为弹性IP,并且由于这个实例需要供portal连接,因此容器内部还需要运行admin服务. 弹性IP地址也可以用域名替换

云上只供client连接的容器可以如下配置

version: '2'
services:
  apollo-pro-config:
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      ONLY_CONFIG: "TRUE"
      PRO_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloConfigDBPro?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      # 如果有负载均衡器,则可以配置LB参数
      # PRO_LB: 10.10.10.10

假设弹性IP为1.1.1.1,映射8083为config服务,8093为admin服务.绑定了弹性IP的ECS上运行的容器配置如下,记住不要设置ONLY_CONFIG:

version: '2'
services:
  apollo-pro
    image: idoop/docker-apollo:latest
    restart: always
    ports:
      - "8083:8083"
      - "8093:8093"
    environment:
      PRO_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloConfigDB?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      # 此处LB设置必须为弹性IP,且同数据库中的eureka.service.url地址一样.
      PRO_LB: 1.1.1.1

线下Portal

version: '2'
services:
  apollo-portal
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      PORTAL_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password
      
      #只需配置Pro服务的远程地址.
      PRO_URL: http://1.1.1.1:8083

最后说一句,其实第二种方法暴露admin和config到公网是及其危险的,因为这两个是基于内部信任网络而运行的服务.

因此推荐使用第一种方式,虽然数据库暴露,但是做好数据库账号的安全认证事项,比如基于IP限制的数据库账号连接,这就极大的消除了安全隐患.

Clone this wiki locally