______ _ ______
|_ _ `. (_) .` ___ |
| | `. __ _ __ / .` \_|
| | | |[ | | | [ || |
_| |_.` / | \_/ |, | | `.___.`
|______.` `.__.`_/[___]`.____ .`
duic 配置中心
在軟體開發中隨著業務的需要, 需求的變更, 程式的靈活我們時常需要在專案中設定各種開關或者配置項. 在往常時一般會採用配置檔案的方式, 但是在這分散式叢集時代採用傳統的配置管理方式顯得有點力不從心. 同時在我們的 app/web 終端我們也時常需要各種配置, 在面對大量的終端配置獲取請求我們的配置中心需要高效能, 高穩定性.
duic 的誕生並不僅僅只是為了解決伺服器應用的配置
簡介
duic 是採用 spring-webflux 開發, 通過 RESTful 方式拉取配置, 支援配置合併, 內建 web 控制檯修改配置, 支援配置使用者許可權設定, 支援配置訪問 IP 限制, 支援 token 限制, 支援多應用多環境變數, 支援 docker, 支援叢集
特性
-
集中配置管理, 多應用多環境配置
在 web 控制檯中你可以建立多個配置, 相同應用不同環境的配置可以使用(profile)區分, 同一個應用下多個(profile)配置可以合併 https://duic.zhudy.io/index.html -
配置資料型別/資料格式
duic 採用 yaml 檔案格式管理配置, 天生支援資料型別及資料格式 -
HTTP 方式拉取配置
duic 採用 HTTP 的方式拉取配置, 所以你可以在任何應用中使用 duic 配置管理 -
配置狀態檢查
支援配置狀態檢查, 如果配置發生變動該狀態也會相應變化, 使用方可根據狀態的變化過載配置GET {base_uri}/apps/states/{name}/{profile}
-
多配置合併
相同應用(name)下的多個配置(profile)可以合併配置, 相同 key 的配置將以深度合併的方式返回 -
按需取獲取配置
你有時可能需要獲取某個 key 的配置而不是整個 profile 的配置GET {base_uri}/apps/{name}/{profile}/{key}
key 支援按.
分隔, 父 key 可以獲取子項的所有配置獲取
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 first multiple lines" }
獲取
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 檔案中編輯配置一樣的編輯它, 同時我們還提供了 duic-spring-cloud-config-client, 該庫支援@ConfigurationProperties
@Value
註解, 同時還支援配置熱載入 -
配置許可權管理
支援配置許可權管理, 使用者只可以修改自身擁有許可權的配置 -
配置支援 IP 訪問限制
每個 profile 的配置都可以設定 IP 訪問控制, 不在訪問限制內的 IP 將無法獲取配置資訊 -
配置支援 TOKEN 校驗
訪問有 TOKEN 校驗的配置必須在請求中帶上 TOKEN, TOKEN 校驗失敗將無法獲取配置資訊 -
支援 docker 部署
https://hub.docker.com/r/zhud… -
部署簡單
duic 部署只依賴於 mongodb, 叢集部署也只需要直接啟動多個例項即可, 不需要其它任何中介軟體或者服務 -
高效能
duic 是採用 spring-webflux 開發, 能最大化利用機器的硬體資源, 同時 duic 是直接將所有可用的配置直接載入在記憶體中, 在拉取配置時 直接從記憶體中返回配置資訊, 對於資料庫沒有任何壓力
資源
- duic openapi-3.0 介面文件
-
duic-java-client
java 版本客戶端程式- 支援 java
- 支援 spring
-
duic-spring-cloud-config-client
spring-boot 配置客戶端程式 - duic-examples 示例程式
部署
服務配置 application.yml
server:
port: 7777
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
duic:
root_email: kevinz@weghst.com
root_password: 123456
jwt:
secret: U2FsdGVkX1/jO0KlWumac4yDM8rOgWPkaV0KrSHDynWOP6n8FMJB9uSc8EW/qM+VagrMBAXGpyw=
expires_in: 180
- 應用服務埠
- MongoDB 連線地址
- 預設使用者登入郵箱
- 預設使用者登入密碼
- JWT HMAC256 簽名字串
- JWT 過期時間(單位:分鐘)
docker-compose 部署
在 docker-compose 配置中已經整合 mongodb, nginx, let’s encrypt, docker-gen 服務發現
啟動步驟
- git clone
$ git clone https://github.com/zhudyos/duic-docker-compose.git
- 進入資料夾
cd duic-docker-compose
- 為 start.sh 授權
$ chmod +x start.sh
- 啟動
$ ./start.sh
docker 部署
- 安裝 MongoDB
-
服務配置
1. 建立 **config** 資料夾 2. 在 **config** 資料夾中建立配置檔案 **application.yml** 3. **application.yml** 配置檔案將 **spring.data.mongodb.uri** 連線地址修改為安裝服務的 MongoDB 連線地址
-
啟動容器
$ docker run -d -p 7777:7777 -v $(pwd)/config:/app/config zhudyos/duic
將 application.yml 配置檔案放置在 config 目錄中並掛載到容器的 /app/config 目錄中, duic 則會使用指定的配置