Files
claude_dev 5c5bd9d7bb
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 20s
CI/CD / nas-verify (push) Successful in 2s
fix(docker): PYTHONPATH ENV 移 COPY 后(缓存命中 TA-Lib,避 sourceforge wget 卡)
PYTHONPATH ENV 原在 Step2 前置,致其后所有层 cache miss,TA-Lib 步骤重编译触发
wget sourceforge 国内卡死(build_v3 卡 29min load0.04)。移到 COPY 代码后:Step1-19
(apt/TA-Lib/pip)与旧 build 相同→缓存命中跳过 wget,只 ENV+COPY 重跑(秒级)。
功能等价(PYTHONPATH 在镜像 env,spawn 子进程继承),仅层缓存优化。

build_v4 实证:Step5 TA-Lib Using cache(跳 wget)+镜像 ENV PYTHONPATH 固化
(docker exec 探针可见 /app:/app/vnpy_v4.4.0,修复前空)。
2026-08-01 22:49:21 +08:00

79 lines
2.5 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sanguo VeighNa Docker 镜像 - NAS 适配版
# 使用 Python 3.10Synology NAS 已有镜像)
# 单阶段构建,简化部署流程
FROM python:3.10-slim
# 设置环境变量
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
VNPY_LOG_LEVEL=INFO \
TA_LIBRARY_PATH=/usr/local/lib \
TA_INCLUDE_PATH=/usr/local/include
# 换国内 debian 镜像(清华,trixie deb822 格式;原 deb.debian.org 国内不稳 apt 反复重试)
RUN { sed -i 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g; s|security.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || sed -i 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g; s|security.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list 2>/dev/null; }
# 安装运行时和编译依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
build-essential \
wget \
gcc \
g++ \
make \
libc6-dev \
&& rm -rf /var/lib/apt/lists/*
# 下载并编译 TA-Lib
RUN wget -q http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz \
&& tar -xzf ta-lib-0.4.0-src.tar.gz \
&& cd ta-lib \
&& ./configure --prefix=/usr \
&& make \
&& make install \
&& cd .. \
&& rm -rf ta-lib ta-lib-0.4.0-src.tar.gz
# 更新 ldconfig
RUN ldconfig
# 设置工作目录
WORKDIR /app
# 创建数据目录
RUN mkdir -p /app/data /app/logs /app/config /app/temp
# 复制 requirements 并安装依赖
COPY requirements-docker.txt .
RUN pip install --no-cache-dir --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install --no-cache-dir -r requirements-docker.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制应用代码(包含所有 sanguo 模块)
COPY sanguo_web/ /app/sanguo_web/
COPY vnpy_v4.4.0/vnpy/ /app/vnpy/
COPY sanguo_trader/ /app/sanguo_trader/
COPY sanguo_research/ /app/sanguo_research/
COPY sanguo_data/ /app/sanguo_data/
COPY sanguo_common/ /app/sanguo_common/
# Python 路径(spawn 子进程继承 env 不继承 sys.path;放 COPY 后让 apt/TA-Lib/pip 层缓存命中,
# 避免 sourceforge wget 卡——ENV 在前会导致其后所有层 cache miss 触发 TA-Lib 重编译)
ENV PYTHONPATH=/app:/app/vnpy_v4.4.0
# 复制启动脚本
COPY entrypoint.sh /app/
RUN chmod +x /app/entrypoint.sh
# 暴露端口
EXPOSE 8000 8080
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
# 启动命令
ENTRYPOINT ["/app/entrypoint.sh"]