一、Apollo应用
1、介绍
- 项目地址:https://github.com/ctripcorp/apollo
- 使用手册:https://github.com/ctripcorp/apollo/wiki
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
2、 Apollo单机部署
单机版架构
我们接下来实现Apollo安装,安装前我们先介绍一下单机版装的架构,如下图:
上图展示了Apollo单机部署架构,我们对其中每个节点进行解释说明:
- Apollo Config Service:提供配置的读取、推送等功能,服务对象是 Apollo 客户端。
- Apollo Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal。
- Apollo Portal:Apollo 的管理界面,进行不同项目的配置(项目配置、权限配置等),服务对象是开发者和开放平台API。
Apollo安装方式有多种,官方提供了快速安装模式和Docker安装模式,我们把两种安装模式都实现一次,但如果是生产环境请使用分布式部署方案。分布式部署指南 (apolloconfig.com)
安装包下载
Apollo已经准备好了一个Quick Start安装包apollo-quick-start.zip
,里面包含了可以自动启动的jar包、以及所有依赖jar包、数据库脚本、内置Tomcat容器等,安装包共63M,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。
- Github下载地址:https://github.com/nobodyiam/apollo-build-scripts
Quick Start只针对本地测试使用,所以一般用户不需要自己下载源码打包,只需要下载已经打好的包即可。不过也有部分用户希望在修改代码后重新打包,那么可以参考如下步骤:
- 修改apollo-configservice, apollo-adminservice和apollo-portal的pom.xml,注释掉spring-boot-maven-plugin和maven-assembly-plugin
- 在根目录下执行mvn clean package -pl apollo-assembly -am -DskipTests=true
- 复制apollo-assembly/target下的jar包,rename为apollo-all-in-one.jar
创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可(项目的sql目录下)。
注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。
配置数据库连接
我们的数据库地址不是固定的,Apollo服务端需要知道如何连接到你前面创建的数据库,因此需要修改数据库连接地址,在安装包里有一个启动脚本demo.sh
,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息:
启动服务
将项目上传到服务器上,使用./demo.sh start命令启动项目。
启动成功后在浏览器输入http://服务器ip:8070/访问网站。 可以看到Apollo配置界面,登录账号apollo,密码admin
docker容器安装
下载docker-compose.yml和sql 文件夹到本地目录,如 docker-quick-start。 docker-compose.yml配置如下:
version: '2.1'
services:
apollo-quick-start:
image: nobodyiam/apollo-quick-start
container_name: apollo-quick-start
depends_on:
apollo-db:
condition: service_healthy
ports:
- "8080:8080"
- "8070:8070"
- "8090:8090"
links:
- apollo-db
#environment:
#JAVA_OPTS: '-Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m'
#APOLLO_CONFIG_DB_USERNAME: 'root'
#APOLLO_CONFIG_DB_PASSWORD: 'apollo'
#APOLLO_PORTAL_DB_USERNAME: 'root'
#APOLLO_PORTAL_DB_PASSWORD: 'apollo'
apollo-db:
image: mysql:8.0
container_name: apollo-db
environment:
TZ: Asia/Shanghai
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
#MYSQL_ROOT_PASSWORD: 'apollo'
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 5s
timeout: 1s
retries: 10
depends_on:
- apollo-dbdata
ports:
- "13306:3306"
volumes:
- ./sql:/docker-entrypoint-initdb.d
volumes_from:
- apollo-dbdata
apollo-dbdata:
image: alpine:latest
container_name: apollo-dbdata
volumes:
- /var/lib/mysql
目录结构如下:
在docker-quick-start目录下执行docker-compose up,第一次执行会触发下载镜像等操作,需要耐心等待一些时间。这里如果出现:docker-compose: 未找到命令...,需要通过下面步骤进行安装:
- sudo yum -y install epel-release 安装工具源
- sudo yum install python-pip 安装 python-pip 模块
- wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64 下载docker-compose 安装包
- mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose 重命名工具 docker-compose 名称,并移动到系统可执行目录
- chmod +x /usr/local/bin/docker-compose 修改文件的可执行属性
- docker-compose -version 验证
注1:数据库的端口映射为13306,所以如果希望在宿主机上访问数据库,可以通过localhost:13306,用户名是root,密码留空。
注2:如要查看更多服务的日志,可以通过
docker exec -it apollo-quick-start bash
登录, 然后到/apollo-quick-start/service
和/apollo-quick-start/portal
下查看日志信息。
需要注意的是,在Docker环境下需要通过下面的命令运行Demo客户端:
docker exec -i apollo-quick-start /apollo-quick-start/demo.sh client
默认情况下 apollo-configservice 只会注册内网 IP,只有通过上述命令启动的客户端能连通。