-
Notifications
You must be signed in to change notification settings - Fork 82
Home
Welcome to the docker-apollo wiki!
即开启包括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环境
部署1个Portal,部署多个Dev容器实例和多个Fat容器实例.
假设IP10.0.1.99
为负载均衡器,如Nginx. Nginx开80给多个Dev实例的config做负载均衡,开8081给多个Fat实例做负载均衡.
先说Dev服务.
Dev使用对应数据库中ServerConfig
表eureka.service.url
有两种配置方式:
- 配置字段值为
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端口做负载均衡.
- 配置字段值为
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的例子.
云上线下部署的情况和分布式部署大同小异,只是因为网络不同需要做些微调整。
类似阿里云这样的可能是通过弹性IP访问管理云上的Apollo服务,那么config连接的数据库中ServerConfig
表的eureka.service.url
字段值也是有两种配置方式:
- 配置字段值为
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
- 配置字段值为
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限制的数据库账号连接,这就极大的消除了安全隐患.