Skip to main content

qconf

统一配置中心:FastAPI 服务端(Web 管理界面 + HTTP 同步协议)+ Python 客户端 SDK。 客户端只配 服务端地址 + 环境名,按 key 取值;本地落盘缓存,默认每 60 秒带着内容摘要去问一次 「变了吗」,没变就不传配置内容,变了才拉全量。

完整设计、实测数据与取舍见 DESIGN.md。

一键启动服务端

# Windows:双击 start_server.bat,或
python run.py                        # http://127.0.0.1:8000/admin/

# 已安装包的场景(PyPI 发布名是 qconf-center,导入名仍是 qconf)
pip install "qconf-center[server]"
qconf serve

首次打开 /admin/ 是三步引导(欢迎 → 设置管理员账号密码,带强度提示 → 完成页可直达签发 api_key);管理员存 SQLite(scrypt 哈希)。之后所有 API 都需要凭证:

  • 管理员会话:网页登录后自动持有(12 小时滑动有效期,改密码即全部注销)。
  • api_key(只读):在界面右上角「api_key」里签发,给客户端 / CI 拉取配置用。 每个 key 只有读权限,并可限定可访问环境范围(不选 = 全部环境);页面表格能看到创建时间、 最近使用时间、来源 IP、调用次数,可随时停用或删除。完整 key 只在签发时显示一次。 任何配置修改都必须用管理员账号在 Web 界面完成——api_key 请求写接口一律 403。

首次启动会在 ./qconf-data/qconf.db 建库:

  • default —— 内置环境,每次启动自动确保存在、不能删除(--no-seed 也会有),带 3 条基线配置, 界面里标了「内置」徽标且删除按钮禁用,API 删除返回 409。
  • dev / test / prod —— 示例环境,只在库为空时播种;不要示例数据用 --no-seed(或 QCONF_SEED=0)。

客户端接入

pip install qconf-center             # 只依赖 httpx
from qconf import QConf

client = QConf(server="http://127.0.0.1:8000", env="dev", refresh_interval=60)

client.get("DATABASE_URL")            # 只读内存,0.4µs,不阻塞、不联网
client.get("MISSING", default=None)   # 缺省值
client.get_bool("FEATURE_X", False)   # 值都是字符串,提供类型转换
client.as_dict()                      # 完整快照副本
client.close()

也可以全靠环境变量,代码里零参数:

export QCONF_SERVER=http://127.0.0.1:8000
export QCONF_ENV=dev                 # 可省略,默认 default
export QCONF_API_KEY=qk_…            # 在界面「api_key」里签发
export QCONF_REFRESH_INTERVAL=60
client = QConf()

敏感值与回滚

  • 界面上每个配置有一个「密/否」开关:标记为敏感后,管理界面、列表接口、导出文件、变更历史里都显示 ******, 该行同时变成只读(防止把占位符存回真值)。工具栏「敏感值: 显示」需要管理员会话(?reveal=1)。 客户端同步始终拿到原值 —— 掩码只是管理面行为。
  • 标记敏感不改变配置摘要,所以不会让任何客户端白拉一次全量。
  • 底部「变更历史」面板按 revision 分组显示每个 key 的改前/改后值,任意历史 revision 都有「回滚到此版本之前」按钮: 回滚后配置摘要与目标 revision 逐字节相同,并生成一个新 revision(回滚自身也可再回滚)。
# 也可以用 API(写接口只接受管理员会话,请先在界面登录取会话)
curl localhost:8000/api/v1/environments/prod/revisions -H "Authorization: Bearer $QCONF_API_KEY"
# 写接口(改值/回滚/导入/敏感标记)只接受管理员会话,请直接在 Web 界面操作

命令行

qconf serve                                          # 启动服务端
qconf --server http://127.0.0.1:8000 --env dev list
qconf --server http://127.0.0.1:8000 --env dev get DATABASE_URL --raw
qconf --server http://127.0.0.1:8000 --env dev status  # 缓存状态 + 一次同步结果
qconf hash local.json                                # 校验摘要算法(跨语言对拍用)
# 没有 put 命令:api_key 只读,配置修改一律在 Web 界面完成

测试与压测

pip install -e ".[dev]" && python -m pytest -q    # 91 项:协议/服务端/客户端/鉴权与 api_key/变更历史/真实 HTTP 端到端
python bench/measure_sync.py                      # 延迟、带宽、吞吐、传播时延、冷启动实测

目录

qconf/protocol.py          协议与摘要算法(客户端与服务端共用,纯标准库)
qconf/server/store.py      SQLite 存储:revision / 事务内重算摘要 / 审计
qconf/server/app.py        FastAPI 应用:同步接口 + 管理接口 + 令牌鉴权
qconf/server/static/       零构建 Web 管理界面(原生 HTML/CSS/JS)
qconf/server/__main__.py   一键启动器
qconf/client/core.py       客户端:内存快照 + 摘要门控同步 + 后台轮询线程
qconf/client/cache.py      本地磁盘缓存(原子写、按 服务端+环境 分区)
qconf/cli.py               qconf 命令行
run.py / start_server.bat  免安装的启动入口
client_example.py          接入示例(含变更回调)
bench/measure_sync.py      实测脚本,结果在 bench/results.txt

Metadata

Release files for qconf-center 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qconf-center 0.1.0
File Size Uploaded
qconf_center-0.1.0.tar.gz 72.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qconf-center 0.1.0
File Interpreter ABI Platform
qconf_center-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 127.4 kB

Release files / qconf_center-0.1.0.tar.gz

Download URL qconf_center-0.1.0.tar.gz
Size 72.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a18ae4dc4adf05d2b284e5fa4395c87e2ac4ab9787782b825a5919a08c6dcce9
BLAKE2b-256 checksum
How to use checksums
3486e0174be51b7c323ccaf8b667130b335ea4b416ee60239e24d7a4e2a54878
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release files / qconf_center-0.1.0-py3-none-any.whl

Download URL qconf_center-0.1.0-py3-none-any.whl
Size 54.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9aec439727b780618af70e44009ecd0ac124410f3ece7f1bc52a6e38cb5803f2
BLAKE2b-256 checksum
How to use checksums
7cdad10f51a84b1775db160b4cb62e6616276a2157b6acc88270d6d72c754782
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release history Release notifications | RSS feed

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page