5c5bd9d7bb
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,修复前空)。
79 lines
2.5 KiB
Docker
79 lines
2.5 KiB
Docker
# Sanguo VeighNa Docker 镜像 - NAS 适配版
|
||
# 使用 Python 3.10(Synology 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"]
|