services: api: build: context: . dockerfile: Dockerfile ports: - "8080:8080" environment: - PORT=8080 - DATABASE_URL=postgresql://cleanplate:cleanplate@postgres:5432/cleanplate - REDIS_URL=redis://redis:6379 - JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} - MEILISEARCH_URL=http://meilisearch:7700 - MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-dev-meili-key} - MINIO_ENDPOINT=minio:9000 - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin} - APP_ENV=development depends_on: postgres: condition: service_healthy redis: condition: service_healthy meilisearch: condition: service_started minio: condition: service_started restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s postgres: image: postgres:16-alpine ports: - "5432:5432" environment: POSTGRES_DB: cleanplate POSTGRES_USER: cleanplate POSTGRES_PASSWORD: cleanplate volumes: - pg_data:/var/lib/postgresql/data - ./migrations:/docker-entrypoint-initdb.d healthcheck: test: ["CMD-SHELL", "pg_isready -U cleanplate -d cleanplate"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped meilisearch: image: getmeili/meilisearch:v1.11 ports: - "7700:7700" environment: MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-dev-meili-key} MEILI_ENV: development volumes: - meili_data:/meili_data restart: unless-stopped minio: image: minio/minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin} volumes: - minio_data:/data command: server /data --console-address ":9001" restart: unless-stopped # MinIO bucket initialization minio-init: image: minio/mc depends_on: - minio entrypoint: > /bin/sh -c " sleep 5; mc alias set local http://minio:9000 minioadmin minioadmin; mc mb --ignore-existing local/cleanplate-images; mc mb --ignore-existing local/cleanplate-videos; mc mb --ignore-existing local/cleanplate-temp; mc anonymous set download local/cleanplate-images; mc anonymous set download local/cleanplate-videos; echo 'Buckets created successfully'; " volumes: pg_data: redis_data: meili_data: minio_data: