# DuiC **Repository Path**: bocsoft/DuiC ## Basic Information - **Project Name**: DuiC - **Description**: DuiC 是采用 kotlin + spring-boot-2.0 + spring-webflux-5.0 开发的分布式统一配置管理系统, 它的目标是管理所有应用的配置(Any - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2018-04-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README :email: kevinz@weghst.com image:https://img.shields.io/travis/zhudyos/duic.svg["Travis",link="https://travis-ci.org/zhudyos/duic"] image:https://img.shields.io/docker/pulls/zhudyos/duic.svg["Docker Pulls",link="https://hub.docker.com/r/zhudyos/duic/"] image:https://img.shields.io/github/license/zhudyos/duic.svg["GitHub license",link="https://github.com/zhudyos/duic/blob/master/LICENSE"] ``` ______ _ ______ |_ _ `. (_) .' ___ | | | `. \ __ _ __ / .' \_| | | | |[ | | | [ || | _| |_.' / | \_/ |, | |\ `.___.'\ |______.' '.__.'_/[___]`.____ .' ``` = duic 配置中心 在软件开发中随着业务的需要, 需求的变更, 程序的灵活我们时常需要在项目中设置各种开关或者配置项. 在往常时一般会采用配置文件的方式, 但是在这分布式集群时代采用传统的配置管理方式显得有点力不从心. 同时在我们的 app/web 终端我们也时常需要各种配置, 在面对大量的终端配置获取请求我们的配置中心需要高性能, 高稳定性. **duic 的诞生并不仅仅只是为了解决服务器应用的配置** == 简介 duic 是采用 spring-webflux 开发, 通过 RESTful 方式拉取配置, 支持配置合并, 内置 web 控制台修改配置, 支持配置用户权限设置, 支持配置访问 IP 限制, 支持 token 限制, 支持多应用多环境变量, 支持 docker, 支持集群 == 特性 * **集中配置管理, 多应用多环境配置** + 在 web 控制台中你可以创建多个配置, 相同应用不同环境的配置可以使用(**profile**)区分, 同一个应用下多个(**profile**)配置可以合并 https://duic.zhudy.io/index.html[https://duic.zhudy.io/index.html] * **配置数据类型/数据格式** + duic 采用 yaml 文件格式管理配置, 天生支持数据类型及数据格式 * **HTTP 方式拉取配置** + duic 采用 HTTP 的方式拉取配置, 所以你可以在任何应用中使用 duic 配置管理 * **配置状态检查** + 支持配置状态检查, 如果配置发生变动该状态也会相应变化, 使用方可根据状态的变化重载配置 + `GET {base_uri}/apps/states/{name}/{profile}` * **多配置合并** + 相同应用(**name**)下的多个配置(**profile**)可以合并配置, 相同 **key** 的配置将以深度合并的方式返回 + `GET {base_uri}/apps/{name}/{profile},{profile2},{profile3}` + 合并方式按照请求 **URL** 中 **profile** 顺序, 后者覆盖前者 * **按需取获取配置** + 你有时可能需要获取某个 **key** 的配置而不是整个 **profile** 的配置 + `GET {base_uri}/apps/{name}/{profile}/{key}` + **key** 支持按 `.` 分隔, **父 `key` 可以获取子项的所有配置** + [IMPORTANT] ==== * **获取 `k1` 项的配置** + request:: `$ curl https://duic.zhudy.io/api/v1/apps/sample/first/k1` response:: + ``` { "string":"samples first k1 string", "int":11, "array":[ 1, 2, 3 ], "multiple_lines":"sample\nfirst\nmultiple\nlines" } ``` * **获取 `k1.string` 项的配置** + request:: `$ curl https://duic.zhudy.io/api/v1/apps/sample/first/k1.string` response:: + ``` { "value":"samples first k1 string" } ``` ==== * **完美支持 spring-boot** + duic 不仅可以管理你的业务配置, 同时还可以管理 spring-boot 自身的任何配置, 你可以像在 `application.yaml` 文件中编辑配置一样的编辑它, 同时我们还提供了 https://github.com/zhudyos/duic-spring-cloud-config-client[duic-spring-cloud-config-client], 该库支持 `@ConfigurationProperties` `@Value` 注解, 同时还支持配置热加载 * **配置权限管理** + 支持配置权限管理, 用户只可以修改自身拥有权限的配置 * **配置支持 IP 访问限制** + 每个 **profile** 的配置都可以设置 IP 访问控制, 不在访问限制内的 IP 将无法获取配置信息 * **配置支持 TOKEN 校验** + 访问有 TOKEN 校验的配置必须在请求中带上 TOKEN, TOKEN 校验失败将无法获取配置信息 * **支持 docker 部署** + https://hub.docker.com/r/zhudyos/duic[https://hub.docker.com/r/zhudyos/duic] * **部署简单** + duic 部署只依赖于 https://www.mongodb.com[mongodb], 集群部署也只需要直接启动多个实例即可, 不需要其它任何中间件或者服务 * **高性能** + duic 是采用 spring-webflux 开发, 能最大化利用机器的硬件资源, 同时 duic 是直接将所有可用的配置直接加载在内存中, 在拉取配置时 直接从内存中返回配置信息, 对于数据库没有任何压力 == 资源 * **https://github.com/zhudyos/duic/blob/master/src/main/doc/duic-open-api.yml[duic openapi-3.0 接口文档]** * **https://github.com/zhudyos/duic-java-client[duic-java-client]** + java 版本客户端程序:: ** 支持 java ** 支持 spring * **https://github.com/zhudyos/duic-spring-cloud-config-client[duic-spring-cloud-config-client]** + spring-boot 配置客户端程序 * **https://github.com/zhudyos/duic-examples[duic-examples 示例程序]** == 部署 .服务配置 application.yml **** ---- server: port: 7777 # <1> spring: jackson: default_property_inclusion: non_default date_format: yyyy-MM-dd'T'HH:mm:ss joda_date_time_format: yyyy-MM-dd'T'HH:mm:ss property_naming_strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES data: mongodb: uri: mongodb://127.0.0.1:27017/duic # <2> duic: root_email: kevinz@weghst.com # <3> root_password: 123456 # <4> jwt: secret: U2FsdGVkX1/jO0KlWumac4yDM8rOgWPkaV0KrSHDynWOP6n8FMJB9uSc8EW/qM+VagrMBAXGpyw= # <5> expires_in: 180 # <6> ---- <1> 应用服务端口 <2> MongoDB 连接地址 <3> 默认用户登录邮箱 <4> 默认用户登录密码 <5> JWT HMAC256 签名字符串 <6> JWT 过期时间(单位:分钟) **** --- . https://github.com/zhudyos/duic-docker-compose[docker-compose 部署] . docker 部署 .. 安装 MongoDB + https://www.mongodb.com/[https://www.mongodb.com/] + .. 服务配置 + ... 创建 `config` 文件夹 ... 在 `config` 文件夹中创建配置文件 `application.yml` ... `application.yml` 配置文件将 `spring.data.mongodb.uri` 连接地址修改为安装服务的 MongoDB 连接地址 .. 启用容器 + ```shell $ docker run -d -p 7777:7777 -v $(pwd)/config:/app/config zhudyos/duic ``` + TIP: 将 `application.yml` 配置文件放置在 `config` 目录中并挂载到容器的 `/app/config` 目录中, duic 则会使用指定的配置 === 相关项目 . https://projects.spring.io/spring-boot/[Spring Boot] . https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html[Spring WebFlux] . https://vuetifyjs.com[Vuetify]