Files
massive-cloud/docker-compose.dev.yml

164 lines
6.4 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:?请在 .env 配置至少 32 个字符的 JWT 密钥}
- BOOTSTRAP_ADMIN_USERNAME=${BOOTSTRAP_ADMIN_USERNAME:?请在 .env 配置引导超级管理员用户名}
- BOOTSTRAP_ADMIN_PASSWORD=${BOOTSTRAP_ADMIN_PASSWORD:?请在 .env 配置至少 8 位的引导超级管理员密码}
- 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=宏量点云处理系统
# 数据目录路径
- 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:
- bash
- -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