2026-02-11 22:40:35 +08:00
|
|
|
|
services:
|
2026-08-31 18:01:34 +08:00
|
|
|
|
frontend:
|
|
|
|
|
|
build:
|
|
|
|
|
|
context: .
|
|
|
|
|
|
dockerfile: deploy/Dockerfile.frontend
|
|
|
|
|
|
image: gemold-frontend:latest
|
|
|
|
|
|
container_name: gemold_frontend
|
|
|
|
|
|
ports:
|
|
|
|
|
|
- "${FRONTEND_PORT:-80}:80"
|
|
|
|
|
|
depends_on:
|
|
|
|
|
|
- backend
|
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
profiles:
|
|
|
|
|
|
- full
|
|
|
|
|
|
- frontend
|
|
|
|
|
|
networks:
|
|
|
|
|
|
- gemold_network
|
|
|
|
|
|
|
|
|
|
|
|
backend:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
build:
|
|
|
|
|
|
context: .
|
|
|
|
|
|
dockerfile: deploy/Dockerfile.moldinsight
|
2026-08-31 18:01:34 +08:00
|
|
|
|
image: gemold-backend:latest
|
|
|
|
|
|
container_name: gemold_backend
|
|
|
|
|
|
command: ["python", "-m", "uvicorn", "entrypoints.unified:app", "--host", "0.0.0.0", "--port", "8000"]
|
2026-02-11 22:40:35 +08:00
|
|
|
|
ports:
|
2026-08-31 18:01:34 +08:00
|
|
|
|
- "${BACKEND_PORT:-8000}:8000"
|
2026-02-11 22:40:35 +08:00
|
|
|
|
environment:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
HOST: 0.0.0.0
|
|
|
|
|
|
PORT: "8000"
|
|
|
|
|
|
DB_HOST: ${DB_HOST}
|
|
|
|
|
|
DB_PORT: ${DB_PORT:-5432}
|
|
|
|
|
|
DB_NAME: ${DB_NAME:-moldinsight}
|
|
|
|
|
|
DB_USER: ${DB_USER}
|
|
|
|
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT:-6379}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
|
|
|
|
|
RUSTFS_ENDPOINT: ${RUSTFS_ENDPOINT}
|
|
|
|
|
|
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
|
|
|
|
|
|
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
|
|
|
|
|
|
RUSTFS_TIMEOUT: ${RUSTFS_TIMEOUT:-30}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
SECRET_KEY: ${SECRET_KEY:?SECRET_KEY 未配置:请在 .env 中设置}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD 未配置:请在 .env 中设置}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@gemold.com}
|
|
|
|
|
|
ADMIN_FULL_NAME: ${ADMIN_FULL_NAME:-系统管理员}
|
|
|
|
|
|
ALGORITHM: ${ALGORITHM:-HS256}
|
|
|
|
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-1440}
|
|
|
|
|
|
DEBUG: ${DEBUG:-false}
|
2026-08-31 18:01:34 +08:00
|
|
|
|
SERVE_FRONTEND_STATIC: ${SERVE_FRONTEND_STATIC:-false}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
UPLOAD_DIR: ${UPLOAD_DIR:-./uploads}
|
|
|
|
|
|
MAX_FILE_SIZE: ${MAX_FILE_SIZE:-104857600}
|
|
|
|
|
|
ALLOWED_EXTENSIONS: ${ALLOWED_EXTENSIONS:-.stp,.step,.stp.gz}
|
|
|
|
|
|
POINTCLOUD_SAMPLE_COUNT: ${POINTCLOUD_SAMPLE_COUNT:-10000}
|
|
|
|
|
|
MESH_QUALITY: ${MESH_QUALITY:-high}
|
|
|
|
|
|
PARALLEL_PROCESSING: ${PARALLEL_PROCESSING:-true}
|
|
|
|
|
|
RUSTFS_PRESIGNED_URL_EXPIRES: ${RUSTFS_PRESIGNED_URL_EXPIRES:-3600}
|
|
|
|
|
|
ENABLE_FREECAD_VERIFICATION: ${ENABLE_FREECAD_VERIFICATION:-false}
|
|
|
|
|
|
FREECAD_VERIFICATION_TIMEOUT: ${FREECAD_VERIFICATION_TIMEOUT:-120}
|
|
|
|
|
|
LLM_ENABLED: ${LLM_ENABLED:-false}
|
|
|
|
|
|
LLM_API_URL: ${LLM_API_URL:-https://api.openai.com/v1}
|
|
|
|
|
|
LLM_API_KEY: ${LLM_API_KEY:-}
|
|
|
|
|
|
LLM_MODEL: ${LLM_MODEL:-gpt-4o-mini}
|
|
|
|
|
|
LLM_TIMEOUT: ${LLM_TIMEOUT:-60}
|
|
|
|
|
|
LLM_MAX_TOKENS: ${LLM_MAX_TOKENS:-2000}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
|
2026-09-18 17:22:01 +08:00
|
|
|
|
# 共享卷过渡兜底(D6/D11):主链路已改走 RustFS。uploads 供 RustFS 异常时
|
|
|
|
|
|
# 本地路径回退;html_output 仅作 /html 报告代理的存量兜底读(新产物不落本地)
|
2026-09-16 17:55:04 +08:00
|
|
|
|
volumes:
|
|
|
|
|
|
- uploads_data:/app/uploads
|
|
|
|
|
|
- html_data:/app/html_output
|
2026-02-11 22:40:35 +08:00
|
|
|
|
restart: unless-stopped
|
2026-08-27 14:53:22 +08:00
|
|
|
|
profiles:
|
|
|
|
|
|
- full
|
2026-08-31 18:01:34 +08:00
|
|
|
|
- unified
|
2026-02-11 22:40:35 +08:00
|
|
|
|
networks:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
- gemold_network
|
2026-02-11 22:40:35 +08:00
|
|
|
|
|
2026-08-27 14:53:22 +08:00
|
|
|
|
moldinsight-celery:
|
|
|
|
|
|
build:
|
|
|
|
|
|
context: .
|
|
|
|
|
|
dockerfile: deploy/Dockerfile.celery
|
|
|
|
|
|
container_name: gemold_celery
|
2026-02-11 22:40:35 +08:00
|
|
|
|
environment:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
DB_HOST: ${DB_HOST}
|
|
|
|
|
|
DB_PORT: ${DB_PORT:-5432}
|
|
|
|
|
|
DB_NAME: ${DB_NAME:-moldinsight}
|
|
|
|
|
|
DB_USER: ${DB_USER}
|
|
|
|
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT:-6379}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
|
|
|
|
|
RUSTFS_ENDPOINT: ${RUSTFS_ENDPOINT}
|
|
|
|
|
|
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
|
|
|
|
|
|
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
|
|
|
|
|
|
RUSTFS_TIMEOUT: ${RUSTFS_TIMEOUT:-30}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
SECRET_KEY: ${SECRET_KEY:?SECRET_KEY 未配置:请在 .env 中设置}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
ALGORITHM: ${ALGORITHM:-HS256}
|
|
|
|
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-1440}
|
|
|
|
|
|
DEBUG: ${DEBUG:-false}
|
2026-08-31 18:01:34 +08:00
|
|
|
|
SERVE_FRONTEND_STATIC: ${SERVE_FRONTEND_STATIC:-false}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
UPLOAD_DIR: ${UPLOAD_DIR:-./uploads}
|
|
|
|
|
|
MAX_FILE_SIZE: ${MAX_FILE_SIZE:-104857600}
|
|
|
|
|
|
ALLOWED_EXTENSIONS: ${ALLOWED_EXTENSIONS:-.stp,.step,.stp.gz}
|
|
|
|
|
|
POINTCLOUD_SAMPLE_COUNT: ${POINTCLOUD_SAMPLE_COUNT:-10000}
|
|
|
|
|
|
MESH_QUALITY: ${MESH_QUALITY:-high}
|
|
|
|
|
|
PARALLEL_PROCESSING: ${PARALLEL_PROCESSING:-true}
|
|
|
|
|
|
RUSTFS_PRESIGNED_URL_EXPIRES: ${RUSTFS_PRESIGNED_URL_EXPIRES:-3600}
|
|
|
|
|
|
ENABLE_FREECAD_VERIFICATION: ${ENABLE_FREECAD_VERIFICATION:-false}
|
|
|
|
|
|
FREECAD_VERIFICATION_TIMEOUT: ${FREECAD_VERIFICATION_TIMEOUT:-120}
|
|
|
|
|
|
LLM_ENABLED: ${LLM_ENABLED:-false}
|
|
|
|
|
|
LLM_API_URL: ${LLM_API_URL:-https://api.openai.com/v1}
|
|
|
|
|
|
LLM_API_KEY: ${LLM_API_KEY:-}
|
|
|
|
|
|
LLM_MODEL: ${LLM_MODEL:-gpt-4o-mini}
|
|
|
|
|
|
LLM_TIMEOUT: ${LLM_TIMEOUT:-60}
|
|
|
|
|
|
LLM_MAX_TOKENS: ${LLM_MAX_TOKENS:-2000}
|
2026-09-18 17:22:01 +08:00
|
|
|
|
# Celery/OCC 吞吐调优(OCC_THROUGHPUT 方案 A,默认值在 Dockerfile.celery)
|
|
|
|
|
|
CELERY_CONCURRENCY: ${CELERY_CONCURRENCY:-2}
|
|
|
|
|
|
CELERY_MAX_TASKS_PER_CHILD: ${CELERY_MAX_TASKS_PER_CHILD:-50}
|
|
|
|
|
|
# uploads_data 共享卷(D6 过渡兜底):RustFS 异常时 worker 回退本地路径下载。
|
|
|
|
|
|
# D11 后 worker 不再写 HTML 产物(直传 RustFS 报告键),无需 html_data 卷
|
2026-09-16 17:55:04 +08:00
|
|
|
|
volumes:
|
|
|
|
|
|
- uploads_data:/app/uploads
|
2026-02-11 22:40:35 +08:00
|
|
|
|
depends_on:
|
2026-08-31 18:01:34 +08:00
|
|
|
|
- backend
|
2026-02-11 22:40:35 +08:00
|
|
|
|
restart: unless-stopped
|
2026-08-27 14:53:22 +08:00
|
|
|
|
profiles:
|
|
|
|
|
|
- full
|
2026-08-31 18:01:34 +08:00
|
|
|
|
- unified
|
|
|
|
|
|
- moldinsight
|
|
|
|
|
|
networks:
|
|
|
|
|
|
- gemold_network
|
|
|
|
|
|
|
|
|
|
|
|
moldinsight:
|
|
|
|
|
|
build:
|
|
|
|
|
|
context: .
|
|
|
|
|
|
dockerfile: deploy/Dockerfile.moldinsight
|
|
|
|
|
|
image: gemold-moldinsight:latest
|
|
|
|
|
|
container_name: gemold_moldinsight
|
|
|
|
|
|
ports:
|
|
|
|
|
|
- "${MOLDINSIGHT_PORT:-8000}:8000"
|
|
|
|
|
|
environment:
|
|
|
|
|
|
HOST: 0.0.0.0
|
|
|
|
|
|
PORT: "8000"
|
|
|
|
|
|
DB_HOST: ${DB_HOST}
|
|
|
|
|
|
DB_PORT: ${DB_PORT:-5432}
|
|
|
|
|
|
DB_NAME: ${DB_NAME:-moldinsight}
|
|
|
|
|
|
DB_USER: ${DB_USER}
|
|
|
|
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT:-6379}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
|
|
|
|
|
RUSTFS_ENDPOINT: ${RUSTFS_ENDPOINT}
|
|
|
|
|
|
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
|
|
|
|
|
|
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
|
|
|
|
|
|
RUSTFS_TIMEOUT: ${RUSTFS_TIMEOUT:-30}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
SECRET_KEY: ${SECRET_KEY:?SECRET_KEY 未配置:请在 .env 中设置}
|
2026-08-31 18:01:34 +08:00
|
|
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD 未配置:请在 .env 中设置}
|
2026-08-31 18:01:34 +08:00
|
|
|
|
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@gemold.com}
|
|
|
|
|
|
ADMIN_FULL_NAME: ${ADMIN_FULL_NAME:-系统管理员}
|
|
|
|
|
|
ALGORITHM: ${ALGORITHM:-HS256}
|
|
|
|
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-1440}
|
|
|
|
|
|
DEBUG: ${DEBUG:-false}
|
|
|
|
|
|
SERVE_FRONTEND_STATIC: ${SERVE_FRONTEND_STATIC:-false}
|
|
|
|
|
|
UPLOAD_DIR: ${UPLOAD_DIR:-./uploads}
|
|
|
|
|
|
MAX_FILE_SIZE: ${MAX_FILE_SIZE:-104857600}
|
|
|
|
|
|
ALLOWED_EXTENSIONS: ${ALLOWED_EXTENSIONS:-.stp,.step,.stp.gz}
|
|
|
|
|
|
POINTCLOUD_SAMPLE_COUNT: ${POINTCLOUD_SAMPLE_COUNT:-10000}
|
|
|
|
|
|
MESH_QUALITY: ${MESH_QUALITY:-high}
|
|
|
|
|
|
PARALLEL_PROCESSING: ${PARALLEL_PROCESSING:-true}
|
|
|
|
|
|
RUSTFS_PRESIGNED_URL_EXPIRES: ${RUSTFS_PRESIGNED_URL_EXPIRES:-3600}
|
|
|
|
|
|
ENABLE_FREECAD_VERIFICATION: ${ENABLE_FREECAD_VERIFICATION:-false}
|
|
|
|
|
|
FREECAD_VERIFICATION_TIMEOUT: ${FREECAD_VERIFICATION_TIMEOUT:-120}
|
|
|
|
|
|
LLM_ENABLED: ${LLM_ENABLED:-false}
|
|
|
|
|
|
LLM_API_URL: ${LLM_API_URL:-https://api.openai.com/v1}
|
|
|
|
|
|
LLM_API_KEY: ${LLM_API_KEY:-}
|
|
|
|
|
|
LLM_MODEL: ${LLM_MODEL:-gpt-4o-mini}
|
|
|
|
|
|
LLM_TIMEOUT: ${LLM_TIMEOUT:-60}
|
|
|
|
|
|
LLM_MAX_TOKENS: ${LLM_MAX_TOKENS:-2000}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
|
2026-09-18 17:22:01 +08:00
|
|
|
|
# html_output 仅作 /html 报告代理的存量兜底读(D11,新产物不落本地)
|
2026-09-16 17:55:04 +08:00
|
|
|
|
volumes:
|
|
|
|
|
|
- uploads_data:/app/uploads
|
|
|
|
|
|
- html_data:/app/html_output
|
2026-08-31 18:01:34 +08:00
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
profiles:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
- moldinsight
|
2026-02-11 22:40:35 +08:00
|
|
|
|
networks:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
- gemold_network
|
2026-02-11 22:40:35 +08:00
|
|
|
|
|
2026-08-27 14:53:22 +08:00
|
|
|
|
inventory:
|
|
|
|
|
|
build:
|
|
|
|
|
|
context: .
|
|
|
|
|
|
dockerfile: deploy/Dockerfile.inventory
|
|
|
|
|
|
image: gemold-inventory:latest
|
|
|
|
|
|
container_name: gemold_inventory
|
|
|
|
|
|
ports:
|
|
|
|
|
|
- "${INVENTORY_PORT:-8001}:8001"
|
2026-05-28 17:59:39 +08:00
|
|
|
|
environment:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
HOST: 0.0.0.0
|
|
|
|
|
|
PORT: "8001"
|
|
|
|
|
|
DB_HOST: ${DB_HOST}
|
|
|
|
|
|
DB_PORT: ${DB_PORT:-5432}
|
|
|
|
|
|
DB_NAME: ${DB_NAME:-moldinsight}
|
|
|
|
|
|
DB_USER: ${DB_USER}
|
|
|
|
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
|
|
|
|
REDIS_HOST: ${REDIS_HOST}
|
|
|
|
|
|
REDIS_PORT: ${REDIS_PORT:-6379}
|
|
|
|
|
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
SECRET_KEY: ${SECRET_KEY:?SECRET_KEY 未配置:请在 .env 中设置}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD 未配置:请在 .env 中设置}
|
2026-08-27 14:53:22 +08:00
|
|
|
|
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@gemold.com}
|
|
|
|
|
|
ADMIN_FULL_NAME: ${ADMIN_FULL_NAME:-系统管理员}
|
|
|
|
|
|
ALGORITHM: ${ALGORITHM:-HS256}
|
|
|
|
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-1440}
|
|
|
|
|
|
DEBUG: ${DEBUG:-false}
|
2026-08-31 18:01:34 +08:00
|
|
|
|
SERVE_FRONTEND_STATIC: ${SERVE_FRONTEND_STATIC:-false}
|
2026-09-16 17:55:04 +08:00
|
|
|
|
AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
|
2026-05-28 17:59:39 +08:00
|
|
|
|
restart: unless-stopped
|
2026-08-27 14:53:22 +08:00
|
|
|
|
profiles:
|
|
|
|
|
|
- inventory
|
2026-05-28 17:59:39 +08:00
|
|
|
|
networks:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
- gemold_network
|
2026-02-11 22:40:35 +08:00
|
|
|
|
|
|
|
|
|
|
networks:
|
2026-08-27 14:53:22 +08:00
|
|
|
|
gemold_network:
|
2026-02-11 22:40:35 +08:00
|
|
|
|
driver: bridge
|
2026-09-16 17:55:04 +08:00
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
uploads_data:
|
|
|
|
|
|
html_data:
|