- Add S3Service for file operations with MinIO/AWS S3 support - Add AudioMetadataService for metadata extraction - Add MusicFile model with MongoDB integration - Add music API routes for upload, streaming, and management - Add MusicUpload component with drag-and-drop functionality - Add MusicPlayer component with custom audio controls - Add MusicStorage page with complete music management interface - Update Docker Compose with MinIO service - Add comprehensive documentation and testing utilities Features: - S3-compatible storage (MinIO for local, AWS S3 for production) - Audio file upload with metadata extraction - Browser-based music streaming and playback - File management (upload, delete, search, filter) - Integration with existing Rekordbox functionality - Security features (file validation, presigned URLs) - Performance optimizations (indexing, pagination) Supported formats: MP3, WAV, FLAC, AAC, OGG, WMA, Opus
89 lines
2.0 KiB
YAML
89 lines
2.0 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
frontend:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/frontend/Dockerfile
|
|
ports:
|
|
- "8080:80"
|
|
environment:
|
|
- VITE_API_URL=http://localhost:3001/api
|
|
depends_on:
|
|
backend:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
backend:
|
|
build:
|
|
context: .
|
|
dockerfile: packages/backend/Dockerfile
|
|
ports:
|
|
- "3001:3000"
|
|
environment:
|
|
- MONGODB_URI=mongodb://mongo:27017/rekordbox
|
|
- PORT=3000
|
|
- NODE_ENV=production
|
|
- S3_ENDPOINT=http://minio:9000
|
|
- S3_ACCESS_KEY_ID=minioadmin
|
|
- S3_SECRET_ACCESS_KEY=minioadmin
|
|
- S3_BUCKET_NAME=music-files
|
|
- S3_REGION=us-east-1
|
|
depends_on:
|
|
mongo:
|
|
condition: service_healthy
|
|
minio:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
mongo:
|
|
image: mongo:latest
|
|
ports:
|
|
- "27017:27017"
|
|
volumes:
|
|
- mongodb_data:/data/db
|
|
healthcheck:
|
|
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
restart: unless-stopped
|
|
|
|
minio:
|
|
image: minio/minio:latest
|
|
ports:
|
|
- "9000:9000"
|
|
- "9001:9001"
|
|
environment:
|
|
- MINIO_ROOT_USER=minioadmin
|
|
- MINIO_ROOT_PASSWORD=minioadmin
|
|
volumes:
|
|
- minio_data:/data
|
|
command: server /data --console-address ":9001"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
|
interval: 30s
|
|
timeout: 20s
|
|
retries: 3
|
|
start_period: 30s
|
|
restart: unless-stopped
|
|
|
|
# MinIO client for initial setup
|
|
minio-client:
|
|
image: minio/mc:latest
|
|
depends_on:
|
|
- minio
|
|
command: >
|
|
sh -c "
|
|
sleep 10 &&
|
|
mc alias set myminio http://minio:9000 minioadmin minioadmin &&
|
|
mc mb myminio/music-files &&
|
|
mc policy set public myminio/music-files &&
|
|
echo 'MinIO setup complete'
|
|
"
|
|
restart: "no"
|
|
|
|
volumes:
|
|
mongodb_data:
|
|
minio_data: |