version: '3.8' services: backend: build: ./backend ports: - "${BACKEND_PORT:-8094}:8000" environment: - APP_ENV=dev - DATABASE_URL=sqlite+aiosqlite:////app/data/app.db - S3_ENDPOINT_URL=http://minio:9000 - S3_REGION=us-east-1 - S3_ACCESS_KEY_ID=${MINIO_ROOT_USER:-minioadmin} - S3_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD:-minioadmin} - MEDIA_BUCKET=itcloud-media - JWT_SECRET=${JWT_SECRET:-dev-secret-key-change-in-production} - CORS_ORIGINS=${CORS_ORIGINS} - REDIS_URL=redis://redis:6379/0 volumes: - ./backend/src:/app/src - backend-data:/app/data depends_on: - minio - redis command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload minio: image: minio/minio:latest ports: - "${MINIO_API_PORT:-9090}:9000" - "${MINIO_CONSOLE_PORT:-9091}:9001" environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin} volumes: - ${S3_DATA_PATH:-/mnt/data/s3}:/data command: server /data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 minio-setup: image: minio/mc:latest depends_on: - minio entrypoint: > /bin/sh -c " sleep 5; /usr/bin/mc alias set myminio http://minio:9000 minioadmin minioadmin; /usr/bin/mc mb myminio/itcloud-media --ignore-existing; /usr/bin/mc anonymous set none myminio/itcloud-media; exit 0; " redis: image: redis:7-alpine ports: - "${REDIS_PORT:-6388}:6379" volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 frontend: build: ./frontend ports: - "${FRONTEND_PORT:-8095}:5173" environment: - VITE_API_URL=${VITE_API_URL} volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public command: npm run dev -- --host 0.0.0.0 volumes: backend-data: redis-data: