fix: 生成项目补齐 --encrypt/--license 构建契约(网关收集项、[license] 注入点)
- config.toml:--encrypt 会先 PyArmor 混淆 main.py / server.py,PyInstaller 静态 分析跟不到 `from chongming.app import app`,网关包整个漏收(打包"成功"、产物 启动报 No module named 'chongming')—— 显式列 chongming / chongming.app 等入口包; - public/config.toml:补 [license] 段(public_key 留空),--license 的注入点; - README.project.md:补授权公钥前置条件(keygen → license_public.key 或环境变量), 以及 --only 对 obfuscate 同样划界(加密构建要显式带上,否则混淆被静默跳过)。
This commit is contained in:
@@ -95,7 +95,14 @@ uv run build --encrypt --license # 对外分发:加密插件模块 + 注
|
||||
uv run build --only mbank # 只重新生成 plugins.mbank(插件热更新只需替换该文件)
|
||||
```
|
||||
|
||||
- `--encrypt --license` 需要厂商授权公钥(未提供会直接构建失败):先
|
||||
`uv run chongming-license keygen -o license_private.pem` 生成密钥对(一次性;私钥离线保管,
|
||||
绝不进仓库/产物),把输出的公钥写入根目录 `license_public.key`(或用
|
||||
`CHONGMING_LICENSE_PUBKEY` / `CHONGMING_LICENSE_PUBKEY_FILE` 指定),再构建
|
||||
- 无前端时跳过 vue 步骤:`uv run build pyinstaller --only mbank,prepare,pack`
|
||||
(`--only` 对**所有**步骤划界:加密构建还要显式带上 `obfuscate`,如
|
||||
`uv run build --encrypt --license --only mbank,prepare,obfuscate,pack,license_guard`,
|
||||
否则 PyArmor 混淆会被静默跳过)
|
||||
- 插件代码在 `plugins.mbank` 里 → 换文件即可热更新;**网关本体是普通依赖** →
|
||||
升级网关需改 `pyproject.toml` 版本(或 `uv lock --upgrade-package chongming-gateway`)
|
||||
并重新 `uv run build`
|
||||
|
||||
+13
-1
@@ -81,7 +81,11 @@ config_path = "./config/workers/config.toml"
|
||||
|
||||
[pyinstaller_build_import]
|
||||
# 打包收集清单(PyInstaller --hidden-import / Nuitka --include-module),`uv run build` 的
|
||||
# pack 步骤使用。网关本体依赖随 chongming-gateway 包发布、静态分析可跟到;这里保留:
|
||||
# pack 步骤使用。网关本体(chongming-gateway 包)**未混淆时**能沿骨架的
|
||||
# `from chongming.app import app` 静态跟到;但 --encrypt 会先 PyArmor 混淆
|
||||
# main.py / server.py,此时静态分析跟不到,网关入口包必须显式列出(见 base 前几项)。
|
||||
# 这里保留:
|
||||
# - 网关入口包(chongming / chongming.app 与骨架直接引用的子模块)
|
||||
# - 动态导入、静态分析看不到的(granian 内部子模块、amqtt 插件、sqlite_vfs 等)
|
||||
# - public 骨架自身(server / utils)与服务器可选实现(uvloop 等)
|
||||
# 内置插件专属依赖(网关本体不 import 的第三方包)写根目录 plugins_deps.toml,按插件分节声明。
|
||||
@@ -90,6 +94,14 @@ base = [
|
||||
"utils.launch",
|
||||
"utils.config",
|
||||
"server",
|
||||
# 网关入口包:--encrypt 时 main.py / server.py 先被 PyArmor 混淆,里面的
|
||||
# `from chongming.app import app` 对 PyInstaller 静态分析不可见 —— 漏了会在
|
||||
# 打包期"成功"、产物启动即报
|
||||
# "无法导入网关(chongming.app): No module named 'chongming'"
|
||||
"chongming",
|
||||
"chongming.app",
|
||||
"chongming.app.core.logger",
|
||||
"chongming.app.core.parent_death",
|
||||
"module_bank",
|
||||
"granian",
|
||||
"granian._compat",
|
||||
|
||||
@@ -28,6 +28,14 @@ launch_worker_count = "cache"
|
||||
algorithm = "HS256"
|
||||
secret_key = "your-secret-key-change-in-production"
|
||||
|
||||
[license]
|
||||
# 机器码授权(厂商 Ed25519 签发):`uv run build --license` 在打包前把厂商公钥注入
|
||||
# 这里,并把"本产物是否为授权版"烘焙进产物代码(编译后部署侧改不了)。
|
||||
# public_key 留空 = 未接入授权:开发态不校验;未加 --license 的产物也不校验
|
||||
# (插件照常加载,不是砖头包)。可选键:path(授权文件,默认 ./license.lic)、
|
||||
# min_match(指纹容错阈值)、enabled(仅开发态生效;打包产物以构建期烘焙为准)。
|
||||
public_key = ""
|
||||
|
||||
[production]
|
||||
debug = false
|
||||
env = "production"
|
||||
|
||||
Reference in New Issue
Block a user