# ============================================================ # Worker 统一基础镜像(预构建) # 预装系统依赖 + Python 全部依赖 + CJK 字体 # 业务构建从此镜像开始,只需 COPY 业务代码,构建时间 < 5 分钟 # 当 requirements-*.txt 变更时重新构建 # ============================================================ FROM git.xiaoxiajianji.com/xiaoxia/base/python:3.12-slim # 使用阿里云镜像加速 RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \ sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true # 预装系统依赖(编译工具 + 运行时 + CJK 字体用于 ASS 字幕渲染) # 字体修复:fonts-noto-cjk 包的 Sans .ttc 文件混入了 Mono 变体,导致 Bold 匹配到等宽字体 # 解决方案:删除 Sans .ttc,保留 Serif .ttc(宋体 fallback);仓库内预下载 VF 可变字体(不含 Mono) # #1896 补充开源字体:NotoSerifCJKsc-VF.otf(思源宋体衬线)、LXGWWenKai-Regular.ttf(霞鹜文楷开源楷体,SIL OFL) # - 苹方/微软雅黑为 macOS/Windows 系统字体,服务器无对应文件,映射到 Noto Sans SC fallback # - 华康俪金黑为商业字体有版权风险,前端已移除,后端映射到 Noto Sans SC 兼容老数据 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ python3-dev \ binutils \ ffmpeg \ libglib2.0-0 \ fonts-noto-cjk \ && rm -rf /var/lib/apt/lists/* \ # 删除有问题的 Sans .ttc 文件(包含 Mono 变体会导致粗体匹配错误),保留 Serif .ttc 作为宋体 fallback && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc \ && rm -f /usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc \ && mkdir -p /usr/share/fonts/truetype/lxgw # 复制开源中文字体:思源黑体 VF + 思源宋体 VF(#1896)+ 霞鹜文楷(#1896,开源楷体) COPY infra/fonts/NotoSansSC-VF.ttf /usr/share/fonts/opentype/noto/NotoSansSC-VF.ttf COPY infra/fonts/NotoSerifCJKsc-VF.otf /usr/share/fonts/opentype/noto/NotoSerifCJKsc-VF.otf COPY infra/fonts/LXGWWenKai-Regular.ttf /usr/share/fonts/truetype/lxgw/LXGWWenKai-Regular.ttf RUN fc-cache -fv # 创建虚拟环境 RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" WORKDIR /tmp # 预装全部 Python 依赖(基础 + Worker 大包 + 业务依赖) COPY requirements-base.txt requirements.txt requirements-worker.txt ./ RUN pip install --no-cache-dir \ -i https://mirrors.aliyun.com/pypi/simple/ \ --trusted-host mirrors.aliyun.com \ -r requirements-base.txt \ -r requirements-worker.txt \ -r requirements.txt # 虚拟环境瘦身 RUN find /opt/venv -name "*.so" -type f -exec strip --strip-all {} \; 2>/dev/null || true RUN find /opt/venv -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null; \ find /opt/venv -name "*.pyc" -delete 2>/dev/null || true # 清理临时文件 RUN rm -f /tmp/requirements-base.txt /tmp/requirements.txt /tmp/requirements-worker.txt ENV PYTHONPATH=/app:/app/packages # Rebuild trigger: ACR push retry 20260826