From de63459173937f2637bdee51e1020775dec42093 Mon Sep 17 00:00:00 2001 From: chengkai3 Date: Mon, 8 Jun 2026 18:58:24 +0800 Subject: [PATCH] =?UTF-8?q?[fix]:[FL-47][=E6=8A=8Awine=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E5=88=B0fquiz-celery-worker=E4=B8=AD=E5=8E=BB]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- MEMORY.md | 2 +- api/Dockerfile | 5 ++++- memory/2026-06-08.md | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/MEMORY.md b/MEMORY.md index 1aca1d4..a0d79d3 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -242,7 +242,7 @@ - `WINE_DEFAULT_TIMEOUT_SECONDS` / `WINE_MAX_TIMEOUT_SECONDS`:默认与最大执行超时。 - 后端执行必须使用 `asyncio.create_subprocess_exec` 参数数组,不走 shell;EXE 路径与工作目录必须限制在 `WINE_ALLOWED_ROOT` 下。 - 实时日志通过 `StreamingResponse` + SSE 事件输出;前端使用 `fetchWithAuth` 读取 `ReadableStream`,避免原生 `EventSource` 无法携带现有 Bearer Token 的鉴权问题。 -- Docker API 镜像默认不内置 Wine;部署时需在运行环境安装 Wine 或将 `WINE_BINARY_PATH` 指向可用二进制。 +- `api/Dockerfile` 构建出的共享后端镜像已内置 `wine`;`api/celery-worker/celery-beat/flower` 当前都复用该镜像,若需切换二进制仍可通过 `WINE_BINARY_PATH` 覆盖。 ## 前端菜单交互口径(2026-04-19) diff --git a/api/Dockerfile b/api/Dockerfile index 810e6c9..ecbb973 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -14,7 +14,10 @@ ENV PIP_DEFAULT_TIMEOUT=${PIP_DEFAULT_TIMEOUT} ENV PIP_RETRIES=${PIP_RETRIES} RUN apt-get update \ - && apt-get install -y --no-install-recommends libexpat1 \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + libexpat1 \ + wine \ + && command -v wine >/dev/null \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt ./ diff --git a/memory/2026-06-08.md b/memory/2026-06-08.md index 985c3b6..091b856 100644 --- a/memory/2026-06-08.md +++ b/memory/2026-06-08.md @@ -43,3 +43,24 @@ - 风险与关注点: - `admin.basic_data`、`admin.system_monitor`、`admin.system` 仍为无 `path` 的目录菜单,只承担菜单树占位与分组作用。 + +## Work Log - 在共享后端镜像内置 Wine(2026-06-08) + +- 背景: + - 新需求要求把 Wine 安装到 `fquiz-celery-worker`。 + - 当前仓库中 `celery-worker`、`api`、`celery-beat`、`flower` 复用同一个 `api/Dockerfile` / `${API_IMAGE}`,且后端已有 `/api/v1/wine/*` 直接探测与执行 Wine 的能力。 + +- 本次处理: + - `api/Dockerfile` + - 在系统依赖安装阶段加入 `wine`,并用 `command -v wine` 做镜像构建期存在性校验。 + - `MEMORY.md` + - 将 Wine 口径从“运行环境自行安装”更新为“共享后端镜像已内置 Wine”。 + +- 验证: + - `python3 -c "import yaml; ..."` 解析 `deploy/dev-deploy/compose.yml`、`deploy/pro-deploy/compose.yml`、`.github/workflows/main.yml` 通过。 + - `git diff --check` 通过。 + - `python3 -m py_compile api/app/services/wine_service.py api/app/services/fl_analysis_external.py api/app/tasks/fl_analysis_tasks.py api/app/core/config.py` 通过。 + - 当前执行环境无 `docker` 命令,未能本地实际跑 `docker compose build` / `docker compose config`。 + +- 风险与关注点: + - 由于部署链路复用同一个后端镜像,本次会同时影响 `api/celery-worker/celery-beat/flower` 的基础镜像体积,而不只是 `celery-worker`。