1. 背景
项目部署最头疼之一就是各种配置:
- 一个项目往往会包含各式各样的配置信息,且不说数据库、redis、memcache这些常用的配置,还会有很多业务上的配置。
- 线上、测试和开发环境配置各不一样,每个环境都要保存一份
- 每次上线的时候,都要挨个check一下,
- 更改某个配置,需要重新上线代码
- ….
所以配置中心,在devops的开发中,是必不可少的,配置中心,也可以有效的避免,因为更改配置代码,导致的代码运行出错的风险。
2. Apollo
携程的Apollo配置中心,在业内算是比较有名的,github上面大概有8.5k的star。很多知名的公司也都在使用。至于实现的原理直接看github上面的wiki即可。
3. Do it
3.1 创建项目
3.1.1 克隆项目

3.1.2 按需更改docker-compose.yml
1 2 3 4 5
| feilongdeMacBook-Pro:apollo2 feilong$ cd scripts/docker-quick-start/ feilongdeMacBook-Pro:docker-quick-start feilong$ ll total 8 -rw-r--r-- 1 feilong wheel 663 Oct 27 14:56 docker-compose.yml drwxr-xr-x 4 feilong wheel 128 Oct 27 14:56 sql
|
因为我不是java技术栈,所以以docker运行。
本地由于8080端口被占用,所以把端口改为8082
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| version: '2'
services: apollo-quick-start: image: nobodyiam/apollo-quick-start container_name: apollo-quick-start depends_on: - apollo-db ports: - "8082:8080" - "8070:8070" links: - apollo-db
apollo-db: image: mysql:5.7 container_name: apollo-db environment: TZ: Asia/Shanghai MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' 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
|
3.1.3 启动服务
通过docker-compose启动Apollo服务
1 2 3 4 5 6
| feilongdeMacBook-Pro:docker-quick-start feilong$ docker-compose up -d Creating network "docker-quick-start_default" with the default driver Creating apollo-dbdata ... done Creating apollo-db ... done Creating apollo-quick-start ... done feilongdeMacBook-Pro:docker-quick-start feilong$
|
访问地址 localhost:8070,如果启动失败的话,请参考 #1473 docker_quick_start 起不来

3.2 创建配置
Apollo内置了账号 apollo/admin
,登录之后,可以看到有个默认的应用SampleApp

通过后台创建一个用于演示的redis的配置信息


创建结束后,点击“发布”按钮,发布最新的配置
3.3 运行测试
除了配置的server端,还要有接受配置的client端,我是PHP技术栈,所以就以PHP为主
3.3.1 初始化项目
配置php项目,通过composer
引入Apollo的SDK
1 2 3 4 5 6 7 8 9
| feilongdeMacBook-Pro:apollo feilong$ composer require multilinguals/apollo-client --ignore-platform-reqs Using version ^0.1.1 for multilinguals/apollo-client ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing multilinguals/apollo-client (v0.1.1): Downloading (100%) Writing lock file Generating autoload files
|

新建一个pull.php
,为了能够实时获取最新的配置,需要长时间运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php require_once 'vendor/autoload.php';
use Org\Multilinguals\Apollo\Client\ApolloClient;
$serverIp = '192.168.1.72:8082';
$appId = 'SampleApp'; $namespaces = array('application'); $apollo = new ApolloClient($serverIp, $appId, $namespaces); $apollo->save_dir = 'config';
$restart = true; do { $error = $apollo->start(); if ($error) { echo('error:'.$error."\n"); } } while ($error && $restart);
|
3.3.2 运行项目
新建一个config的目录,运行pull.php文件,获取配置信息

新建一个窗口,查看下config文件夹下的文件

发现新建了一个配置文件,里面是相应的配置信息
后台做一些更新操作


发布配置,查看配置文件

4. 总结
通过配置中心,我们就不用在部署的时候,手动一直更改项目的配置文件,可以实现自动化,降低人为风险。
此外,Apollo是版本控制的,支持回滚操作,这样,就算是出现手误,也能及时回滚配置,及时生效。
feilong
2018.10.27