一、概述

disconf 是一个分布式配置文件管理平台,提供统一的方式管理所有配置文件。主要有两个部件:

  • disconf-web:管理配置文件的网络平台。
  • disconf-client:使用配置的项目,通常是自己的项目。

二、项目依赖

  • MySQL
  • Tomcat
  • Nginx
  • zookeeper
  • Redis

三、安装 disconf-web

以下步骤构建项目。

  1. 克隆 disconf 项目到本地,这里假设是 /home。把 disconf-web 拷贝到 /home 目录。
  2. 新建目录:
    • /home/work/dsp/disconf-rd/online-resources(存放自定义配置文件)。
    • /home/work/dsp/disconf-rd/war(deploy 目录)。
  3. 拷贝 /disconf-web/profile/rd/ 目录下的文件到 /home/work/dsp/disconf-rd/online-resources
    • application-demo.properties 更名为 application.properties
    • application.propertiesdomain 改为服务器地址,本地就是 localhost
    • 一定要配置两个 redis client(可以配置同样的两个,名字不同就行了)。
    • 修改文件。
  4. 建构项目:
  ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
  WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war
  export ONLINE_CONFIG_PATH
  export WAR_ROOT_PATH
  cd disconf-web
  sh deploy/deploy.sh

下面步骤部署项目。

  1. 数据库:参考 sql/readme.md 来进行数据库的初始化。
  2. 部署 war:修改 server.xml, 在 Host 节点下添加 <Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>
  3. 修改 Nginx 配置文件 nginx.conf
    • 上游服务器是 Tomcat,默认端口8080。
    • server_name 改为服务器名,本地就是 localhost
  `upstream disconf {
      server 127.0.0.1:8080;
  }

  server {
      include     mime.types;
      default_type    application/octet-stream;

      listen   8081;
      server_name localhost;
      access_log /home/work/var/logs/disconf/access.log;
      error_log /home/work/var/logs/disconf/error.log;

      location / {
          root /home/work/dsp/disconf-rd/war/html;
          if ($query_string) {
              expires max;
          }
      }

      location ~ ^/(api|export) {
          proxy_pass_header Server;
          proxy_set_header Host $http_host;
          proxy_redirect off;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Scheme $scheme;
          proxy_pass http://disconf;
      }
  }

启动项目

  1. 启动 Tomcat、Nginx。
  2. 访问 http://localhost:8081/

四、配置 disconf-client

1、添加 maven 依赖:

<dependency>
    <groupId>com.baidu.disconf</groupId>
    <artifactId>disconf-client</artifactId>
    <version>2.6.36</version>
</dependency>

2、disconf 启动文件,disconf.properties:

  • conf_server_host:配置服务器,也就是 disconf-web 的地址
  • app:App 名字。
  • version:版本,和 APP 的版本一致。
  • env:环境,和 APP 的版本一致。
  • debug:和 APP 的版本一致。
  # 是否使用远程配置文件
  # true(默认)会从远程获取配置 false则直接获取本地配置
  enable.remote.conf=true

  # 配置服务器的 HOST,用逗号分隔  127.0.0.1:8000,127.0.0.1:8000
  conf_server_host=127.0.0.1:8080

  # 版本, 请采用 X_X_X_X 格式
  version=1_0_0_0

  # APP 请采用 产品线_服务名 格式
  app=disconf_demo

  # 环境
  env=rd

  # debug
  debug=true

  # 忽略哪些分布式配置,用逗号分隔
  ignore=

  # 获取远程配置 重试次数,默认是3次
  conf_server_url_retry_times=3
  # 获取远程配置 重试时休眠时间,默认是5秒
  conf_server_url_retry_sleep_seconds=5

3、配置文件添加 disconf 支持:

<context:component-scan base-package="com.example"/>

<aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 必须支持 AOP -->

<!-- 使用disconf必须添加以下配置 -->
<bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
      destroy-method="destroy">
    <property name="scanPackage" value="com.example.disconf.demo"/> <!-- 要扫描的包 -->
</bean>
<bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
      init-method="init" destroy-method="destroy">
</bean>

4、添加要托管的文件:

<!-- 使用托管方式的disconf配置(无代码侵入, 配置更改会自动reload)-->
<bean id="configproperties_disconf" class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">
  <property name="locations">
    <list> 
      <!-- 要托管的文件列表 -->
      <value>classpath:/autoconfig.properties</value>
    </list>
  </property>
</bean>

<bean id="propertyConfigurer" class="com.baidu.disconf.client.addons.properties.ReloadingPropertyPlaceholderConfigurer">
  <property name="ignoreResourceNotFound" value="true" />
  <property name="ignoreUnresolvablePlaceholders" value="true" />
  <property name="propertiesArray">
    <list>
      <ref bean="configproperties_disconf" />
    </list>
  </property>
</bean>

5、把文件上传到 disconf-web。