Files
massive-cloud/docker-compose.dev.yml
lipan 29f1d45d66 feat: 算法升级、整车配准集成与性能分析文档
算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3
适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新
后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动
前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复
文档: 新增5份算法性能分析报告
2026-06-25 08:22:20 +00:00

162 lines
6.2 KiB
YAML
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.
version: '3.8'
# 宏量点云处理软件 - 开发模式配置(支持热加载)
# 使用方法: docker-compose -f docker-compose.dev.yml up
# 端口配置: MySQL=3307, MinIO API=9010, MinIO Console=9011, App=3002, Redis=6380
#
# 数据目录配置:
# 在启动前设置 LOCAL_DATA_DIR 环境变量指向本地数据文件夹,例如:
# export LOCAL_DATA_DIR=/path/to/your/data
# docker-compose -f docker-compose.dev.yml up
#
# 数据文件夹结构:
# /path/to/your/data/
# ├── cad/ # 放置 CAD 文件 (.stl, .obj, .step 等)
# └── pointcloud/ # 放置点云文件 (.ply, .pcd, .las 等)
#
# STEP 装配检测:app 使用 Dockerfile.dev.gpu(CUDA + cadquery + PyTorch3D),勿用裸 node 镜像。
# 构建:docker compose -f docker-compose.dev.yml build app
#
# GPU:主机需能 nvidia-smi;Docker 需能 docker run --rm --gpus all ... nvidia-smi。
# 启用容器内 CUDA(二选一):
# - 旧版 docker-compose:-f docker-compose.gpu.yml(runtime: nvidia),先执行
# nvidia-ctk runtime configure --runtime=docker && systemctl restart docker
# - Compose V2(docker compose):-f docker-compose.gpu.compose-v2.yml(gpus: all,无需 nvidia runtime 名)
# 未映射 GPU 时 PyTorch 为 cuda: False,装配检测回退 CPU。
# 无显卡:build.dockerfile 改为 docker/Dockerfile.dev,并注释 ASSEMBLY_USE_GPU。
#
# 固化当前 app 容器为镜像(省掉重复 apt/pip 等):./scripts/snapshot-app-dev-image.sh
# 然后 MASSIVE_APP_DEV_IMAGE=... docker compose ... up -d --no-build(见脚本末尾说明)。
services:
# Web应用服务 - 开发模式
app:
build:
context: .
dockerfile: docker/Dockerfile.dev.gpu
image: ${MASSIVE_APP_DEV_IMAGE:-massive-point-cloud-app-dev:local}
container_name: massive-point-cloud-app-dev
working_dir: /app
network_mode: host
runtime: nvidia # docker-compose V1 用
# gpus: all # docker compose V2 用这行,同时注释上面的 runtime
environment:
- NODE_ENV=development
- PORT=3002
- DATABASE_URL=mysql://pointcloud:pointcloud_password@localhost:3307/pointcloud_db
- JWT_SECRET=${JWT_SECRET:-your-super-secret-jwt-key-change-in-production}
- AUTH_MODE=local
- S3_ENDPOINT=http://localhost:9010
- S3_ACCESS_KEY=${MINIO_ROOT_USER:-minioadmin}
- S3_SECRET_KEY=${MINIO_ROOT_PASSWORD:-minioadmin123}
- S3_BUCKET=pointcloud-data
- S3_REGION=us-east-1
- VITE_APP_TITLE=宏量点云处理系统
- VITE_OAUTH_PORTAL_URL=disabled
- VITE_APP_ID=
# 数据目录路径
- DATA_DIR=/data
# 算法源码根(通用插件 Route B 通过 {algRoot} 占位符引用)
- ALG_ROOT=/alg
# STEP 解析子进程(scripts/step_parse_mvp.py)
- PYTHON3_PATH=/usr/bin/python3
# 装配检测 GPU:无设备映射时自动回退 CPU;映射 GPU 见文件头说明
- ASSEMBLY_USE_GPU=1
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
# Vite HMR 配置
- CHOKIDAR_USEPOLLING=true
volumes:
# 挂载源代码
- .:/app
# 使用命名卷存储 node_modules,避免覆盖
- app-node-modules:/app/node_modules
# 挂载本地数据目录 (CAD 和点云文件)
- ${LOCAL_DATA_DIR:-./data}:/data
# 算法源码(通用算法插件按 ALG_ROOT 引用,只读挂载)
- ${LOCAL_ALG_DIR:-./alg}:/alg:ro
command: sh -c "
LIBSTDCPP=\$(ls /opt/conda/lib/libstdc++.so.6.0.* 2>/dev/null | sort -V | tail -1) &&
[ -n \"\$LIBSTDCPP\" ] && ln -sf \"\$LIBSTDCPP\" /usr/lib/x86_64-linux-gnu/libstdc++.so.6 &&
corepack enable && corepack prepare pnpm@latest --activate && pnpm install && pnpm dev --host 0.0.0.0"
depends_on:
mysql:
condition: service_healthy
minio:
condition: service_started
# MySQL数据库
mysql:
image: mysql:8.0
container_name: massive-point-cloud-mysql
restart: unless-stopped
network_mode: host
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-root_password_change_me}
- MYSQL_DATABASE=pointcloud_db
- MYSQL_USER=pointcloud
- MYSQL_PASSWORD=pointcloud_password
- MYSQL_TCP_PORT=3307
volumes:
- mysql-data:/var/lib/mysql
- ./docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-P", "3307", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root_password_change_me}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# 大结果集 ORDER BY / 分析查询易触发 MY-013131 Out of sort memory,适度加大 sort / 临时表
command: >
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--port=3307
--sort_buffer_size=33554432
--read_rnd_buffer_size=8388608
--tmp_table_size=67108864
--max_heap_table_size=67108864
# MinIO对象存储 (S3兼容)
minio:
image: minio/minio:latest
container_name: massive-point-cloud-minio
restart: unless-stopped
network_mode: host
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin123}
volumes:
- minio-data:/data
command: server /data --address ":9010" --console-address ":9011"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9010/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
# MinIO初始化 - 创建存储桶
minio-init:
image: minio/mc:latest
container_name: massive-point-cloud-minio-init
network_mode: host
depends_on:
minio:
condition: service_healthy
entrypoint: >
/bin/sh -c "
mc alias set myminio http://localhost:9010 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin123};
mc mb myminio/pointcloud-data --ignore-existing;
mc anonymous set public myminio/pointcloud-data;
echo 'MinIO bucket initialized successfully';
exit 0;
"
volumes:
mysql-data:
name: pointcloud-mysql-data
minio-data:
name: pointcloud-minio-data
app-node-modules:
name: pointcloud-app-node-modules-dev