# 3D 家具安装展示系统 - 标准模式 # 适用于: 8GB+ 内存的服务器/NAS # 性能目标: 支持中等并发,完整功能 version: '3.8' services: # 前端服务 - Nginx + Next.js 静态资源 frontend: image: furniture-3d-frontend:latest container_name: furniture-frontend restart: unless-stopped ports: - "${WEB_PORT:-3000}:80" environment: - NGINX_WORKER_PROCESSES=4 - NGINX_WORKER_CONNECTIONS=1024 - ENABLE_GZIP_COMPRESSION=true volumes: - nginx-cache:/var/cache/nginx depends_on: backend: condition: service_healthy networks: - furniture-network mem_limit: 1g cpus: 2.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80/health"] interval: 30s timeout: 10s retries: 3 # 后端服务 - Next.js API + Prisma backend: image: furniture-3d-backend:latest container_name: furniture-backend restart: unless-stopped environment: - NODE_ENV=production - DATABASE_URL=${DATABASE_URL} - REDIS_URL=${REDIS_URL} - S3_ENDPOINT=${S3_ENDPOINT} - S3_BUCKET=${S3_BUCKET} - MINIO_USER=${MINIO_USER} - MINIO_PASSWORD=${MINIO_PASSWORD} # 性能配置 - DB_POOL_SIZE=20 - ENABLE_COMPRESSION=true - MAX_CONCURRENT_REQUESTS=50 - MODEL_CACHE_SIZE=200 depends_on: postgres: condition: service_healthy redis: condition: service_started minio: condition: service_started networks: - furniture-network mem_limit: 2g cpus: 4.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # PostgreSQL 数据库 postgres: image: postgres:15-alpine container_name: furniture-postgres restart: unless-stopped environment: - POSTGRES_DB=furniture_db - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${DB_PASSWORD} - PGDATA=/var/lib/postgresql/data/pgdata command: > postgres -c shared_buffers=256MB -c max_connections=100 -c work_mem=16MB -c maintenance_work_mem=128MB -c effective_cache_size=512MB -c checkpoint_completion_target=0.9 -c wal_buffers=16MB -c default_statistics_target=100 volumes: - postgres-data:/var/lib/postgresql/data networks: - furniture-network mem_limit: 1g cpus: 2.0 healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d furniture_db"] interval: 10s timeout: 5s retries: 5 # MinIO 对象存储 - 3D 模型文件 minio: image: minio/minio:latest container_name: furniture-minio restart: unless-stopped environment: - MINIO_ROOT_USER=${MINIO_USER} - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD} - MINIO_BROWSER_REDIRECT_URL=http://localhost:9001 command: server /data --console-address ":9001" volumes: - minio-data:/data networks: - furniture-network mem_limit: 1g cpus: 1.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 # Redis 缓存 redis: image: redis:7-alpine container_name: furniture-redis restart: unless-stopped command: > redis-server --maxmemory 400mb --maxmemory-policy allkeys-lru --save 900 1 --save 300 10 --save 60 10000 volumes: - redis-data:/data networks: - furniture-network mem_limit: 512m cpus: 1.0 healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 networks: furniture-network: driver: bridge volumes: postgres-data: driver: local minio-data: driver: local redis-data: driver: local nginx-cache: driver: local