一、概述
disconf 是一个分布式配置文件管理平台,提供统一的方式管理所有配置文件。主要有两个部件:
- disconf-web:管理配置文件的网络平台。
- disconf-client:使用配置的项目,通常是自己的项目。
二、项目依赖
- MySQL
- Tomcat
- Nginx
- zookeeper
- Redis
三、安装 disconf-web
以下步骤构建项目。
- 克隆 disconf 项目到本地,这里假设是
/home
。把 disconf-web 拷贝到/home
目录。 - 新建目录:
/home/work/dsp/disconf-rd/online-resources
(存放自定义配置文件)。/home/work/dsp/disconf-rd/war
(deploy 目录)。
- 拷贝
/disconf-web/profile/rd/
目录下的文件到/home/work/dsp/disconf-rd/online-resources
。- 把
application-demo.properties
更名为application.properties
。 - 把
application.properties
的domain
改为服务器地址,本地就是localhost
。 - 一定要配置两个 redis client(可以配置同样的两个,名字不同就行了)。
- 修改文件。
- 把
- 建构项目:
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
下面步骤部署项目。
- 数据库:参考
sql/readme.md
来进行数据库的初始化。 - 部署 war:修改
server.xml
, 在Host
节点下添加<Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>
。 - 修改 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;
}
}
启动项目
- 启动 Tomcat、Nginx。
- 访问
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。