Docker部署Apollo配置中心

开始使用Docker部署Apollo配置中心之前,首先需要机器安装Docker环境本文使用Vresion: 2.0.0.0-mac81 (29211)测试部署,并使用以下镜像:

  • mysql
  • apollo-configservice
  • apollo-adminsrevice
  • apollo-portal

因为本文为纯部署目的,因此不在这里讲解Apollo的一些知识,如有需要可查看官方GitHub地址(https://github.com/ctripcorp/apollo)。

上面提到的镜像除了Mysql以外其余三个都需要自行编译成Docker镜像,由于最初是打算部署到k8s中的,所以是按照K8s的部署文档来编译相应的镜像的。本文使用使用dockre-compose部署dev、fat、uat、pro等环境,仅供测试时使用,详细生产环境部署可查看官方指导,这里先给出官方的分布式部署方案图。

关于如何编译apollo-configserviceapollo-adminsreviceapollo-portal这三个docker镜像可点击连接查看 K8s的部署文档 来编译Docker镜像。

Apollo使用的是Spring Cloud微服务架构,主要包括以下服务:

  • 注册中心(与apollo-configservice运行在一起)
  • 配置服务(apollo-configservice)
  • 管理服务(apollo-adminservice)
  • 管理门户(apollo-portal)

Apollo主要使用Mysql存储应用的配置以及自已的运行配置,Apollo使用以下数据库完成存储:

  • ApolloPortalDB
  • ApolloConfigDB

使用关系如下:

服务 ApolloPortalDB ApolloConfigDB
配置服务 Y
管理服务 Y
管理门户 Y

下面准备使用Dockere在dev环境部署Apollo。

准备工作

从Github来拉取最新的Apollo代码:

git clone [email protected]:ctripcorp/apollo.git

检查启动Docker是否启动:

docker info

由于使用dockre-compose部署,需要有一个dockre-compose配置文件,这里假设有一个apollo-compose.yaml配置文件,之后的部署都会更新这个文件。如果你的机器还未安装dockre-compose可查看 docker-compose安装指导

配置Mysql服务

部署之前先将对应环境的Mysql服务启动起来,这里使用docker-compose启动Mysql服务.

version: "3"
services:
 mysql-dev:
  image: mysql
  # restart: always
  environment:
   - MYSQL_ROOT_PASSWORD=123456
  expose:
   - "3306"
  volumes:
    - /Users/yjwfn/bin/apollo/scripts/sql:/sql      

上面的配置代码,将在dev环境运行mysql服务,这里挂载了一个目录:/Users/yjwfn/bin/apollo/scripts/sql:/sql,该目录里面存放Apollo的数据库文件,详细文件可查看 Apollo Sql文件

使用以下命令启动dev环境的mysql服务:

 docker-compose -f apollo-compose.yaml up -d mysql-dev

apollo-compose.yaml是你机上docker-compose配置文件,mysql-dev是mysql服务的名称。

启动完成后查看容器是否已经运行:

docker container ps

配置Apollo数据库

mysql服务启动完成之后,需要将apolloconfigdb.sqlapolloportaldb.sql这两个sql文件导入到数据库中,首先连接上docker中的mysql服务:

docker exec -it kube_mysql-dev_1 sh

kube_mysql-dev_1是mysql服务的容器名称,连接上容器后登陆到mysql服务导入sql文件:

mysql -p123456
source /sql/apolloconfigdb.sql
srouce /sql/apolloportaldb.sql

如果是部署apollo-configserviceapollo-apolloportaldb的话只需要导入/sql/apolloconfigdb.sql就行了,相应的部署apollo-portal只需要导入/sql/apolloportaldb.sql,方便演示这里就两个同时导入了。

导入完成后数据中现在应该有ApolloConfigDBApolloPortalDB两个数据库,首先需要对ApolloConfigDB里面的ServerConfig做一些修改,主要是对发服服务的服务器地址做一点变更:

use ApolloConfigDB;
update ServerConfig set Value="http://apollo-configservice-dev:8080/eureka/" where `key`="eureka.service.url";

apollo-configservice-dev是稍后我们需要发布的apollo-configservice服务的名称。修改完成之后可运行查询语句是否修改成功:

select * from ServerConfig;

修改完成之前退出dockre容器的连接就行了, 接下来部署apollo-configservice

配置服务部署(apollo-configservice)

Apollo配置服务(apollo-configservice)注册中心(Eureka)是运行在一起的,所以一般情况下是不需要再部署Eureka了。现在部署apollo-configservice服务,首先在apollo-compose.yaml添加apollo-configservice服务:

version: "3"
services:
 ... #省略其他服务
 apollo-configservice-dev:
  image:  <镜像地址>
  environment:
   DATASOURCES_URL: jdbc:mysql://mysql-dev:3306/ApolloConfigDB?characterEncoding=utf8
   DATASOURCES_USERNAME: root
   DATASOURCES_PASSWORD: 123456
   ENV: "dev"
  expose:
   - "8080"
  depends_on:
   - "mysql-dev"

注意apollo-configservice-dev依赖了上面部署的mysql-dev服务,并且注入了一些环境变量:

  • DATASOURCES_URL (mysql-dev连接地址)
  • DATASOURCES_USERNAME (mysql-dev连接用户)
  • DATASOURCES_PASSWORD (mysql-dev的root密码)
  • ENV (apollo-configservice)的运行环境

服务添加完成后执行以下命令启动apollo-configservice-dev服务:

docker-compose -f apollo-compose.yaml up -d apollo-configservice-dev

执行启动命令后等待几秒,然后查看服务是否启动成功。可通过在容器中查看启动日志来判断服务是否启动成功:

docker exec -it kube_apollo-configservice-dev_1 sh
cat /opt/logs/apollo-config-server/apollo-configservice.log

kube_apollo-configservice-dev_1apollo-configservice-dev的容器名称可通过docker container ps查看,看到如下日志基本可以确定服务已经成功启动:

2018-12-27 21:45:51.889  INFO 40 --- [Thread-17] c.n.e.registry.AbstractInstanceRegistry  : Registered instance APOLLO-CONFIGSERVICE/f2b6896763d0:apollo-configservice:8080 with status UP (replication=true)
2018-12-27 21:45:51.889  INFO 40 --- [Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl    : Got 1 instances from neighboring DS node
2018-12-27 21:45:51.889  INFO 40 --- [Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl    : Renew threshold is: 1
2018-12-27 21:45:51.889  INFO 40 --- [Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl    : Changing status to UP
2018-12-27 21:45:51.894  INFO 40 --- [Thread-17] e.s.EurekaServerInitializerConfiguration : Started Eureka Server

管理服务部署(apollo-adminservice)

管理服务的配置基本上与配置服务的配置基本相似,首先在apollo-compose中添加apollo-adminservice-dev服务:

version: "3"
services:
 ... #省略其他服务配置
 apollo-adminservice-dev:
  image:  <镜像名称>
  environment:
   DATASOURCES_URL: "jdbc:mysql://mysql-dev:3306/ApolloConfigDB?characterEncoding=utf8"
   DATASOURCES_USERNAME: root
   DATASOURCES_PASSWORD: 123456
   ENV: "dev"
  expose:
   - "8080"
  depends_on:
   - "mysql-dev"  #管理服务依赖之前配置的mysql-dev服务
   - "apollo-configservice-dev" #管理服务依赖配置服务

apollo-configservice-dev一样定义几个环境变量:

  • DATASOURCES_URL (mysql-dev连接地址)
  • DATASOURCES_USERNAME (mysql-dev连接用户)
  • DATASOURCES_PASSWORD (mysql-dev的root密码)
  • ENV (apollo-configservice)的运行环境

添加服务完成后开始启动apollo-adminservice-dev服务:

docker-compose -f apollo-compose.yaml up -d apollo-adminservice-dev

然后使用docker container ps查看容器名称,随后执行命令查看Log文件:

docker exec -it kube_apollo-adminservice-dev_1 sh
cat /opt/logs/apollo-admin-server/apollo-adminservice.log | tail -n 50

部分日志输出如下所示:

...
2018-12-27 21:56:45.722  INFO 40 --- [DiscoveryClient-InstanceInfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_APOLLO-ADMINSERVICE/8578c069d388:apollo-adminservice:8090: registering service...
2018-12-27 21:56:45.804  INFO 40 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ‘‘
2018-12-27 21:56:45.810  INFO 40 --- [main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8090
2018-12-27 21:56:45.810  INFO 40 --- [DiscoveryClient-InstanceInfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_APOLLO-ADMINSERVICE/8578c069d388:apollo-adminservice:8090 - registration status: 204

现在可以确定Eureka注册中心中已经有两个服务分别为APOLLO-CONFIGSERVICEAPOLLO-ADMINSERVICE服务。

管理控制台部署(apollo-portal)

成功部署配置服务(apollo-configservice)管理服务(apollo-adminsrevice)并启动成功后,现在可以部署管理控制台服务(apollo-portal)了。首先在apollo-compose.yaml文件添加两个服务:

 mysql-portal:
   image: mysql
   # restart: always
   environment:
    - MYSQL_ROOT_PASSWORD=123456
   expose:
    - "3306"
   volumes:
    - /Users/yjwfn/bin/apollo/scripts/sql:/sql 

 apollo-portal:
   image: <镜像名称>
   environment:
    DEV_META_SERVICE_NAME: apollo-configservice-dev
    DATASOURCES_URL: "jdbc:mysql://mysql-portal:3306/ApolloPortalDB?characterEncoding=utf8"
    DATASOURCES_USERNAME: root
    DATASOURCES_PASSWORD: 123456
   # expose:
   #  - "8070"
   ports:
    - 8070:8070 #方便测试导出端口
   depends_on:
    - "mysql-portal"
    - "apollo-configservice-dev"
    - "apollo-adminservice-dev"
  

管理控制台服务使用了单独的mysql服务,没有与apollo-configservice-devapollo-adminservice-dev共享一个mysql服务,同样mysql-portal也需要初始化数据库,这里我们首先启动mysql-portal服务:

#启动服务
docker-compose -f apollo-compose.yaml up -d mysql-portal
#连接到容器执行命令
docker exec -it kube_mysql-portal_1 sh
#登陆mysql
mysql -p123456
#导入sql文件
source /sql/apolloportaldb.sql

mysql-portal启动并配置完成后开始启动apollo-portal服务:

docker-compose -f apollo-compose.yaml up -d apollo-portal

启动成功后可访问 http://localhost:8070 启动管理控制台。

总结

由于现在公司也正在使用Apollo做为分布式配置中心,所以决定学习下Apollo的相关知识。 此文章只涉及到部署想着的知识,里面提到的一些内容其实都可以在官方文档中找到,这里不得不提下Apollo的文档资料还是非常全的。总的来说部署的过程还是有些坑的,但是经过一段时候的摸索,还是成功的在Docker中部署了,之后还会学习Apollo的使用相关的知识,后续再来分享。

最后附上完整的apollo-compose.yaml文件凑凑字数:

#坑一: mysql使用有对象设置环境变量无效

version: "3"
services:
 mysql-dev:
  image: mysql
  # restart: always
  environment:
   - MYSQL_ROOT_PASSWORD=123456
  expose:
   - "3306"
  volumes:
    - /Users/yjwfn/bin/apollo/scripts/sql:/sql      

 apollo-configservice-dev:
  image: harbor.rcntech.cn/apollo/apollo-configservice:v1.2.0
  environment:
   DATASOURCES_URL: jdbc:mysql://mysql-dev:3306/ApolloConfigDB?characterEncoding=utf8
   DATASOURCES_USERNAME: root
   DATASOURCES_PASSWORD: 123456
   ENV: "dev"
  expose:
   - "8080"
  depends_on:
   - "mysql-dev"

 apollo-adminservice-dev:
  image: harbor.rcntech.cn/apollo/apollo-adminservice:v1.2.0
  environment:
   DATASOURCES_URL: "jdbc:mysql://mysql-dev:3306/ApolloConfigDB?characterEncoding=utf8"
   DATASOURCES_USERNAME: root
   DATASOURCES_PASSWORD: 123456
   ENV: "dev"
  expose:
   - "8080"
  depends_on:
   - "mysql-dev"
   - "apollo-configservice-dev"
 mysql-portal:
   image: mysql
   # restart: always
   environment:
    - MYSQL_ROOT_PASSWORD=123456
   expose:
    - "3306"
   volumes:
    - /Users/yjwfn/bin/apollo/scripts/sql:/sql 

 apollo-portal:
   image: harbor.rcntech.cn/apollo/apollo-portal:v1.2.0
   environment:
    DEV_META_SERVICE_NAME: apollo-configservice-dev
    DATASOURCES_URL: "jdbc:mysql://mysql-portal:3306/ApolloPortalDB?characterEncoding=utf8"
    DATASOURCES_USERNAME: root
    DATASOURCES_PASSWORD: 123456
   ports:
    - 8070:8070
   depends_on:
    - "mysql-portal"
    - "apollo-configservice-dev"
    - "apollo-adminservice-dev"

原文地址:https://www.cnblogs.com/xwgblog/p/10188064.html

时间: 2024-10-06 02:18:25

Docker部署Apollo配置中心的相关文章

Centos7中使用Docker部署Apollo配置中心

采用微服务开发框架开发项目时会涉及多个系统,如果要更改配置参数需要在多个系统间逐一更改,比较费时,而且容易遗漏,效率低下,次问题可以采用Apollo配置中心的方式解决,下面将介绍如何配置: 准备环境:本地环境win7/win10,docker所在服务器centos7 第一步 下载Apollo到本地并解压到磁盘,URL:https://github.com/ctripcorp/apollo (linux: wget https://github.com/ctripcorp/apollo/archi

基于winserver的Apollo配置中心分布式&amp;集群部署实践(正确部署姿势)

前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候,每一步都踩着坑过来的.因此写文档与需要的朋友分享. 此篇文章不代表官方部署流程,只是自己的部署的实践方式,屏蔽了一些官方的多余的部署讲解.如果有问题还请到Apollo的wiki文档进行查看:https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D

Apollo配置中心介绍

1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限.审核机制-- 在这样的大环境下,传统的通过配置文件.数据库等方式已经越来越无法满足开发人员对配置管理的需求. Apollo配置中心应运而生! 1.2 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的

Apollo配置中心组件讲解

Apollo配置中心有什么组件,组件有什么作用 ? 从编译出来的jar包展开来讲,或是说运行包来说,只有4个组件,分别是: Portal 提供Web界面供用户管理配置 通过Meta Server获取Admin Service服务列表(IP+Port),通过IP+Port访问服务 在Portal侧做load balance.错误重试 Admin Service 提供配置管理接口 提供配置修改.发布等接口 接口服务对象为Portal Config Service Config Service 包中包

(一)Apollo配置中心介绍

1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限.审核机制…… 在这样的大环境下,传统的通过配置文件.数据库等方式已经越来越无法满足开发人员对配置管理的需求. Apollo配置中心应运而生! 1.2 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的

携程 Apollo 配置中心传统 .NET 项目集成实践

官方文档存在的问题 可能由于 Apollo 配置中心的客户端源码一直处于更新中,导致其相关文档有些跟不上节奏,部分文档写的不规范,很容易给做对接的新手朋友造成误导. 比如,我在参考如下两个文档使用传统 .NET 客户端做接入的时候就发现了些问题. ctripcorp/apollo - .Net客户端使用指南 ctripcorp/apollo.net - .Net客户端之与 System.Configuration.ConfigurationManager 集成 两个文档关于标识应用身份的AppI

Apollo配置中心动态刷新日志级别

Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @date: 2019/1/21:下午5:00 */ @Configuration public class LogListenerConfig { private static final Logger logger = LoggerFactory.getLogger(LoggerConfigurati

apollo 配置中心的安装与使用

请参考:https://blog.csdn.net/z960339491/article/details/80667559 一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 官方github:https://github.com/ctripcorp/apollo 作者对Apollo对介绍:https://github.com/ctripco

Apollo配置中心-Api方式与Java方式测试

[toc] 这个部分来演示 创建一个项目并添加测试的key值:timeout=8000 ,batch=9000 通过提供一个token的方式,利用api获取配置信息 创建一个spring boot项目,引入apollo架包,读取配置 通过变跟配置文件,看java项目是不是实时更新配置 创建Apollo项目 点击添加项目 输入项目信息,注意应用ID后面也是应用读取的唯一标识 选择DEV环境,新增配置, 我这里有测试过,所以dev环境多了个gzywtest-c1集群,默认情况下,点击环境都是选择de