1、前言
apollo的详细介绍我就不在这里多说了,官网上https://github.com/ctripcorp/apollo 已经说的非常明白了,我就不在这班门弄斧了,还不了解的小伙伴可以去官网上去了解下。
本篇文章只是记录我在使用docker部署的Apollo以及其集群的方式,给大家分享出来也自我做一个记录。
注意: 我是直接部署开始的,有关数据库的创建和初始化自己根据官网搞定。
2、源码编译
2.1 网络策略
网络策略直接使用官网描述的就可以,具体就是分别编辑apollo-configservice/src/main/resources/application.yml和apollo-adminservice/src/main/resources/application.yml,然后把需要忽略的网卡加进去。
如下面这个例子就是对于apollo-configservice,把docker0和veth.*的网卡在注册到Eureka时忽略掉。
spring: application: name: apollo-configservice profiles: active: ${apollo_profile} cloud: inetutils: ignoredInterfaces: - docker0 - veth.*
注意,对于application.yml修改时要小心,千万不要把其它信息改错了,如spring.application.name等。
2.2 动态指定注册网络
在使用docker搭建集群是, adminservice、configservice都需要向注册中心注册地址,如果不指定注册IP,注册的是docker内部的网络,导致网络不通。
在apollo-configservice/src/main/resources/bootstrap.yml和apollo-adminservice/src/main/resources/bootstrap.yml添加如下代码。
eureka: instance: ip-address: ${eureka.instance.ip-address}
这个地方取值从环境变量中取,容器外部来配置这样给部署带来了更大的灵活性。
到这源码的修改已经完成,直接build打包就可以了,拿到对应三个服务的zip包。
如果懒得修改,也可以直接从https://github.com/yuelicn/apollo.拉下我修改好的源码直接打包即可。
3、dockerfile编写
Apollo 的Dockerfile非常简单, 直接使用官方提供的即可。下方是adminservice示例。
# Dockerfile for apollo-adminservice # Build with: # docker build -t apollo-adminservice . # Run with: # docker run -p 8090:8090 -d --name apollo-adminservice apollo-adminservice FROM java:8-jre MAINTAINER Louis ENV VERSION 1.5.0 RUN apt-get install unzip ADD apollo-adminservice-${VERSION}-github.zip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip RUN unzip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip -d /apollo-adminservice && rm -rf /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip && sed -i '$d' /apollo-adminservice/scripts/startup.sh && echo "tail -f /dev/null" /apollo-adminservice/scripts/startup.sh EXPOSE 8090 CMD ["/apollo-adminservice/scripts/startup.sh"]
需要注意的,
1: version 需要根据自己打包的版本来修改
2: ADD zip包时修改你路径
三个服务的dockerfile文件基本相同,我就不在这多说了。需要的小伙伴直接从https://github.com/yuelicn/docker-apollo就可以了。
4 docker-compose 的编写
4.1 apollo-configservice-compose.yml
version: "3" services: apollo-configservice: container_name: apollo-configservice build: apollo-configservice/ image: apollo-configservice ports: - 8080:8080 volumes: - "/docker/apollo/logs/100003171:/opt/logs/100003171" environment: - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloConfigDB_TEST"htmlcode">docker-compose -f apollo-configservice-compose.yml up --build -d4.2 apollo-adminservice-compose.yml
apollo-adminservice-compose.yml的内容基本和apollo-configservice-compose.yml相同,在这我就不一一说明了。
4.3 apollo-portal-compose.yml
version: "3" services: apollo-portal: container_name: apollo-portal build: apollo-portal/ image: apollo-portal ports: - 8070:8070 volumes: - "/docker/apollo/logs/100003173:/opt/logs/100003173" - "/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties" environment: - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloPortalDB"htmlcode">docker-compose -f apollo-configservice-compose.yml up --build -d4.3.1 apollo-env.properties
local.meta=http://localhost:8080 dev.meta=${dev_meta} fat.meta=${fat_meta} uat.meta=${uat_meta} lpt.meta=${lpt_meta} pro.meta=${pro_meta}将自己的meta地址配置上, 没有的可以直接删除。有不明白的可以去官网上了解,环境配置完后修改对应的数据库中ApolloPortalDB.ServerConfig中apollo.portal.envs 值,填上你的配置的环境。否则我们在portal管理页面只能看到默认dev环境。
5 完整的docker-compose.yml
如果嫌弃一个个启动麻烦也以使用一个完整的compose来启动。
version: "3" services: apollo-configservice: container_name: apollo-configservice build: apollo-configservice/ image: apollo-configservice ports: - 8080:8080 volumes: - "/docker/apollo/logs/100003171:/opt/logs/100003171" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB"/docker/apollo/logs/100003172:/opt/logs/100003172" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB"/docker/apollo/logs/100003173:/opt/logs/100003173" - "/Apollo/docker-image/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloPortalDB"_blank" href="https://github.com/yuelicn/docker-apollo" rel="external nofollow" rel="external nofollow" rel="external nofollow" >https://github.com/yuelicn/docker-apollo6集群的搭建
Apollo集群的搭建非常简单,只需要修改两个地方就可以了,我们就以正式环境(pro)来说明,
在pro环境我们搭建了两套adminservice、configservice,数据库都是同一个ApolloConfigDB,1:将ServerConfig中的eureka.service.url值eureka连接信息两个都写上用逗号分隔:http://IP-1:port/eureka,http://IP-2:port/eureka
2:修改apollo-env.properties中对应环境的连接信息如: pro.meta=http://IP-1:port,http://IP-2:port 地址用逗号分隔就可以了。
之后重启服务就搞定了。
最后强调,adminservice、configservice 需要每个环境单独部署,包括数据库。portal只需要部署一套就可以了。
OK! 完成,上述是指个人搭建记录,希望对你有帮助,如果不对的地方欢迎指正。
修改后的源码地址:https://github.com/yuelicn/apollo
整理好的Docker-Apollo:https://github.com/yuelicn/docker-apollo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:docker部署apollo
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?