name: aioa services: postgres: image: postgres:17.5-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-aioa} POSTGRES_USER: ${POSTGRES_USER:-aioa} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me} ports: - "15432:5432" volumes: # Versioned volume avoids accidentally reusing a database initialized # by another local project or an earlier credential set. - postgres-data-v1:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 20 redis: image: redis:8.0.2-alpine command: ["redis-server", "--appendonly", "yes"] ports: - "6379:6379" volumes: - redis-data:/data keycloak: image: quay.io/keycloak/keycloak:26.2.5 command: ["start-dev", "--import-realm"] environment: KC_BOOTSTRAP_ADMIN_USERNAME: ${KEYCLOAK_ADMIN:-admin} KC_BOOTSTRAP_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-change-me} KC_HOSTNAME: http://localhost:8081 ports: - "8081:8080" volumes: - ./keycloak/realm-aioa.json:/opt/keycloak/data/import/realm-aioa.json:ro - ./keycloak/themes/aioa:/opt/keycloak/themes/aioa:ro minio: image: minio/minio:RELEASE.2025-06-13T11-33-47Z command: ["server", "/data", "--console-address", ":9001"] environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-change-me-now} ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data ai-service: build: context: ../../ai-service environment: QWEN_API_KEY: ${QWEN_API_KEY:-} QWEN_MODEL: ${QWEN_MODEL:-qwen-plus} ports: - "8000:8000" healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health')"] interval: 10s timeout: 5s retries: 10 volumes: postgres-data-v1: redis-data: minio-data: