Files
geMoldInsight/deploy/Dockerfile.moldinsight
T
cjw 7717c9fa14 🔧 build(deploy): 镜像 base 由 miniconda 切换 Miniforge
Dockerfile.moldinsight FROM continuumio/miniconda3:24.7.1-0 →
condaforge/miniforge3:24.7.1-2:

- conda-forge 默认且唯一渠道,无 defaults 渠道与 Anaconda ToS 顾虑
- 与 CI 已用的 Miniforge 安装(.gitea/workflows/ci.yml 清华镜像)及
  开发机 Miniforge 环境同源
- tag 经 Docker Hub 社区用例确认存在;conda create 步骤与
  python=3.12 / pythonocc-core=7.9.0 锁定不变
- TECH_DEBT D13 锁定记录同步;STATUS 补录

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 16:33:40 +08:00

52 lines
2.2 KiB
Docker
Raw 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.
# PythonOCC 仅经 conda-forge 提供,且其动态库与 conda Python 的 ABI 绑定。
# 旧方式(conda 环境装好后把 site-packages 拷入 python:slim 系统 python)依赖
# 两侧 Python ABI 恰好兼容,属脆弱做法(TECH_DEBT D13);现改为直接以同一
# conda 运行时作为最终镜像的执行环境,自带全部动态库。
# Base 用 Miniforge:conda-forge 默认且唯一渠道(无 defaults 渠道,无 Anaconda
# ToS 顾虑),与 CI 的 Miniforge 安装(.gitea/workflows/ci.yml)同源;tag 锁定。
FROM condaforge/miniforge3:24.7.1-2
# 锁定几何栈核心版本;pip 侧全量版本锁由
# `bash deploy/generate_lockfiles.sh` 在 moldinsight conda 环境内执行后生成
# (D13,参见 deploy/generate_lockfiles.sh / .bat 与 docs/OPERATIONS.md §2)
# 落盘产物为 deploy/requirements-{base,moldinsight}.lock.txt,CI / 离线构建可直接锁定安装
RUN conda create -n moldinsight -c conda-forge -y \
python=3.12 \
pythonocc-core=7.9.0 \
&& conda clean -afy
ENV PATH=/opt/conda/envs/moldinsight/bin:$PATH \
PYTHONUNBUFFERED=1
WORKDIR /app
# 自包含构建:不再基于 gemold-base,基础依赖与模块依赖一并安装
COPY deploy/requirements-base.txt deploy/requirements-moldinsight.txt ./
RUN pip install --no-cache-dir \
-r requirements-base.txt \
-r requirements-moldinsight.txt \
&& rm requirements-base.txt requirements-moldinsight.txt
COPY src/shared/ /app/src/shared/
COPY src/moldinsight/ /app/src/moldinsight/
COPY src/inventory/ /app/src/inventory/
COPY src/entrypoints/ /app/src/entrypoints/
COPY src/celery_app.py src/celery_tasks.py /app/src/
# init_db 启动期自动迁移(AUTO_MIGRATE)需要迁移脚本随镜像分发
COPY migrations/ /app/migrations/
COPY alembic.ini /app/alembic.ini
COPY uploads/ /app/uploads/
ENV PYTHONPATH=/app/src
RUN mkdir -p /app/logs
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=60s \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
CMD ["python", "-m", "uvicorn", "entrypoints.moldinsight:app", "--host", "0.0.0.0", "--port", "8000"]