Files
DCTS/docker-compose.yml
T
fmq b058e66722 feat(all): NaN 伪收敛否决与 nl_tight 能量回退、emflux 检验 4π 修正、nst 行宽与种子边界修复、gfATO 谱线表接通与网格加密 9216 点、阶段分项统计与跳板机部署
物理修复(400 失败点归因,见 docs/failed400_nan_pseudo_convergence_2026_08_17.md):
- runner: 阶段 converged 后复查 fort.7,含 NaN/Inf 即否决(fort.9 全零伪收敛,
  曾致 261 点误跳过 nl_direct 回退);否决阶段不产出种子,阻断污染传播
- runner: nl_tight 回退——仅能量边际失败时以 CHMAX 收紧 10× 从自身模型续迭代,
  残差降幅 ~10×;execute_tlusty_stage 抽取供主链与回退共用
- conv_check: fort.14 为 Eddington 通量 Hλ,积分需乘 4π 再比 σTeff⁴
  (旧版 ratio 稳定 0.0796=1/4π,全点系统性假阳性)+ 回归测试
- nst_writer: 单行超 80 字符被 TLUSTY 静默截断,IFALI/JALI/TRAD 等从未生效;
  按 75 字符自动换行
- seed_finder: Teff 容忍度改含边界 <=,相邻 5000K 档恢复互为种子 + 回归测试

谱线表与网格:
- 默认线表 gfVIS99 → gfATO(全波段 18-23000Å),TaskSpec.linelist 支持工作流
  级覆盖,节点按需下载(进程互斥锁防并发重复下载 238MB)
- sdB_cno Teff 加密至 5000K 步长,432 → 9216 点;tlusty/synspec 静态二进制更新

统计与部署:
- grid 汇总改按 tlusty_status/synspec_status 分项计数,新增 tlusty_failed/
  synspec_failed/synspec_pending,前端详情页双视图适配
- deploy/fetch_results 支持跳板机 ProxyJump 与 SSH 主连接复用,fetch 新增 --force;
- Docker 构建支持 CARGO_MIRROR/USE_MIRRORS 国内镜像参数;移除 tools/ 拷贝
- 新增 tlusty-synspec-test skill 与 6 篇根因分析/验证文档
2026-08-17 23:55:26 +08:00

89 lines
3.6 KiB
YAML

# =============================================================================
# DCTS (Distributed Computing TLUSTY/SYNSPEC) Docker Compose 容器集群部署编排
# =============================================================================
#
# 快速启动:
# 1. docker compose up -d --build
# 2. 访问 Dashboard 控制台: http://localhost:8090
#
# 增加/减少计算节点:
# 每个物理设备部署一个 node 容器(多 slot 并行由 DCTS_MAX_SLOTS 控制),
# 通过修改本文件 node 服务的 image / env 或在多台设备上分别运行实现分布式计算。
#
# 停止集群:
# docker compose down
# =============================================================================
services:
# ─── 1. DCTS 主控/Web 节点 (Server + Dashboard) ─────────────────────────────
server:
build:
context: .
dockerfile: Dockerfile.server
# 国内网络构建时在 .env 里设 USE_MIRRORS=1 / CARGO_MIRROR=1 换国内源;默认 0 直连官方源。
args:
USE_MIRRORS: ${USE_MIRRORS:-0}
CARGO_MIRROR: ${CARGO_MIRROR:-0}
image: dcts-server:latest
container_name: dcts-server
restart: unless-stopped
# 开发/内网模式:直接暴露 8090。
# 公网模式(--profile public)下由 proxy 容器接管 443,此处端口暴露建议关闭或改为 127.0.0.1。
ports:
- "${DCTS_PORT:-8090}:8090"
env_file:
- .env
environment:
- DCTS_PORT=8090
- TZ=Asia/Shanghai
- DCTS_DB_PATH=/app/data/dcts.db
- DCTS_QUEUE_DB_PATH=/app/data/dcts_queue.db
- DCTS_SEEDS_DIR=/app/data/seeds
- DCTS_BACKUP_DIR=/app/data/backups
- DCTS_ASSETS_DIR=/app/assets
- LOG_DIR=/app/data/logs
- DCTS_LOG=info,server=debug
volumes:
- ./assets:/app/assets:ro
- ./workflows:/app/workflows:ro
- ./data:/app/data
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8090/healthz"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
# ─── 2. DCTS Fortran 计算 Worker 节点 ──────────────────────────────────────
node:
build:
context: .
dockerfile: Dockerfile.node
# 同 server:国内网络构建时在 .env 里设 USE_MIRRORS=1 / CARGO_MIRROR=1。
args:
USE_MIRRORS: ${USE_MIRRORS:-0}
CARGO_MIRROR: ${CARGO_MIRROR:-0}
image: dcts-node:latest
container_name: dcts-node
restart: unless-stopped
env_file:
- .env
environment:
- TZ=Asia/Shanghai
- DCTS_SERVER_URL=${DCTS_SERVER_URL:-http://dcts-server:8090}
- DCTS_MAX_SLOTS=${DCTS_MAX_SLOTS:-4}
- DCTS_HEARTBEAT_SEC=${DCTS_HEARTBEAT_SEC:-15}
- LOG_DIR=${LOG_DIR:-/app/data/logs}
- DCTS_LOG=${DCTS_LOG:-info,node=debug}
# 完整计算结果归档目录:科学产物(.spec/.cont/.iden/各阶段快照/日志)落盘位置,
# 上报成功后从沙盒拷贝至此避免丢失。挂载在 ./data 下,已随卷持久化。
# DCTS_ARCHIVE_DIR 为旧名,向后兼容回退(node 代码优先读 DCTS_RESULT_DIR)。
- DCTS_RESULT_DIR=${DCTS_RESULT_DIR:-${DCTS_ARCHIVE_DIR:-/app/data/result}}
volumes:
# 注:不再挂载 ./assets —— node 经 include_bytes! 嵌入 tlusty/synspec 二进制 +
# 从 server /api/data/* 下载原子数据文件,从不读取 /app/assets,挂载它纯属搬运
# 2.1GB 空数据、浪费磁盘与带宽。
- ./data:/app/data