# 当前生产发布不使用本文件作为入口。 # 生产发布以 scripts/git-incremental-deploy.ps1 为准;本文件仅作本地/单机/基础环境参考。 # 不要按此文件推断当前线上容器启动参数、uploads 挂载或健康检查。 services: app: build: context: . dockerfile: Dockerfile container_name: youyidian-3d-material restart: unless-stopped ports: - "4320:3000" dns: - 223.5.5.5 # 阿里云DNS - 8.8.8.8 # Google DNS - 114.114.114.114 # 114DNS # 内存限制配置(防止内存泄漏影响系统) deploy: resources: limits: memory: 6G # 硬限制:最大6GB(正常1-2GB + 缓冲2-3GB + 安全边界1GB) reservations: memory: 512M # 软限制:保证至少512MB # 健康检查 healthcheck: test: ["CMD", "node", "-e", "process.exit(0)"] interval: 30s timeout: 10s retries: 3 start_period: 40s environment: - NODE_ENV=production - DATABASE_URL=${DATABASE_URL:?DATABASE_URL is required} - DATABASE_DRIVER=node - KEY_VAULTS_SECRET=${KEY_VAULTS_SECRET:?KEY_VAULTS_SECRET is required} - VECTOR_DB=pgvector - PGVECTOR_DB_URL=${PGVECTOR_DB_URL:?PGVECTOR_DB_URL is required} - STORAGE_PROVIDER=s3 - S3_ENDPOINT=http://192.168.58.20:9000 - S3_BUCKET=gongxiangpan - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID:?S3_ACCESS_KEY_ID is required} - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY:?S3_SECRET_ACCESS_KEY is required} - S3_REGION=us-east-1 - S3_PUBLIC_DOMAIN=https://s3.jiansun.vip/gongxiangpan - S3_ENABLE_PATH_STYLE=1 - S3_SET_ACL=1 - S3_PREVIEW_URL_EXPIRE_IN=7200 - NEXT_PUBLIC_S3_FILE_PATH=由壹点AI/ - APP_PUBLIC_URL=https://sc.jiansun.vip - NEXT_PUBLIC_DINGTALK_CALLBACK_ORIGIN=https://sc.jiansun.vip - NEXTAUTH_URL=https://sc.jiansun.vip # 内网地址配置(用于流量分离:内网用户走内网网络,不占用外网带宽) - SERVER_IP=192.168.58.20 - MINIO_API_PORT=9000 - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?NEXTAUTH_SECRET is required} - GEMINI_API_KEY=${GEMINI_API_KEY:?GEMINI_API_KEY is required} - GEMINI_API_BASE_URL=https://api.huandutech.com/v1 - GEMINI_MODEL=gemini-2.0-flash-exp - DINGTALK_CLIENT_ID=ding1bs1gxwrcfu16x0f - DINGTALK_CLIENT_SECRET=${DINGTALK_CLIENT_SECRET:?DINGTALK_CLIENT_SECRET is required} - DINGTALK_ROBOT_CODE=${DINGTALK_ROBOT_CODE:-} - DINGTALK_PERFORMANCE_SURVEY_NOTIFICATION_CHANNEL=${DINGTALK_PERFORMANCE_SURVEY_NOTIFICATION_CHANNEL:-work_notice} - DINGTALK_ROBOT_OTO_TEST_USER_IDS=${DINGTALK_ROBOT_OTO_TEST_USER_IDS:-} - YYD_NOTIFICATION_CENTER_URL=${YYD_NOTIFICATION_CENTER_URL:-} - YYD_NOTIFICATION_CENTER_PROJECT_CODE=${YYD_NOTIFICATION_CENTER_PROJECT_CODE:-material_library} - YYD_NOTIFICATION_CENTER_PROJECT_SECRET=${YYD_NOTIFICATION_CENTER_PROJECT_SECRET:-} - YYD_NOTIFICATION_CENTER_TEST_USER_IDS=${YYD_NOTIFICATION_CENTER_TEST_USER_IDS:-} # 视频转码配置 - VIDEO_TRANSCODE_CODEC=libx265 - VIDEO_TRANSCODE_PRESET=medium - VIDEO_TRANSCODE_CRF=22 - VIDEO_AUDIO_BITRATE=160k # 下载 Token 密钥(用于外部接口文件下载鉴权) - DOWNLOAD_TOKEN_SECRET=${DOWNLOAD_TOKEN_SECRET:?DOWNLOAD_TOKEN_SECRET is required} # Redis配置(用于上传会话存储) - USE_REDIS=true - REDIS_URL=redis://redis:6379 volumes: - ./uploads:/app/uploads networks: - app-network depends_on: - redis redis: image: redis:7-alpine container_name: gongxiangpan-redis restart: unless-stopped command: redis-server --maxmemory 100mb --maxmemory-policy allkeys-lru --save "" deploy: resources: limits: memory: 128M reservations: memory: 32M healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 networks: - app-network volumes: - redis-data:/data networks: app-network: driver: bridge volumes: redis-data: