修复:Docker 模式支持 Codex CLI

This commit is contained in:
zhang,zhao
2026-07-14 11:51:35 +08:00
parent 14ac2d3835
commit 8bbee99838
2 changed files with 23 additions and 0 deletions
+20
View File
@@ -9,6 +9,7 @@ ARG PYPI_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
# 备用 PyPI 源:主源同步延迟/故障时自动兜底(阿里云与清华互为补充)
ARG PYPI_FALLBACK=https://mirrors.aliyun.com/pypi/simple
ARG BACKEND_EXTRAS=
ARG CODEX_CLI_VERSION=0.144.3
# === Stage 1: 前端构建 ===
FROM node:20-alpine AS frontend-builder
@@ -46,6 +47,20 @@ RUN if [ "$INCLUDE_" = "1" ]; then \
mkdir -p /build/node_modules; \
fi
# === Stage 1c: Codex CLI ===
# 固定版本保证镜像可复现;只复制安装产物到运行镜像,不保留 npm。
FROM node:20-bookworm-slim AS codex-builder
ARG USE_CN_MIRROR=1
ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG CODEX_CLI_VERSION=0.144.3
RUN if [ "$USE_CN_MIRROR" = "1" ]; then npm config set registry "$NPM_REGISTRY"; fi \
&& npm install --global --prefix /opt/codex "@openai/codex@${CODEX_CLI_VERSION}" \
&& CODEX_NATIVE="$(find /opt/codex -type f -path '*/vendor/*/bin/codex' -print -quit)" \
&& test -n "$CODEX_NATIVE" \
&& cp "$CODEX_NATIVE" /opt/codex-native \
&& chmod +x /opt/codex-native \
&& /opt/codex-native --version
# === Stage 2: Python 运行时 ===
FROM python:3.11-slim AS runtime
ARG USE_CN_MIRROR=1
@@ -56,6 +71,7 @@ ARG INCLUDE_=0
WORKDIR /app
# Node.js 运行时: 仅在启用 插件时安装(供 node bridge.mjs 使用)。
# Codex CLI 从官方 npm 包提取原生二进制,不依赖运行时 Node.js。
# bookworm 自带 nodejs 18.19, 满足插件 engines>=18; --no-install-recommends 精简,
# 自带 libnode/libc-ares 等全部动态依赖, 无需手动补库。
# 国内构建走 apt mirror 已在 debian 镜像sources.list 配好, 无需额外换源。
@@ -110,6 +126,10 @@ ENV STATIC_DIR=/app/static \
# Frontend 静态产物
COPY --from=frontend-builder /build/dist ./static
# Codex CLI 使用官方 npm 包携带的当前平台原生二进制,无需运行时 Node.js。
COPY --from=codex-builder /opt/codex-native /usr/local/bin/codex
RUN codex --version
ENV PYTHONPATH=/app
# 兜底时区: 交易时段判断已在代码里显式用北京时间 (app/market_time.py),
# 此处让日志时间戳等其余 naive 时间也对齐北京时间。
+3
View File
@@ -7,6 +7,7 @@ services:
dockerfile: Dockerfile
args:
BACKEND_EXTRAS: ${BACKEND_EXTRAS:-}
CODEX_CLI_VERSION: ${CODEX_CLI_VERSION:-0.144.3}
container_name: TickFlow_Stock_Panel
ports:
- "${PORT:-3018}:3018"
@@ -21,4 +22,6 @@ services:
volumes:
- ./data:/app/data
- ./tiers.yaml:/app/tiers.yaml:ro
# 复用主机 Codex 登录态;后端只读后复制到单次请求的临时 CODEX_HOME。
- ${HOME}/.codex:/root/.codex:ro
restart: unless-stopped