services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: reactbin POSTGRES_PASSWORD: reactbin POSTGRES_DB: reactbin volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U reactbin"] interval: 5s timeout: 5s retries: 5 minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID:-minioadmin} MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY:-minioadmin} volumes: - minio_data:/data ports: - "9000:9000" - "9001:9001" healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 5s timeout: 5s retries: 5 minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy environment: MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID:-minioadmin} MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY:-minioadmin} S3_BUCKET_NAME: ${S3_BUCKET_NAME:-reactbin} entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/$$S3_BUCKET_NAME && mc anonymous set download local/$$S3_BUCKET_NAME " api: build: context: ./api env_file: .env ports: - "8000:8000" volumes: - ./api:/app depends_on: postgres: condition: service_healthy minio-init: condition: service_completed_successfully healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8000/api/v1/health || exit 1"] interval: 10s timeout: 5s retries: 5 ui: build: context: ./ui env_file: .env ports: - "4200:4200" volumes: - ./ui:/app - /app/node_modules depends_on: api: condition: service_healthy volumes: postgres_data: minio_data: