6d786fbf41
ProcessPoolExecutor(spawn)子进程不继承主进程 sys.path(insert 是内存修改), import sanguo_orchestrator 失败->BrokenProcessPool->API 回测静默失败,POST 秒回 task_id 但轮询永远 404。spawn 继承 env 不继承 sys.path,故: 1. Dockerfile ENV PYTHONPATH=/app:/app/vnpy_v4.4.0(镜像层,bind mount 覆盖不了) 2. entrypoint.sh 回仓库根(git mv 自 docker/):promote --exclude /docker 致旧版 entrypoint 在 NAS 成 git 外孤儿(340行,被 bind mount 覆盖镜像层);回根后全量 rsync 自动推可复现(对齐 docs/deployment/nas-deploy-plan.md 预设修复)+export 兜底 3. 三 Dockerfile COPY 路径同步 反馈: 策略 session(根因诊断+探针验证)
76 lines
2.3 KiB
Docker
76 lines
2.3 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 \
|
||
PYTHONPATH=/app:/app/vnpy_v4.4.0 \
|
||
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/
|
||
|
||
# 复制启动脚本
|
||
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"]
|