services: api: build: . env_file: - .env.compose ports: - "8000:8000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy rabbitmq: condition: service_healthy restart: on-failure command: ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] consumer: build: . env_file: - .env.compose depends_on: redis: condition: service_healthy rabbitmq: condition: service_healthy restart: on-failure command: ["python", "-m", "app.consumers.order_consumer"] celery: build: . env_file: - .env.compose depends_on: redis: condition: service_healthy restart: on-failure command: ["celery", "-A", "app.core.celery_app.celery_app", "worker", "--loglevel=info"] postgres: image: postgres:16 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: test_funtech ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d test_funtech"] interval: 5s timeout: 3s retries: 20 redis: image: redis:7 ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 20 rabbitmq: image: rabbitmq:3-management ports: - "5672:5672" - "15672:15672" healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 5s timeout: 5s retries: 20 kafka: image: confluentinc/cp-kafka:7.6.1 ports: - "9092:9092" environment: - KAFKA_NODE_ID=1 - KAFKA_PROCESS_ROLES=broker,controller - KAFKA_LISTENERS=PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 - KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 - KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 - KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0 - KAFKA_NUM_PARTITIONS=1 - CLUSTER_ID=MkU3OEVBNTcwNTJENDM2Qk healthcheck: test: ["CMD-SHELL", "kafka-broker-api-versions --bootstrap-server kafka:9092 > /dev/null 2>&1"] interval: 10s timeout: 10s retries: 20 volumes: postgres_data: