Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

liolay/go-config

Repository files navigation

go-config

基于golang的配置管理

功能

  • 客户端,服务端采用websocket链接,避免poll
  • 支持使用git作为配置版本管理
  • 支持git branch,tag, commitId作为获取配置条件
  • 支持仓库路由
  • 支持动态仓库配置,参见"仓库模型"
  • 支持按需推送配置更新
  • *计划支持 提供webhook api
  • *计划支持 可在浏览器页面直接修改仓库文件功能

支持

为了适应不同的系统,项目采用gox进行交叉编译,并使用upx对可执行文件进行压缩,这些可执行文件都存放于项目bin文件夹下,根据需要选择合适的可执行文件,目前支持的系统:

  • MacOS 32/64
  • Linux 32/64
  • Windows 32/64

使用

client

./client_{os}_{arch} configClient.yml

configClient.yml

#server端地址
server: localhost:5337
#如果Server不可用或其它原因导致连接断开,多久会进行重试,单位:秒
tick: 5
#要获取配置的应用信息
app:
 - name: app01 #应用名称
 label: test #对应git的branch,tag,commitId
 profile: dev #profile支持,设置此参数会只从服务端获取application-{profile}之类的文件
 #多个profile使用逗号","分隔
 homePath: #该应用的配置需要存放的本地目录
 - /Users/liolay/configRepo
# - name: app02 
# label: master 
# homePath: 
# - /Users/liolay/configRepo
#

server

./server_{os}_{arch} configServer.yml

configServer.yml

#本地存储配置仓库的目录
homePath: /Users/liolay/haha
#启动端口
port: 5337
#默认仓库地址
defaultRepo: git@github.com:liolay/go-config-repo-all.git
#有访问仓库权限的sshKey
sshKey: |-
 -----BEGIN RSA PRIVATE KEY-----
 MIIEpAIBAAKCAQEAyB+gq1xjj4HCe4hPLfA3a9y4pXVhrJfQQheHR1Mj9Y2eBJTm
 4jKtHwYWOxVbUahmim+vUuVia5nH5LYA9c/GZxUKrhHwND0hF7q7kKRMboT2w/2J
 JRPkVC3T2I02ptADTyFCZLNUViviFm6JoVEnEZAwlBDakvBQBqYgQstrSE2mH8wN
 niM7T7U6gPChpgPVpuTOBNbsgfag7bgAUVl56i3IFvht+N0LXKuNU0TTuMUq2+lR
 i+iha86OtkSYZqA34SXpoL2cyQJUikMkPsjXsxfpq1f35AbPC4FUfNnnN/NRBD/2
 jOHHQSHcMOq0Y/SapCXgxa4urlLkCOra1lC5hQIDAQABAoIBAQCeK5E7nzv5cp+a
 L3QVZOUI1V0DOTFHzn2Fnz8GeonTTGj2ShHp+g+mk5MCg7C3a5gQFpHFvRL65IJ/
 G/LKVbwEQTc9uWPWhfIf5TDV82WNfH3lDgBVU9GFTus/Hu1xDrtu0WS+XpZrvSdm
 f1s8Kv3r/cDHZkK7HEDD4I1i/Y//hinEOFbZglgmgGCwF3aZUdfj0wq1t1CnVJsj
 P3c+rbxtvBLPblizHunqMiNHM1DTYqK5sW92yyMvy6ZbN3fSntcEdUNLWl61uWh1
 E0eeg+GSuQoY/STFNqeTCqPju+gW8YR+Qix1R2n/AMo/D3HXcKxZCxWSD5zY8bH0
 C/5oZerBAoGBAOdLjhQb2L1xU0V7vHWIHsWeOOTaDu1IhratY+detY/D0VCbnTXx
 CZQmCgwT88/iPLVbEg3tsBBlVRYdTSOwtGk4Dvis83Izs1kU4RV8AI3+pZ74qA6O
 8V3xrvaIrnJWHX0M078EAOFnj9zvkMFQnovnSyli+GSzPAreHVAmOMANAoGBAN1/
 uojTaFg+cCfD6mQACo8DMN2CbWxJjXo4cpGv2HSYcjrVK+knjCdFhEnquLa0lQ+u
 TxvNTFDhPDnEXFUegZwD+ge2oDI7wP/qAJUpgU53W12OvaRs5gMHKyU8AHWrMgYk
 PvEwZIOlEc7ceyWzKCyt7nZwPHiteRsv+QgSS4lZAoGAUH27sQXL1ImWmAyqliBL
 zSv10raMEUl3ECWhKciM2L4lnq649Cew1Ky0PGXJKGQsClTqIIzCA8Kv7KU/zhbV
 gfRvSV0uz2RsmqioeAiSTNf8nSkdmwtltfLAl60TQFj1pCoNmmDzSX3308RPFOdQ
 dZGFV57IoIq7b3DCtLzIbRUCgYB8ZFAYqUlPTXllC6SlllRXrn4R2D6lcsUuX2cQ
 JEYWbMqx+aeYX+pY37SEYnpruQyBau3oeioives5sen8r44wVRdkn45lx6MC1aKQ
 ImgI7gT0jMY6AiJGjw8O8Rx8+LC2PELQ5tF8EQboOnA6YtvsA54JC80aJKn/t7hO
 bR/YuQKBgQDik5Es/Y2NM0JSKQwy7myGP4g5SadZd5Pv4r89OY/8mEOhKvHlaxki
 M2o2is6RiFTKn/aFWXl0/QKXyupq35jsesq78y29zoUuph7J5PYcLgFF2t49q3B4
 1Pn/53pMethW8zhphp3fM77vBkUu/NcusttbQjtdLEI7dkR/kqEc4fQ==
 -----END RSA PRIVATE KEY-----
#仓库 
route:
 - pattern: #匹配模式,支持"*"匹配,匹配规则是针对于 client端app节点的name和profile属性的,即:{name}/{profile}
 - "*/*"
 repo: git@github.com:liolay/${app}.git #仓库地址支持动态参数,这些参数来自于client端app节点的name和profile属性
 # ${app} -> client.app.name
 # ${profile} -> client.app.profile
 - pattern:
 - "n*/pro*"
 repo: git@github.com:liolay/${app}-${profile}.git

仓库路由和动态仓库为组织仓库模型提供了更好的灵活性,目前支持3种仓库模型,参见"仓库模型", 在配置动态仓库时如果不遵循仓库模型,将会得到意想不到的结果.

作为快速理解配置和仓库模型的对应关系,你可以理解为:

  • 模式一:仓库地址不含有变量
  • 模式二:仓库地址含有${app}
  • 模式三:仓库地址含有${app},${profile}

关于为什么不在仓库地址中加入${label}:个人认为,label应当仅作为版本管理使用,在仓库地址中加入改变量会影响到版本控制

刷新配置

server提供了如下endpoint可以方便刷新特定范围的配置:

endpoint 作用
/refresh 刷新所有配置
/refresh/:app 刷新指定应用配置
/refresh/:app/:profile 刷新指定应用,指定profile配置
/refresh/:app/:profile/:label 刷新指定应用,指定profile,指定label配置

About

基于golang的配置文件同步工具

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /