Apollo

1、Apollo配置中心

1.1、Apollo简介

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo支持4个维度管理Key-Value格式的配置:Namespace(名称空间)、Cluster(集群)、Environment(环境)、Application(应用)。
具体介绍参考:https://github.com/ctripcorp/apollo/wiki

1.2、Apollo特性

统一管理不同环境,不同集群的配置
配置修改实时生效
版本发布管理
灰度发布
权限管理,发布审计,操作审计
客户端配置信息监控
提供java和.net原生客户端,且支持http接口

2、docker-compose部署Apollo

2.1、环境需要

jdk 1.8版本以上 mysql 5.6版本以上 maven最新的就好 docker docker-compose

安装8版本jdk

# yum -y install java-1.8.0-openjdk*

使用yum安装5.7.0数据库连接也可以使用docker或者二进制安装

mvn安装

docker compose 配置network 缺省使用host docker-compose配置_spring

# cd /opt/
# wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz --no-check-certificate
# tar xf apache-maven-3.9.3-bin.tar.gz
# mv apache-maven-3.9.3 maven
添加maven全局环境变量
# vim /etc/profile
export PATH="$PATH:/opt/maven/bin"
# source /etc/profile

查看版本

docker compose 配置network 缺省使用host docker-compose配置_spring_02

dokcer安装

访问阿里开源镜像网站配置使用yum安装docker

docker compose 配置network 缺省使用host docker-compose配置_spring_03


docker compose 配置network 缺省使用host docker-compose配置_spring_04


docker-compose安装

请参考这篇文章

2.2、从git上clone Apollo项目,上传至服务器

https://github.com/apolloconfig/apollo

下载最新版本的Apollo

进去后页面拉到最下面下载对应的源码包(源码包包含admin,config,portal)

docker compose 配置network 缺省使用host docker-compose配置_Dockerfile_05

在服务下载包

# cd /opt
# wget https://github.com/apolloconfig/apollo/archive/refs/heads/master.zip
# tar xf master.zip
# unzpi master.zip
# mv apollo-master apollo
# cd apollo

2.3、导入数据库配置

进入到源码数据库脚本目录将初始化sql导入到数据库

# cd /opt/apollo/scripts/sql/
# mysql -uroot -p < apolloconfigdb.sql
# mysql -uroot -p < apolloportaldb.sql

修改配置
进入文件目录,找到文件/opt/apollo/scripts/build.sh(linux) build.bat(windows)
修改build.sh中数据库配置以及所需环境配置

修改数据库连接配置,你的开发环境的ip和port,后续访问会用到

修改了脚本中的cd “${0%/*}” || exit为cd “/opt/apollo/scripts/修改原因为执行脚本报错,如果不报错可以不用修改

docker compose 配置network 缺省使用host docker-compose配置_spring_06


运行脚本,编译文件

sh build.sh或者./build.sh

编译完成后会在apollo-adminservice;apollo-configservice;apollo-portal生成打好的包在相应的target目录下.jar和-gitHub.zip以及src/main/docker/下的Dockerfile文件

将打包的包及Dockerfile文件移动目录下相对应的文件到该目录跟下

# cd /opt/apollo
# cp /opt/apollo/apollo-adminservice/target/apollo-adminservice-2.2.0-SNAPSHOT* /opt/apollo/apollo-adminservice/
# cp /opt/apollo/apollo-adminservice/src/main/docker/Dockerfile /opt/apollo/apollo-adminservice/
# cp /opt/apollo/apollo-configservice/target/apollo-configservice-2.2.0-SNAPSHOT* /opt/apollo/apollo-configservice/
# cp /opt/apollo/apollo-configservice/src/main/docker/Dockerfile /opt/apollo/apollo-configservice/
# cp /opt/apollo/apollo-portal/target/apollo-portal-2.2.0-SNAPSHOT* /opt/apollo/apollo-portal/
# cp /opt/apollo/apollo-portal/src/main/docker/Dockerfile /opt/apollo/apollo-portal/

修改3个插件的Docker file文件对应版本号变量

docker compose 配置network 缺省使用host docker-compose配置_docker_07

[root@localhost apollo]# vim apollo-configservice/Dockerfile

[root@localhost apollo]# vim apollo-adminservice/Dockerfile

[root@localhost apollo]# vim apollo-portal/Dockerfile

分别将变量修改为下图所示

docker compose 配置network 缺省使用host docker-compose配置_docker_08

编译docker-compose.yml文件,该文件和apollo-adminservice为同一级别文件目录

[root@localhost apollo]# cd /opt/apollo
编写docker-compose文件
[root@localhost apollo]# vim docker-compose.yml

version: "2"
 
services:
  apollo-configservice:                                         ##容器服务名
    container_name: apollo-configservice                        ##容器名
    build: apollo-configservice/                                ##Dockerfile路径
    image: apollo-configservice:2.2.0                           ##镜像名
    network_mode: host                                          ##网络设置
    ports:
      - "8080:8080"

    volumes:
      - "/docker/apollo/logs/100003171:/opt/logs/100003171"    ##将/opt/logs/100003171目录挂载到宿主机的/docker/apollo/logs/100003171方便在宿主机上查看日志
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.135.146:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - spring_datasource_username=root
      - spring_datasource_password=123456
 
  apollo-adminservice:
    container_name: apollo-adminservice
    build: apollo-adminservice/
    image: apollo-adminservice:2.2.0
    network_mode: host
    ports:
      - "8090:8090"

    depends_on:
      - apollo-configservice
    volumes:
      - "/docker/apollo/logs/100003172:/opt/logs/100003172"
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.135.146:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - spring_datasource_username=root
      - spring_datasource_password=123456
 
  apollo-portal:
    container_name: apollo-portal
    build: apollo-portal/
    image: apollo-portal:2.2.0
    network_mode: host
    ports:
      - "8070:8070"

    depends_on:
      - apollo-adminservice
    volumes:
      - "/docker/apollo/logs/100003173:/opt/logs/100003173"
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.135.146:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - spring_datasource_username=root
      - spring_datasource_password=123456

注意事项,

1: build: 中指定你Dockerfile文件的位置
2: environment 环境变量中指定你数据库的配置信息
3: eureka.instance.ip-address 指定注册到eureka地址,这个最好使用你物理机的内网地址。

特别注意: 启动前最好先修改ApolloConfigDB数据库中 ServerConfig中的eureka.service.url值,改为具体的IP

编译并启动:
[root@localhost apollo]# docker-compose -f docker-compose.yml up --build -d

执行完成后会生成三个新的docker镜像,看是否启动.如果有开启后妙计退出,可查看日志看是否有报错命令(dockers logs 镜像名)

docker compose 配置network 缺省使用host docker-compose配置_docker_09

看到启动后等待2-5分钟后访问http:serverID:8080即可
8080端口是:Eureka(注册中心)
8090端口是:adminservice
8070端口是:protal(web管理页面)
访问管理页面

登录初始账号跟密码是:apollo/admin

docker compose 配置network 缺省使用host docker-compose配置_Dockerfile_10

3、安装多环境apollo或者集群

部署多环境的apollo在其它节点不需要部署portal模块