services: mongodb: image: mongo:7.0 container_name: mongodb ports: - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} volumes: - mongodb_data:/data/db restart: unless-stopped healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 30s timeout: 10s retries: 3 minio: image: minio/minio:latest container_name: minio ports: - "9000:9000" # API - "9001:9001" # Web Console environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} 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 restart: unless-stopped minio-init: image: minio/mc:latest container_name: minio-init depends_on: minio: condition: service_healthy environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} entrypoint: > /bin/sh -c " mc alias set myminio http://minio:9000 \$MINIO_ROOT_USER \$MINIO_ROOT_PASSWORD && mc mb --ignore-existing myminio/storage && echo 'Created storage bucket' && mc anonymous set myminio/storage/users/*/profile/avatar_*.webp download && echo 'Applied custom profile-image policy' && echo 'MinIO initialization complete' " restart: "no" volumes: mongodb_data: driver: local minio_data: driver: local