chore(build): 精简 Dockerfile 可选构建阶段, 清理文档与引导页冗余引用

This commit is contained in:
shy3130
2026-10-11 15:42:55 +08:00
parent 6a2a9bb2a7
commit 350ffbf612
17 changed files with 32 additions and 123 deletions
+1 -36
View File
@@ -1,9 +1,6 @@
# 两阶段构建:前端 dist 拷进后端镜像,单容器运行
# 可选:构建网络无法直连官方源时,传入 --build-arg USE_CN_MIRROR=1 启用国内镜像
# 可选: 插件默认不打包(它抓取第三方财经网站接口,存在版权与反爬风险)。
# 如确需启用,传入 --build-arg INCLUDE_=1 显式开启,使用风险自负。
ARG USE_CN_MIRROR=1
ARG INCLUDE_=0
ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG PYPI_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
# 备用 PyPI 源:主源同步延迟/故障时自动兜底(阿里云与清华互为补充)
@@ -28,25 +25,6 @@ RUN pnpm install --frozen-lockfile || pnpm install
COPY frontend/ ./
RUN pnpm build
# === Stage 1b: 插件依赖(可选,默认跳过) ===
# ⚠️ 合规提示: 通过 node bridge.mjs 抓取第三方财经网站(如东方财富)的行情接口,
# 未经对方授权,可能违反其服务条款并涉及交易所行情版权。默认不打包(INCLUDE_=0)。
# 如确需启用,构建时传 --build-arg INCLUDE_=1,即视为使用者知悉并自行承担合规责任。
# INCLUDE_=0 时,本 stage 仅产出空 node_modules 目录,保证后续 COPY 不报错。
FROM node:20-bookworm-slim AS -builder
ARG USE_CN_MIRROR=1
ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG INCLUDE_=0
WORKDIR /build
RUN if [ "$USE_CN_MIRROR" = "1" ]; then npm config set registry "$NPM_REGISTRY"; fi
COPY backend/app/plugins//package.json backend/app/plugins//package-lock.json ./
# INCLUDE_=1 时安装依赖;=0 时仅建空目录,使最终镜像不含 依赖
RUN if [ "$INCLUDE_" = "1" ]; then \
(npm ci || npm install); \
else \
mkdir -p /build/node_modules; \
fi
# === Stage 1c: Codex CLI ===
# 固定版本保证镜像可复现;只复制安装产物到运行镜像,不保留 npm。
FROM node:20-bookworm-slim AS codex-builder
@@ -68,26 +46,18 @@ ARG USE_CN_MIRROR=1
ARG PYPI_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
ARG PYPI_FALLBACK=https://mirrors.aliyun.com/pypi/simple
ARG BACKEND_EXTRAS=
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 阿里云镜像 (bookworm deb822 格式)。官方 python slim 镜像的
# sources 指向 deb.debian.org, 部分国内网络下 apt 极慢(实测阿里云 ECS 拉官方源
# 单阶段可达 8 分钟以上); USE_CN_MIRROR 与 npm/pypi 的换源开关注一脉相承。
# tesseract-ocr: 自选截图导入(始终安装); nodejs: 仅 INCLUDE_=1 时安装
# tesseract-ocr: 自选截图导入(始终安装)
RUN if [ "$USE_CN_MIRROR" = "1" ]; then \
sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list 2>/dev/null || true; \
fi \
&& apt-get update \
&& apt-get install -y --no-install-recommends tesseract-ocr tesseract-ocr-eng \
&& if [ "$INCLUDE_" = "1" ]; then \
apt-get install -y --no-install-recommends nodejs \
&& node --version; \
fi \
&& rm -rf /var/lib/apt/lists/* \
&& tesseract --version
@@ -122,11 +92,6 @@ RUN if [ "$USE_CN_MIRROR" = "1" ]; then \
# (<root>/backend/app/) 推导的, 容器内会错算到 /。这里用环境变量显式指定
# 三个关键路径, 确保 static / tiers / data 都指向容器内正确位置。
COPY backend/app ./app
# 插件依赖: 从 -builder 拷入。
# INCLUDE_=0(默认) 时, -builder 产出空目录,此处拷入空目录,
# 即最终镜像不含 依赖,插件默认不可用。
# COPY --from 不受 .dockerignore 的 **/node_modules 规则影响。
COPY --from=-builder /build/node_modules ./app/plugins//node_modules
COPY tiers.yaml /app/tiers.yaml
ENV STATIC_DIR=/app/static \
TIERS_YAML=/app/tiers.yaml \