disconf-web安装
===============

分布式配置Web平台服务 模块

推荐使用最新的Chrome或Firefox浏览.

开放API
-------

-  让开发者具有自定义定制web控制台界面的能力: `Tutorial12 open api for
   web <../../tutorial-web/12-open-api-for-web.html>`__

运行样式
--------

主页
~~~~

|image0|

登录页
~~~~~~

可以使用 admin admin 进行登录。

|image1|

主界面
~~~~~~

|image2|

左上角可以选择APP和环境，选择之后，就会在中间出现若干个版本，

选择版本后，就会显示 APP、环境、版本 三个条件下的配置列表：

|image3|

表格中 各个列的意义是：
^^^^^^^^^^^^^^^^^^^^^^^

-  APP：使用哪个APP，及它的ID
-  KEY：配置文件或配置项
-  配置内容：配置文件或配置项在配置中心中的值
-  实例列表：使用此配置文件或配置项的所有实例列表，及每个实例的配置值。如果实例的配置值与配置中心的值不一致，这里会标识出来。
-  修改时间：修改此配置的最后一次时间
-  操作：个性、删除、下载

右上角可以
^^^^^^^^^^

新建配置项、新建配置文件、新建APP

表格右上方
^^^^^^^^^^

可以批量下载所有配置文件至本地，还可以查看ZK上的部署情况。

How to deploy
-------------

安装依赖软件
~~~~~~~~~~~~

-  安装Mysql（Ver 14.12 Distrib 5.0.45, for unknown-linux-gnu (x86\_64)
   using EditLine wrapper）
-  安装Tomcat（apache-tomcat-7.0.50）
-  安装Nginx（nginx/1.5.3）
-  安装 zookeeeper （zookeeper-3.3.0）
-  安装 Redis （2.4.5）

准备配置
~~~~~~~~

**将你的配置文件放到此地址目录下（以下地址可自行设定）：**

::

    /home/work/dsp/disconf-rd/online-resources

**如果不确定如何配置，可以拷贝/disconf-web/profile/rd/目录下的文件，拷贝过去后修改即可。**

配置文件包括：

::

    - jdbc-mysql.properties (数据库配置)
    - redis-config.properties (Redis配置，主要用于web登录使用)
    - zoo.properties (Zookeeper配置)
    - application.properties (应用配置）

注意，记得执行将application-demo.properties复制成application.properties：

::

    cp application-demo.properties application.properties 

***注意，即使只有一个redis，也应该配置两个redis
client，否则将造成内部错误。***

**设置War包将要被部署的地址（以下地址可自行设定）：**

::

    /home/work/dsp/disconf-rd/war

构建
~~~~

::

    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

这样会在 /home/work/dsp/disconf-rd/war 生成以下结果：

::

    -disconf-web.war  
    -html  
    -META-INF  
    -WEB-INF

上线前的初始化工作
~~~~~~~~~~~~~~~~~~

**初始化数据库：**

| 可以参考 sql/readme.md 来进行数据库的初始化。注意顺序执行
| 0-init\_table.sql
| 1-init\_data.sql
| 201512/20151225.sql
| 20160701/20160701.sql

里面默认有6个用户（\ **请注意线上环境删除这些用户以避免潜在的安全问题**\ ）

+-------------+---------------+
| name        | pwd           |
+=============+===============+
| admin       | admin         |
+-------------+---------------+
| testUser1   | MhxzKhl9209   |
+-------------+---------------+
| testUser2   | MhxzKhl167    |
+-------------+---------------+
| testUser3   | MhxzKhl783    |
+-------------+---------------+
| testUser4   | MhxzKhl8758   |
+-------------+---------------+
| testUser5   | MhxzKhl112    |
+-------------+---------------+

如果想自己设置初始化的用户名信息，可以参考代码来自己生成用户：

::

    src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java

部署War
~~~~~~~

修改server.xml文件，在Host结点下设定Context：

::

    <Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>

并设置端口为 8015

启动Tomcat，即可。

部署 前端
~~~~~~~~~

修改 nginx.conf

::

    upstream disconf {
        server 127.0.0.1:8015;
    }

    server {

        listen   8081;
        server_name disconf.com;
        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;
        }
    }

关于host
~~~~~~~~

这里的 host 设置成 disconf.com （可以自定义），但它 必须与
application.properties 里的domain一样。

然后浏览器的访问域名也是这个。

业务功能
--------

-  支持用户登录/登出
-  浏览配置

   -  按 APP/版本/环境 选择

-  修改配置

   -  修改配置项
   -  修改配置文件

-  新建配置

   -  新建配置项
   -  新建配置文件
   -  新建APP

架构方案
--------

Nginx(处理静态请求) + Tomcat(处理动态请求）

-  **后端**

   -  SpringMvc（Spring 4.1.7.RELEASE)
   -  Jdbc-Template
   -  Mysql
   -  RestFul API
   -  Redis for user login/logout
   -  H2内存数据库测试方案/Junit/SpringTest

-  **前端**

   -  HTML
   -  Jquery(1.10.4)：JS工具集合
   -  Bootstrap(2.3.2)：界面UI
   -  Node(ejs/fs/eventproxy): 用于前端的HTML的模板化管理

-  **前后端接口(前后端分离)**

   -  完全Ajax接口
   -  JSON
   -  RestFul API

.. |image0| image:: http://ww1.sinaimg.cn/mw1024/60c9620fgw1ekdfiw180rj20vt0gawfr.jpg
.. |image1| image:: http://ww4.sinaimg.cn/mw1024/60c9620fgw1ekdfjkgbdcj20t70ie757.jpg
.. |image2| image:: http://ww3.sinaimg.cn/mw1024/60c9620fgw1emxv1nw0u4j20qp0homy0.jpg
.. |image3| image:: http://ww1.sinaimg.cn/mw1024/60c9620fgw1emyww39wjmj20qw0keq6m.jpg

