Files
massive-cloud/docker-compose.yml

147 lines
4.7 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部署配置
# 使用方法: docker-compose up -d
# 注意: 使用 host 网络模式,服务间通过 localhost 通信
# 端口配置: 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 up -d
#
# 数据文件夹结构:
# /path/to/your/data/
# ├── cad/ # 放置 CAD 文件 (.stl, .obj, .step 等)
# └── pointcloud/ # 放置点云文件 (.ply, .pcd, .las 等)
services:
# Web应用服务
app:
build:
context: .
dockerfile: Dockerfile
container_name: massive-point-cloud-app
restart: unless-stopped
network_mode: host
environment:
- NODE_ENV=production
- PORT=3002
- DATABASE_URL=mysql://pointcloud:pointcloud_password@localhost:3307/pointcloud_db
- JWT_SECRET=${JWT_SECRET:-your-super-secret-jwt-key-change-in-production}
# 内网部署禁用OAuth,使用本地认证
- AUTH_MODE=local
# MinIO S3兼容存储配置
- 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
# 数据目录路径
- DATA_DIR=/data
# 算法源码根(通用插件 Route B 通过 {algRoot} 占位符引用)
- ALG_ROOT=/alg
# 应用配置
- VITE_APP_TITLE=宏量点云处理系统
depends_on:
mysql:
condition: service_healthy
minio:
condition: service_started
volumes:
- app-logs:/app/logs
# 挂载本地数据目录 (CAD 和点云文件)
- ${LOCAL_DATA_DIR:-./data}:/data
# 算法源码(通用算法插件按 ALG_ROOT 引用,只读挂载即可)
- ${LOCAL_ALG_DIR:-./alg}:/alg:ro
# 插件 manifests + adapters 从宿主机实时读取,更新算法无需重建镜像
- ./server/plugins:/app/dist/plugins:ro
# 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
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;
"
# Redis缓存 (可选,用于会话管理和缓存)
redis:
image: redis:7-alpine
container_name: massive-point-cloud-redis
restart: unless-stopped
network_mode: host
volumes:
- redis-data:/data
command: redis-server --appendonly yes --port 6380
profiles:
- with-cache
volumes:
mysql-data:
name: pointcloud-mysql-data
minio-data:
name: pointcloud-minio-data
redis-data:
name: pointcloud-redis-data
app-logs:
name: pointcloud-app-logs