# OpenDance Studio Web 服务端 —— Docker Compose 部署 # # 重要:本文件**不包含 MySQL 服务**。 # 数据库为部署方提供的现有 MySQL/MariaDB 实例,连接信息由 .env 注入 # (见 contracts/database.md)。 # # 用法: # cp .env.example .env # 填写数据库连接信息 # ./install.sh services: api: build: context: ../web-server dockerfile: Dockerfile image: opendance-web-server:0.1.0 container_name: opendance-api env_file: - .env environment: NODE_ENV: production PORT: "3000" DB_HOST: ${DB_HOST} DB_PORT: ${DB_PORT:-3306} DB_USER: ${DB_USER} DB_PASS: ${DB_PASS} DB_NAME: ${DB_NAME} # 契约要求:生产环境禁止 synchronize DB_SYNCHRONIZE: "false" DB_LOGGING: ${DB_LOGGING:-false} STORAGE_DIR: /data/storage UPLOAD_MAX_BYTES: ${UPLOAD_MAX_BYTES:-536870912} ASSIMP_BIN: ${ASSIMP_BIN:-assimp} # 挂载的契约快照目录,/health 与 /api/catalog/version 会读取其实时版本 CONTRACTS_DIR: /contracts ports: - "${API_PORT:-3000}:3000" volumes: - storage:/data/storage - ../contracts:/contracts:ro restart: unless-stopped healthcheck: test: - CMD - node - -e - "fetch('http://127.0.0.1:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" interval: 30s timeout: 5s start_period: 20s retries: 3 admin: build: context: ../web-server/admin dockerfile: Dockerfile image: opendance-admin:0.1.0 container_name: opendance-admin ports: - "${ADMIN_PORT:-8080}:80" depends_on: api: condition: service_healthy restart: unless-stopped volumes: storage: name: opendance-storage