采用微服务开发框架开发项目时会涉及多个系统,如果要更改配置参数需要在多个系统间逐一更改,比较费时,而且容易遗漏,效率低下,次问题可以采用Apollo配置中心的方式解决,下面将介绍如何配置:

准备环境:本地环境win7/win10,docker所在服务器centos7

第一步

下载Apollo到本地并解压到磁盘,URL:https://github.com/ctripcorp/apollo

(linux: wget https://github.com/ctripcorp/apollo/archive/master.zip)

第二步

编辑解压后的docker-compose.yml文件,内容如下:

version: "3"                                                                       ##版本信息

 

services:

  apollo-configservice:                                                            ##容器服务名     

    container_name: apollo-configservice                                           ##容器名

    network_mode: "host"                                                           ##绑定主机网络模式

    build: apollo-configservice/src/main/docker/                                   ##Dockerfile路径

    image: apollo-configservice

    ports:

      - "8081:8080"                                                                ##映射主机端口,8080为Java常用端口,避免将来冲突此处采用8081,apollo-configservice默认端口为8080

    volumes:

      - "/tmp/logs/100003171:/opt/logs/100003171"                                  ##将docker容器输出的日志目录绑定到主机的tmp文件夹下

    environment:

      - spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloConfigDB?characterEncoding=utf8     ##mysql连接字符串,该IP为mysql服务所在机器, 下面类同

      - spring_datasource_username=root

      - spring_datasource_password=xxx

 

  apollo-adminservice:

    container_name: apollo-adminservice

    network_mode: "host"

    build: apollo-adminservice/src/main/docker/

    image: apollo-adminservice

    ports:

      - "8090:8090"

    depends_on:

      - apollo-configservice

    volumes:

      - "/tmp/logs/100003172:/opt/logs/100003172"

    environment:

      - spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloConfigDB?characterEncoding=utf8

      - spring_datasource_username=root

      - spring_datasource_password=xxx

 

  apollo-portal:

    container_name: apollo-portal

    network_mode: "host"

    build: apollo-portal/src/main/docker/

    image: apollo-portal

    ports:

      - "8070:8070"

    depends_on:

      - apollo-adminservice

    volumes:

      - "/tmp/logs/100003173:/opt/logs/100003173"

    environment:

      - spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloPortalDB?characterEncoding=utf8

      - spring_datasource_username=root

      - spring_datasource_password=xxx

注意两点:

1. 我这里将本机的8081,8090,8070分别映射到apollo三个组件的不同端口,各位可以根据需要进行修改

2. mysql连接字符串我这里采用了外网IP的方式,通过固定IP加端口指定,root/xxx为连接账户信息

第三步

下载apollo的三个组件(目前最新为1.4.0),Url: https://github.com/ctripcorp/apollo/releases

l  apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端

l  apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka

l  apollo-portal:提供Web界面供用户管理配置

查找对应apollo-master下对应组件名的文件夹,进入在第二步的docker-compose文件中,build节点指定的Dockfile路径,将下载好的组件拷贝到该目录,如下

编辑该文件夹内的Dockerfile文件,修改环境变量VERSION:

改前:

改后(简化操作,我这里直接使用了下载组件去除名称后的版本号):

参照该操作,依次将三个组件操作完毕

第四步

1. 安装mysql5.7.19,下载地址:https://downloads.mysql.com/archives/community/

修改mysql配置参数(windows环境下my.ini文件,linux为my.cnf)

注:我这里为了简化操作直接在本地windows环境上操作,安装后没有在安装目录下找到配置参数文件,所以需要手动创建(如忘记安装目录可以在doc窗口执行命令查看: mysql --help,Default options are read from the following files in the given order)

进入安装目录,新建my.ini,内容如下

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

# 不限制IP,允许远程访问

bind-address = 0.0.0.0

[mysqld]

#设置3306端口

port = 3306

# 设置mysql的安装目录,自行修改

basedir=E:\Program Files (x86)\MySQL\MySQL Server 5.7

# 设置mysql数据库的数据的存放目录,自行修改

datadir=E:\Program Files (x86)\MySQL\MySQL Server 5.7\data

# 允许最大连接数

max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

#开启查询缓存

explicit_defaults_for_timestamp=true

#跳过数据库权限验证,可选

skip-grant-tables

2. 安装HeildiSQL,完成后打开并连接mysql数据库,用户root,密码空,选中mysql库执行下面的代码

-- 修改root用户密码

update user set authentication_string = password('xxx'), password_expired = 'N', password_last_changed = now() where user = 'root';

-- 授权root用户远程登录,%表示不限IP

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxx';

-- 刷新权限,一定要执行

flush privileges;

3. 重启mysql服务

第五步

使用工具HeildiSQL登录mysql,导入脚本对apollo数据库进行初始化,脚本目录:apollo-master\scripts\docker-quick-start\sql

导入完成后可以在数据库列表看到下图效果:

第六步

使用xftp工具将前面第一步、第二步、第三步准备好的apollo-master文件夹内所有文件都目标linux服务器,我这里采用centos7,上传到了桌面

在该文件夹下右键鼠标,新建终端,运行下面的脚本(建议管理员权限)

docker-compose up -d

看到上图内容时表示执行成功,然后使用下面的脚本查看容器状态

docker ps -a

留意apollo开头的容器状态,看到up表示成功了,如果是exited之类需要进入前面在docker-compose.yml文件夹指定的日志目录下查看异常信息,我的路径是:

第七步

进入Apollo的后台管理页面,账户apollo/admin

检查Eureka

第八步

1. 修改apollo-portal容器的环境变量

进入容器: docker exec -it apollo-portal /bin/bash

编辑环境变量apollo-env.properties

保存完毕后,Ctrl+D退出当前容器

2. 修改数据库ApolloConfigDB的serverconfig表中的eureka.service.url所在数据行对应的value列值

http://localhost:8081/eureka/  --端口见前面docker-compose.yml文件配置

3. 修改完成后,重启docker中的apollo三个容器

其它部署问题见:官方的解决方案

Centos中使用Docker部署Apollo的更多相关文章

  1. Centos 7使用docker部署LAMP搭建wordpress博客系统

    0.简要概述 LAMP是目前比较流行的web框架,即Linux+Apache+Mysql+PHP的网站架构方案.docker是目前非常流行的虚拟化应用容器,可以为任何应用创建一个轻量级.可移植的容器. ...

  2. CentOS中利用Docker安装RabbitMQ

    CentOS中利用Docker安装RabbitMQ 1.拉取镜像(带管理平台) #docker pull rabbitmq:3.7.7-management 2.启动容器: #docker run - ...

  3. CentOS中利用Docker安装Redis

    CentOS中利用Docker安装Redis 1.拉取镜像 #docker pull redis:4.0.10 2.加载镜像 #docker run -p 6379:6379 --name test- ...

  4. CentOS下利用Docker部署Surging

    原文:CentOS下利用Docker部署Surging 1. 安装Centos, 配置固定ip配置文件地址vi /etc/sysconfig/network-scripts/ifcfg-ens33`` ...

  5. Docker学习笔记之-在CentOS中安装Docker

    上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...

  6. Docker部署Apollo配置中心

    1.Apollot简述 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于 ...

  7. CentOS 中利用docker安装MySQL

    1.前提条件 centos7 且内核版本高于3.10, 可通过命令: uname -r 查看内核版本 2.利用yum 安装docker 安装一些必要的系统工具: sudo yum install -y ...

  8. CentOS利用Nginx+Docker部署.netcore应用

    安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...

  9. Centos下使用Docker部署asp.net core项目

    本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...

随机推荐

  1. 【leetcode】Reach a Number

    题目: You are standing at position 0 on an infinite number line. There is a goal at position target. O ...

  2. OpenQA.Selenium.Chrome Action滑动操作

    //[定位] //滑块元素 var wrapper = driver.FindElement(By.XPath("/html/body/div/div[1]/div[1]/div[2]&qu ...

  3. TypeScript作为前端开发你必须学习的技能(一)

    2019年,TypeScript已经开始渐渐的崭露头角,各大框架都说要使用TypeScript,虽然现在还没有完美,但是TypeScript很有可能会成为下一个主流技术. 废话就不多说了,直接开始吧. ...

  4. Haproxy-4层和7层代理负载实战

    目录 HAProxy是什么 HAProxy的核心能力和关键特性 HAProxy的核心功能 HAProxy的关键特性 HAProxy的安装和运行 安装 运行 添加日志 使用HAProxy搭建L7负载均衡 ...

  5. Zabbix MySQL监控模板添加

    zabbix自带的mysql监控指标很少,所以需要新增一些监控项 1.下载知数堂维护的percona-monitoring-plugin-zabbix代码 # cd /opt # wget https ...

  6. 从1G到5G发展史(3GPP是个什么组织 为啥5G标准离不开它)

    1.“3GPP”组织建立的来龙去脉 3GPP一直以来在人们心中是一个神秘的组织,很多用户对于它的理解和认知,说不清,道不明.最近关于5G网络的诸多报道,都陈述了“5G网络”的标准是由“3GPP”来规定 ...

  7. 【bzoj1059】[ZJOI2007]矩阵游戏

    *题目描述: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: ...

  8. 论文阅读:FlexGate: High-performance Heterogeneous Gateway in Data Centers

    摘要: 大型数据中心通过边界上的网关对每个传入的数据包执行一系列的网络功能,例如,ACL被部署来阻止不合格的流量,而速率限制被用于防止供应商过度使用带宽,但是由于流量的规模巨大,给网关的设计和部署带来 ...

  9. java语言对比,jvm,垃圾回收

    1.java/c++/ruby/python集中语言的对比 java和c++ 1,没有指针 2,没有多继承 3,没有const 4,在实现多态上的区别    tc++里面的虚函数,纯续函数和java里 ...

  10. vscode中让html中php代码高亮

    找到设置中的文件设置中的files.associations,增加以下内容(注意一下内容要放在右侧的用户设置中,而不是放在中间的默认设置中): { // Configure file associat ...