From 81f8f9efe26ab38f56ae086e64c3a514a46f33e2 Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Thu, 18 Jun 2026 17:59:40 +0200 Subject: [PATCH] fix(docker): enable PYTHONFAULTHANDLER for native-crash diagnostics In-process native code -- pymupdf's classify/metadata `pymupdf.open` and embedded Qdrant -- can segfault the interpreter during indexing. With only PYTHONUNBUFFERED set, such a fault makes the container exit 139 (SIGSEGV) / 133 (SIGTRAP) with no logs at all, which is exactly what #926 reports on a CPU-constrained self-hosted VPS. Enabling PYTHONFAULTHANDLER makes the interpreter dump a Python + C-level traceback to stderr on SIGSEGV/SIGABRT/SIGFPE/SIGBUS, so the faulting library is identifiable from container logs. The handler is dormant during normal operation (no output, negligible overhead). Refs #926 Co-Authored-By: Claude Opus 4.8 (1M context) --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index 739861a0..91559e9e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,13 @@ COPY . . RUN uv sync --locked --no-dev --no-editable --no-cache --extra postgres ENV PYTHONUNBUFFERED=1 +# Dump a Python + C-level traceback to stderr on a fatal native fault +# (SIGSEGV/SIGABRT/SIGFPE/SIGBUS). In-process native code -- pymupdf's +# classify/metadata open and embedded Qdrant -- can segfault the interpreter +# during indexing, and without faulthandler the container just exits 139/133 +# with no logs (see issue #926). The handler is cheap and writes nothing in +# normal operation. +ENV PYTHONFAULTHANDLER=1 ENV VIRTUAL_ENV=/app/.venv ENV PATH=/app/.venv/bin:$PATH ENV TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata