version: '3.9' services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: imago POSTGRES_PASSWORD: imago POSTGRES_DB: imago ports: - '5432:5432' volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U imago'] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine ports: - '6379:6379' volumes: - redisdata:/data healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 5s timeout: 5s retries: 5 minio: image: minio/minio:latest command: server /data --console-address ':9001' environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - '9000:9000' - '9001:9001' volumes: - miniodata:/data healthcheck: test: ['CMD', 'mc', 'ready', 'local'] interval: 5s timeout: 5s retries: 5 api: build: . ports: - '8000:8000' environment: - DATABASE_URL=postgresql+asyncpg://imago:imago@postgres:5432/imago - REDIS_URL=redis://redis:6379/0 - STORAGE_BACKEND=s3 - S3_BUCKET=imago - S3_ENDPOINT_URL=http://minio:9000 - S3_ENDPOINT_PUBLIC=http://localhost:9000 - S3_ACCESS_KEY=minioadmin - S3_SECRET_KEY=minioadmin - S3_REGION=us-east-1 - SIGNED_URL_SECRET=dev-secret-change-in-prod - SECRET_KEY=dev-secret-change-in-prod - TESSERACT_CMD=/usr/bin/tesseract - GEMINI_API_KEY=${GEMINI_API_KEY:-} - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-} depends_on: postgres: condition: service_healthy redis: condition: service_healthy minio: condition: service_healthy volumes: - uploads:/app/data/uploads - thumbnails:/app/data/thumbnails volumes: pgdata: redisdata: miniodata: uploads: thumbnails: