[default] app.debug = false app.description = "基于 FastAPI 的 chongming 打包脚手架" app.name = "chongming" app.version = "chongming" env = "development" prefix = "/api/v1" upload_path = "uploads" [zenoh] json5_path = "./config/zenoh_config.json5" [cache] backend = "sqlite" # "sqlite"(默认,本机共享) | "redis"(跨主机) # backend = "redis" # path = "./cache_data/cache.db" # 配置优先来源模式(同时决定 [workers.config] 与 count 在启动时的取舍): # "toml" (默认) = 以文件为准:启动时用 config/workers//config.toml 的 # [workers.config] 与 count 覆盖写入 cache(前端读 cache,因此随之显示 # toml 值);运行期经管理接口(/admin/workers//config、/scale) # 改的值仅本次运行有效,重启网关即被文件覆盖。 # "cache" = 以缓存为准:chongming-cache 为单一事实来源,插件初始化即读缓存值, # 管理接口改动跨重启保持;toml 仅在 cache 缺失时引导。启动日志会提示 # toml 与 cache 的差异键(以 cache 为准);如需让 toml 改动生效,先删除 # worker:cm:configs:(运行时配置)/ worker:cm:counts:(副本数) # 缓存键再重启,或改用 "toml" 模式。 launch_worker_count = "toml" # redis 后端专用(backend = "redis" 时生效,均有默认值) redis_host = "127.0.0.1" redis_port = 6379 redis_db = 0 redis_password = "" redis_prefix = "chongming:" [security] algorithm = "HS256" secret_key = "your-secret-key-change-in-production" [license] # 机器码授权(插件白名单)。未授权插件不加载、不注册路由、管理接口禁止操作。 # # enabled 只在**非打包态**(uv run serve / 测试)决定是否执行拒绝:打包产物 # (Nuitka/PyInstaller)恒为强制校验 —— 部署目录的 config.toml 是明文可写的, # 若以配置开关为准,改一行就能绕过授权。 enabled = false # 授权文件路径(相对网关工作目录) path = "license.lic" # 厂商公钥(base64 裸 32 字节,或 PEM)。公钥可明文放置:换公钥只会验签失败, # 无法据以伪造授权(伪造需要厂商私钥)。构建时由 build.py 从 # CHONGMING_LICENSE_PUBKEY / license_public.key 注入。 public_key = "" # 指纹命中阈值(N-of-M)。4 个可信来源下取 3 表示容忍单块网卡或单颗 eMMC 更换。 min_match = 3 [development] debug = true env = "development" [development.server] access_log = false host = "0.0.0.0" port = 8000 reload = true [development.logging] file = "logs" format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" level = "DEBUG" # access 日志采样率:0.1 = 只记录 10% 的成功请求(错误 >=400 始终全量) # 1.0 = 全量记录;配合异步日志队列降低高吞吐下主线程开销 access_sample_rate = 0.1 [development.cors] allow_credentials = true allow_headers = ["*"] allow_methods = ["*"] # 注意:allow_credentials=true 时 allow_origins 不能为 ["*"](starlette 会丢弃该 header), # 需显式列出来源;本地前端 dev 端口会变化(5173/5174/...)。 allow_origins = [ "http://localhost:5173", "http://127.0.0.1:5173", "http://localhost:5174", "http://127.0.0.1:5174", ] [development.mqtt] enabled = true # host = "0.0.0.0" host = "127.0.0.1" port = 1883 # 是否由网关启动内嵌 amqtt Broker 子进程: # true (默认)= 网关自带 amqtt Broker,host/port 为 Broker 监听地址 # false = 使用外部 MQTT Broker,网关仅启动 Bridge 客户端连接 # host/port 需指向外部 Broker 地址(如 "192.168.1.10") use_embedded_broker = true # use_embedded_broker = false # MQTT Broker 认证(可选,默认匿名): # - 内嵌 Broker(use_embedded_broker=true):配置后要求所有客户端(含网关 Bridge) # 用该账号密码连接,未配置则保持匿名 # - 外部 Broker:网关 Bridge 用该账号密码连接(broker 侧自行配置对应账号) # 注意:密码为明文存储,生产环境建议使用外部 Broker + 环境变量注入 # username = "chongming" # password = "change-me" # MQTT Bridge 额外订阅主题推荐声明在各插件自己的配置里: # config/workers//config.toml → [[workers.mqtt_topics]] # (如 aibox_sophon_adapter 插件的 /board_ping 心跳主题) # 全局 [.mqtt].custom_topics 仍可作为通用兜底(可选,不推荐)。 [development.mqtt.broker] # amqtt Broker 可选配置,默认允许匿名连接 # 详细参数参考: https://github.com/Yakifo/amqtt [plugins_worker] config_path = "./config/workers/config.toml" [pyinstaller_build_import] base = [ "utils", # public 骨架 "utils.launch", "utils.config", "zenoh", "chongming_worker", "chongming_worker.contracts", "chongming_worker.route_config", "chongming_worker.routes_publisher", "chongming_request", "chongming_auth", "chongming_license", # 机器码授权(指纹采集/验签/判定) "cryptography", # Ed25519 验签 "cryptography.hazmat.primitives.asymmetric.ed25519", "server", "module_bank", # 模块化打包工具 "sqlite_vfs", "sqlite_vfs.core", "sqlite_vfs.contrib", "sqlite_vfs.contrib.fastapi_static", "fastapi", # web 应用依赖 "fastapi.staticfiles", "fastapi.middleware.cors", "fastapi.middleware.gzip", "uvicorn", "chongming_cache", "chongming_cache.backends", "chongming_cache.backends.sqlite_", "orjson", "python_multipart", "volcenginesdkarkruntime", "chongming_jwt", "chongming_database", "chongming_config", "chongming_password", "chongming_stream_manager", "chongming_mqtt", "chongming_mqtt.mqtt_forward", "chongming_mqtt.mqtt_subscribe", "chongming_mqtt.internal_mqtt", "aiosqlite", "asyncpg", "aiofiles.os", "sqlmodel", "amqtt", "bytedance", "bytedance.volcengine_aicc_sdk", "bytedance.volcengine_aicc_sdk.secure_http_client", "aiofiles", "openai", ] linux = ["gunicorn.glogging", "gunicorn.app", "gunicorn.app.wsgiapp"] windows = [] [production.module_system] path = [ [ "resources/app.mbank", "src/chongming/app", "app", ], [ "resources/plugins.mbank", "src/plugins", "plugins", ], ] type = "module-bank"