[Bug] 社区版源码部署时,Celery 自定义序列化器默认密钥是 UUID 对象,导致所有异步任务无法投递
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 76/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- python
- Bereich
- backend, distributed-systems
Rechercherichtung
Beginne mit apps/ops/celery/hmac_signed_serializer.py und verfolge, wie _local_secret_key ausgewählt wird, bevor secure_dumps .encode() aufruft. Reproduziere den Fehler mit dem eigenständigen Skript aus dem Issue und suche dann nach Tests in der Nähe oder Startprüfungen für diesen Serializer. Fertig ist es, wenn der Standardschlüssel als String funktioniert und die Serialisierung ohne Umgebungsvariable erfolgreich ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
环境
- MaxKB 版本:2.10.8(镜像)/ 源码 HEAD
2ac52b3(2026-11-09)仍在 - 部署方式:Docker Engine(WSL2),从源码构建,未使用官方商用镜像(无 xpack)
- Python 3.11,celery 5.5.3,uuid-utils 0.14.0
- 相关文件:
apps/ops/celery/hmac_signed_serializer.py
现象
文档上传成功、记录能创建,但永远停在「待处理 / 0 段落」,后台不执行任何向量化任务。
前端无任何报错,日志中仅有一行被吞掉的 AttributeError。
排查后确认:所有 Celery 任务都无法投递(不只是文档解析)。
根因
apps/ops/celery/hmac_signed_serializer.py:
import uuid_utils.compat as uuid
...
_local_secret_key = os.environ.get(
'MAXKB_HMAC_SIGNED_SERIALIZER_SECRET_KEY',
os.getenv('MAXKB_SECRET_KEY', uuid.uuid7()) # ← 默认值是 UUID 对象,不是 str
)
...
def secure_dumps(obj):
data = pickle.dumps(obj)
signature = hmac.new(_local_secret_key.encode(), data, hashlib.sha256).digest()
# ^^^^^^^^ UUID 没有 encode() → AttributeError
uuid_utils.compat.uuid7() 的返回值是 uuid.UUID 对象(已实测,见下),没有 .encode() 方法。
日志里没有明显报错,是因为任务投递点被 try/except 包住,
异常只落一条 error 日志,文档状态停在「待处理」——用户侧看起来就是「卡住了」。
复现
不启动 Django / Celery / Redis,直接加载上面这个真实文件即可复现:
import sys, types, importlib.util
kombu = types.ModuleType('kombu'); ser = types.ModuleType('kombu.serialization')
ser.register = lambda *a, **k: None
kombu.serialization = ser
sys.modules['kombu'] = kombu; sys.modules['kombu.serialization'] = ser
spec = importlib.util.spec_from_file_location(
's', 'apps/ops/celery/hmac_signed_serializer.py')
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
m.secure_dumps({'task': 'x'})
输出:
_local_secret_key : type='UUID' value=UUID('80d34868-8213-47e9-b353-e0fadd316c1c')
AttributeError: 'UUID' object has no attribute 'encode'
File ".../apps/ops/celery/hmac_signed_serializer.py", line 17, in secure_dumps
设置环境变量后正常:
$ MAXKB_HMAC_SIGNED_SERIALIZER_SECRET_KEY=dev-secret python repro.py
_local_secret_key : type='str' value='dev-local-secret'
secure_dumps(...) -> OK, 185 bytes
期望
- 默认值应转换为
str,例如:
_local_secret_key = os.environ.get(
'MAXKB_HMAC_SIGNED_SERIALIZER_SECRET_KEY',
os.getenv('MAXKB_SECRET_KEY') or str(uuid.uuid7())
)
- 建议在
ok/启动自检里显式校验_local_secret_key类型,或至少把它变成显式必填配置,
避免不同部署方式(源码 / 官方镜像 / 含 xpack 的版本)表现不一致。
临时规避
-e MAXKB_HMAC_SIGNED_SERIALIZER_SECRET_KEY=<任意字符串>
补充说明(供维护者判断)
- 该文件第 9–13 行有一个
from xpack import get_md5的兜底:
含 xpack 的版本会用它覆盖密钥,因此官方商用镜像可能不受影响;
而源码构建 / 自行打镜像的社区用户会稳定踩到。 MAXKB_SECRET_KEY在全仓库中除本文件外没有任何写入点(README 的docker run
也不传它),所以未设置环境变量是默认路径。
- Vorherrschende Sprache
- Python
- Sterne
- 23.1k
- Forks
- 3.2k
- Ø Merge
- 41 Min.
- Gemergte PRs (30 T.)
- 480
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus 1Panel-dev/MaxKB
-
[Bug] 默认用cas登录 退出后自动又登录进去了Evtl. vergeben @zyyfit hat das heute übernommen. Offen
1Panel-dev/MaxKB#7828 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug] 上传excel长文件 上传的文档跟文档内容提取的顺序不一致Evtl. vergeben @zyyfit hat das vor 1 Tag übernommen. Offen
1Panel-dev/MaxKB#7809 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug] 用户组加载大量用户之后页面崩了Evtl. vergeben @zyyfit hat das vor 1 Tag übernommen. Offen
1Panel-dev/MaxKB#7798 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Feature] 输入栏支持快捷标签Evtl. vergeben @baixin513 hat das vor 2 Tagen übernommen. Offen
1Panel-dev/MaxKB#7747 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug] 建议 增加模型的容错处理Evtl. vergeben @zyyfit hat das vor 5 Tagen übernommen. Offen
1Panel-dev/MaxKB#7719 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in 1Panel-dev/MaxKB
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/c++ area/core kind/bug-report
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
tensorflow/quantum#1140 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
Kav-K/GPTDiscord#501 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_evals#2863 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag